Hi Hal, The patch fixes the problem I saw. Please apply it. Thanks, Yael > -----Original Message----- > From: Hal Rosenstock [mailto:[EMAIL PROTECTED] > Sent: Wednesday, April 05, 2006 3:55 PM > To: Yael Kalka > Cc: [email protected] > Subject: [PATCHv2] OpenSM: Fix osm_vendor_send for GSI classes > > Hi Yael, > > Below is a slightly modified version of the previous patch. It is a > complete fix for the problem you identified. Let me know if > this works for you and I will check it into both the trunk and 1.0 > branch. > > Thanks. > > -- Hal > > OpenSM: Fix osm_vendor_send for GSI classes > > Currently, the default for GSI classes assumes RMPP. There are two > groups of GSI classes: those which support RMPP and those which don't. > This patch handles them properly in osm_vendor_send. > > Problem pointed out by Yael Kalka <[EMAIL PROTECTED]> > > Signed-off-by: Hal Rosenstock <[EMAIL PROTECTED]> > > Index: include/iba/ib_types.h > =================================================================== > --- include/iba/ib_types.h (revision 6219) > +++ include/iba/ib_types.h (working copy) > @@ -515,6 +515,30 @@ BEGIN_C_DECLS > #define IB_MCLASS_VENDOR_LOW_RANGE_MAX 0x0f > /**********/ > > +/****d* IBA Base: Constants/IB_MCLASS_DEV_ADM > +* NAME > +* IB_MCLASS_DEV_ADM > +* > +* DESCRIPTION > +* Subnet Management Class, Device Administration > +* > +* SOURCE > +*/ > +#define IB_MCLASS_DEV_ADM 0x10 > +/**********/ > + > +/****d* IBA Base: Constants/IB_MCLASS_BIS > +* NAME > +* IB_MCLASS_BIS > +* > +* DESCRIPTION > +* Subnet Management Class, BIS > +* > +* SOURCE > +*/ > +#define IB_MCLASS_BIS 0x12 > +/**********/ > + > /****d* IBA Base: Constants/IB_MCLASS_VENDOR_HIGH_RANGE_MIN > * NAME > * IB_MCLASS_VENDOR_HIGH_RANGE_MIN > @@ -544,7 +568,7 @@ BEGIN_C_DECLS > * ib_class_is_vendor_specific_low > * > * DESCRIPTION > -* Indicitates if the Class Code if a vendor specific class from > +* Indicates if the Class Code if a vendor specific class from > * the low range > * > * SYNOPSIS > @@ -576,7 +600,7 @@ ib_class_is_vendor_specific_low( > * ib_class_is_vendor_specific_high > * > * DESCRIPTION > -* Indicitates if the Class Code if a vendor specific class from > +* Indicates if the Class Code if a vendor specific class from > * the high range > * > * SYNOPSIS > @@ -609,7 +633,7 @@ ib_class_is_vendor_specific_high( > * ib_class_is_vendor_specific > * > * DESCRIPTION > -* Indicitates if the Class Code if a vendor specific class > +* Indicates if the Class Code if a vendor specific class > * > * SYNOPSIS > */ > @@ -635,6 +659,38 @@ ib_class_is_vendor_specific( > * ib_class_is_vendor_specific_low, ib_class_is_vendor_specific_high > *********/ > > +/****f* IBA Base: Types/ib_class_is_rmpp > +* NAME > +* ib_class_is_rmpp > +* > +* DESCRIPTION > +* Indicates if the Class Code supports RMPP > +* > +* SYNOPSIS > +*/ > +static inline boolean_t > +ib_class_is_rmpp( > + IN const uint8_t class_code ) > +{ > + return( (class_code == IB_MCLASS_SUBN_ADM) || > + (class_code == IB_MCLASS_DEV_MGMT) || > + (class_code == IB_MCLASS_DEV_ADM) || > + (class_code == IB_MCLASS_BIS) || > + ib_class_is_vendor_specific_high( class_code ) ); > +} > +/* > +* PARAMETERS > +* class_code > +* [in] The Management Datagram Class Code > +* > +* RETURN VALUE > +* TRUE if the class supports RMPP > +* FALSE otherwise. > +* > +* NOTES > +* > +*********/ > + > /* > * MAD methods > */ > @@ -1811,7 +1867,7 @@ ib_pkey_get_base( > * ib_pkey_is_full_member > * > * DESCRIPTION > -* Indicitates if the port is a full member of the parition. > +* Indicates if the port is a full member of the parition. > * > * SYNOPSIS > */ > Index: libvendor/osm_vendor_ibumad.c > =================================================================== > --- libvendor/osm_vendor_ibumad.c (revision 6219) > +++ libvendor/osm_vendor_ibumad.c (working copy) > @@ -1044,16 +1044,17 @@ osm_vendor_send( > CL_ASSERT( p_vw->h_bind == h_bind ); > CL_ASSERT( p_mad == umad_get_mad(p_vw->umad) ); > > - switch (p_mad->mgmt_class) { > - case IB_MCLASS_SUBN_DIR: > + if (p_mad->mgmt_class == IB_MCLASS_SUBN_DIR) { > umad_set_addr_net(p_vw->umad, 0xffff, 0, 0, 0); > umad_set_grh(p_vw->umad, 0); > - break; > - case IB_MCLASS_SUBN_LID: > + goto Resp; > + } > + if (p_mad->mgmt_class == IB_MCLASS_SUBN_LID) { > umad_set_addr_net(p_vw->umad, p_mad_addr->dest_lid, 0, 0, 0); > umad_set_grh(p_vw->umad, 0); > - break; > - default: /* GSI FIXME: no GRH */ > + goto Resp; > + } > + if (ib_class_is_rmpp(p_mad->mgmt_class)) { /* RMPP GSI classes > FIXME: no GRH */ > umad_set_addr_net(p_vw->umad, p_mad_addr->dest_lid, > p_mad_addr->addr_type.gsi.remote_qp, > p_mad_addr->addr_type.gsi.service_level, > @@ -1086,9 +1087,16 @@ osm_vendor_send( > p_sa->paylen_newwin = cl_ntoh32(paylen); > } > #endif > - break; > + } else { /* non RMPP GSI classes FIXME: no GRH */ > + umad_set_addr_net(p_vw->umad, p_mad_addr->dest_lid, > + p_mad_addr->addr_type.gsi.remote_qp, > + p_mad_addr->addr_type.gsi.service_level, > + IB_QP1_WELL_KNOWN_Q_KEY); > + umad_set_grh(p_vw->umad, 0); /* FIXME: GRH support */ > + umad_set_pkey(p_vw->umad, p_mad_addr->addr_type.gsi.pkey); > } > > +Resp: > if (resp_expected) > put_madw(p_vend, p_madw, &p_mad->trans_id); > >
_______________________________________________ openib-general mailing list [email protected] http://openib.org/mailman/listinfo/openib-general To unsubscribe, please visit http://openib.org/mailman/listinfo/openib-general
