On 12:58 Wed 07 Jul , Todd Rimmer wrote: > Is there a way to accomplish this feature without an ABI change? Or should > ABI altering features be only included in Major releases (such as OFED 1.6?)
I urged about ABI change on the list when this patch was posted. And I don't think that we can change the version back. > Keep in mind, that ABI changes mean that 3rd parties must rebuild and > re-release their applications. While this isn't so bad for OFED itself and > IB vendors, it's a major issue for other 3rd party apps. Introducing a ABI > change in a maintenance release just makes things that much more confusing. > > One alternative would be for OFED 1.5.2 to include both the .2 and .3 > versions of the library. We discussed such option - to have a package compat-libs or so, but as far as I can remember no one wanted to take responsibility to maintain this. > Another alternative would be to design the structures so there is room for > expansion or pointers to opaque datatypes for fields only used by the library. Currently it would mean API redesign and more version changes. Sasha > > Todd Rimmer > Chief Architect > QLogic Network Systems Group > Voice: 610-233-4852 Fax: 610-233-4777 > todd.rim...@qlogic.com www.QLogic.com > > > > -----Original Message----- > > From: Sasha Khapyorsky [mailto:sashakv...@gmail.com] On Behalf Of Sasha > > Khapyorsky > > Sent: Wednesday, July 07, 2010 9:34 AM > > To: Todd Rimmer > > Cc: e...@openfabrics.org > > Subject: Re: libibumad.so version bump in OFED 1.5.2 > > > > Hi Todd, > > > > On 06:48 Tue 06 Jul , Todd Rimmer wrote: > > > I recently discovered that 3rd party applications built for OFED 1.5 > > will not run on OFED 1.5.2rc2. > > > > > > The issue I found was that libibumad had changed from version 2 to > > version 3. Can you provide insight as to why this change was made? > > > > > > In reviewing the source code and change logs there do not seem to be > > any changes which would impact the application API nor application ABI. > > > > > > > > > > > > I diffed the code and the main change seems to be: > > > diff -r --exclude CVS ./src/src/umad.c-orig ./src/src/umad.c > > > 161a162,166 > > > > if (sys_read_string(port_dir, SYS_PORT_LINK_LAYER, > > > > port->link_layer, UMAD_CA_NAME_LEN) < 0) > > > > /* assume IB by default */ > > > > sprintf(port->link_layer, "IB"); > > > > > > > The above change might imply an update to an rpm dependency on ib- > > kernel versions, but should not result in a new library version. If > > the library version remained at 2, then applications built for OFED 1.5 > > would also run on OFED 1.5.2rc2 without recompile. > > > > This is not an only change. The whole commit is: > > > > > > commit 99d0901f3702e22c178352524af18ec567781d51 > > Author: Yevgeny Kliteynik <klit...@dev.mellanox.co.il> > > Date: Tue Mar 9 12:39:40 2010 +0200 > > > > libibumad: added link_layer for RoCEE support and updated umad > > version > > > > Added link_layer field to umad_port_t. > > The field is implemented as char[]. > > If the relevant file doesn't exist in sysfs, the link layer > > is "IB". Otherwise, the content of link_layer file is used. > > > > The libibumad version is promoted. > > > > Signed-off-by: Yevgeny Kliteynik <klit...@dev.mellanox.co.il> > > Signed-off-by: Sasha Khapyorsky <sas...@voltaire.com> > > > > diff --git a/libibumad/include/infiniband/umad.h > > b/libibumad/include/infiniband/umad.h > > index 1f82183..f9da204 100644 > > --- a/libibumad/include/infiniband/umad.h > > +++ b/libibumad/include/infiniband/umad.h > > @@ -116,6 +116,7 @@ typedef struct ib_user_mad { > > #define SYS_PORT_RATE "rate" > > #define SYS_PORT_GUID "port_guid" > > #define SYS_PORT_GID "gids/0" > > +#define SYS_PORT_LINK_LAYER "link_layer" > > > > typedef struct umad_port { > > char ca_name[UMAD_CA_NAME_LEN]; > > @@ -132,6 +133,7 @@ typedef struct umad_port { > > uint64_t port_guid; > > unsigned pkeys_size; > > uint16_t *pkeys; > > + char link_layer[UMAD_CA_NAME_LEN]; > > } umad_port_t; > > > > typedef struct umad_ca { > > diff --git a/libibumad/libibumad.ver b/libibumad/libibumad.ver > > index 57cddbd..d36fbbc 100644 > > --- a/libibumad/libibumad.ver > > +++ b/libibumad/libibumad.ver > > @@ -6,4 +6,4 @@ > > # API_REV - advance on any added API > > # RUNNING_REV - advance any change to the vendor files > > # AGE - number of backward versions the API still supports > > -LIBVERSION=2:1:0 > > +LIBVERSION=2:2:0 > > diff --git a/libibumad/src/umad.c b/libibumad/src/umad.c > > index 277ae6b..d16e750 100644 > > --- a/libibumad/src/umad.c > > +++ b/libibumad/src/umad.c > > @@ -159,6 +159,11 @@ static int get_port(char *ca_name, char *dir, int > > portnum, umad_port_t * port) > > if (sys_read_uint(port_dir, SYS_PORT_CAPMASK, &port->capmask) < > > 0) > > goto clean; > > > > + if (sys_read_string(port_dir, SYS_PORT_LINK_LAYER, > > + port->link_layer, UMAD_CA_NAME_LEN) < 0) > > + /* assume IB by default */ > > + sprintf(port->link_layer, "IB"); > > + > > port->capmask = htonl(port->capmask); > > > > if (sys_read_gid(port_dir, SYS_PORT_GID, gid) < 0) > > > > > > Altering 'struct umad_port' effectively breaks ABI. > > > > Sasha > _______________________________________________ ewg mailing list ewg@lists.openfabrics.org http://lists.openfabrics.org/cgi-bin/mailman/listinfo/ewg