Sure. Looks good to me Eitan Zahavi Senior Engineering Director, Software Architect Mellanox Technologies LTD Tel:+972-4-9097208 Fax:+972-4-9593245 P.O. Box 586 Yokneam 20692 ISRAEL
> -----Original Message----- > From: Hal Rosenstock [mailto:[EMAIL PROTECTED] > Sent: Tuesday, June 13, 2006 7:42 PM > To: [email protected] > Cc: Eitan Zahavi > Subject: [PATCH] OpenSM/SA: Properly handle non base LID requests to someSA > records > > OpenSM/SA: Properly handle non base LID requests to some SA records > > In osm_sa_node_record.c and osm_sa_portinfo_record.c, properly handle > non base LID requests per C15-0.1.11: Query responses shall contain a > port's base LID in any LID component of a RID. So when LMC is non 0, > the only records that appear are those with the base LID and not with > any masked LIDs. Furthermore, if a query comes in on a non base LID, the > LID in the RID returned is only with the base LID. > > Also, fixed some endian issues in osm_log messages. > > Note: Similar patch for other affected SA records will follow. > > Signed-off-by: Hal Rosenstock <[EMAIL PROTECTED]> > > Index: opensm/osm_sa_node_record.c > =================================================================== > --- opensm/osm_sa_node_record.c (revision 7961) > +++ opensm/osm_sa_node_record.c (working copy) > @@ -200,12 +200,11 @@ __osm_nr_rcv_create_nr( > uint8_t port_num; > uint8_t num_ports; > uint16_t match_lid_ho; > - uint16_t lid_ho; > + ib_net16_t base_lid; > ib_net16_t base_lid_ho; > ib_net16_t max_lid_ho; > uint8_t lmc; > ib_net64_t port_guid; > - ib_api_status_t status; > > OSM_LOG_ENTER( p_rcv->p_log, __osm_nr_rcv_create_nr ); > > @@ -245,7 +244,8 @@ __osm_nr_rcv_create_nr( > if( match_port_guid && ( port_guid != match_port_guid ) ) > continue; > > - base_lid_ho = cl_ntoh16( osm_physp_get_base_lid( p_physp ) ); > + base_lid = osm_physp_get_base_lid( p_physp ); > + base_lid_ho = cl_ntoh16( base_lid ); > lmc = osm_physp_get_lmc( p_physp ); > max_lid_ho = (uint16_t)( base_lid_ho + (1 << lmc) - 1 ); > match_lid_ho = cl_ntoh16( match_lid ); > @@ -260,29 +260,18 @@ __osm_nr_rcv_create_nr( > osm_log( p_rcv->p_log, OSM_LOG_DEBUG, > "__osm_nr_rcv_create_nr: " > "Comparing LID: 0x%X <= 0x%X <= 0x%X\n", > - cl_ntoh16( base_lid_ho ), > - cl_ntoh16( match_lid_ho ), > - cl_ntoh16( max_lid_ho ) > + base_lid_ho, match_lid_ho, max_lid_ho > ); > } > > if( (match_lid_ho <= max_lid_ho) && (match_lid_ho >= base_lid_ho) ) > { > - __osm_nr_rcv_new_nr( p_rcv, p_node, p_list, port_guid, match_lid ); > + __osm_nr_rcv_new_nr( p_rcv, p_node, p_list, port_guid, base_lid ); > } > } > else > { > - /* > - For every lid value create a Node Record. > - */ > - for( lid_ho = base_lid_ho; lid_ho <= max_lid_ho; lid_ho++ ) > - { > - status = __osm_nr_rcv_new_nr( p_rcv, p_node, p_list, > - port_guid, cl_hton16( lid_ho ) ); > - if( status != IB_SUCCESS ) > - break; > - } > + __osm_nr_rcv_new_nr( p_rcv, p_node, p_list, port_guid, base_lid ); > } > } > > Index: opensm/osm_sa_portinfo_record.c > =================================================================== > --- opensm/osm_sa_portinfo_record.c (revision 7961) > +++ opensm/osm_sa_portinfo_record.c (working copy) > @@ -194,9 +194,9 @@ __osm_sa_pir_create( > IN osm_pir_search_ctxt_t* const p_ctxt ) > { > uint8_t lmc; > - uint16_t lid_ho; > uint16_t max_lid_ho; > uint16_t base_lid_ho; > + uint16_t match_lid_ho; > > OSM_LOG_ENTER( p_rcv->p_log, __osm_sa_pir_create ); > > @@ -218,17 +218,28 @@ __osm_sa_pir_create( > > if( p_ctxt->comp_mask & IB_PIR_COMPMASK_LID ) > { > - __osm_pir_rcv_new_pir( p_rcv, p_physp, p_ctxt->p_list, > - p_ctxt->p_rcvd_rec->lid ); > - } > - else > - { > - for( lid_ho = base_lid_ho; lid_ho <= max_lid_ho; lid_ho++ ) > + match_lid_ho = cl_ntoh16( p_ctxt->p_rcvd_rec->lid ); > + > + /* > + We validate that the lid belongs to this node. > + */ > + if( osm_log_is_active( p_rcv->p_log, OSM_LOG_DEBUG ) ) > { > - __osm_pir_rcv_new_pir( p_rcv, p_physp, p_ctxt->p_list, > - cl_hton16( lid_ho ) ); > + osm_log( p_rcv->p_log, OSM_LOG_DEBUG, > + "__osm_sa_pir_create: " > + "Comparing LID: 0x%X <= 0x%X <= 0x%X\n", > + base_lid_ho, match_lid_ho, max_lid_ho > + ); > } > + > + if ( match_lid_ho < base_lid_ho || match_lid_ho > max_lid_ho ) > + goto Exit; > } > + > + __osm_pir_rcv_new_pir( p_rcv, p_physp, p_ctxt->p_list, > + cl_hton16( base_lid_ho ) ); > + > + Exit: > OSM_LOG_EXIT( p_rcv->p_log ); > } > > _______________________________________________ openib-general mailing list [email protected] http://openib.org/mailman/listinfo/openib-general To unsubscribe, please visit http://openib.org/mailman/listinfo/openib-general
