From: ftillier Date: Tue, 28 Feb 2006 19:24:36 +0000 (+0000) Subject: [IPoIB] Fix NDIS WHQL 2c_MediaCheck test failures. X-Git-Url: https://openfabrics.org/gitweb/?a=commitdiff_plain;h=56320622760a0899a7b853ba3f48872795d21094;p=~shefty%2Frdma-win.git [IPoIB] Fix NDIS WHQL 2c_MediaCheck test failures. git-svn-id: svn://openib.tc.cornell.edu/gen1@225 ad392aa1-c5ef-ae45-8dd8-e69d62a5ef86 --- diff --git a/trunk/ulp/ipoib/kernel/ipoib_endpoint.c b/trunk/ulp/ipoib/kernel/ipoib_endpoint.c index b6650993..3d0a43fd 100644 --- a/trunk/ulp/ipoib/kernel/ipoib_endpoint.c +++ b/trunk/ulp/ipoib/kernel/ipoib_endpoint.c @@ -386,20 +386,25 @@ __path_query_cb( av_attr.sl = ib_path_rec_sl( p_path ); av_attr.dlid = p_path->dlid; - if( p_path->dgid.unicast.prefix != IB_DEFAULT_SUBNET_PREFIX ) - { - flow_lbl = ib_path_rec_flow_lbl( p_path ); - /* Not on the same subnet, need GRH. */ - av_attr.grh_valid = TRUE; - av_attr.grh.ver_class_flow = ib_grh_set_ver_class_flow( - 6, p_path->tclass, flow_lbl ); - av_attr.grh.resv1 = 0; - av_attr.grh.resv2 = 0; - av_attr.grh.hop_limit = ib_path_rec_hop_limit( p_path ); - av_attr.grh.src_gid = p_path->sgid; - av_attr.grh.dest_gid = p_path->dgid; - } - else if( !p_endpt->dlid ) + /* + * We always send the GRH so that we preferably lookup endpoints + * by GID rather than by LID. This allows certain WHQL tests + * such as the 2c_MediaCheck test to succeed since they don't use + * IP. This allows endpoints to be created on the fly for requests + * for which there is no match, something that doesn't work when + * using LIDs only. + */ + flow_lbl = ib_path_rec_flow_lbl( p_path ); + av_attr.grh_valid = TRUE; + av_attr.grh.ver_class_flow = ib_grh_set_ver_class_flow( + 6, p_path->tclass, flow_lbl ); + av_attr.grh.resv1 = 0; + av_attr.grh.resv2 = 0; + av_attr.grh.hop_limit = ib_path_rec_hop_limit( p_path ); + av_attr.grh.src_gid = p_path->sgid; + av_attr.grh.dest_gid = p_path->dgid; + + if( !p_endpt->dlid ) { /* This is a subnet local endpoint that does not have its LID set. */ p_endpt->dlid = p_path->dlid; diff --git a/trunk/ulp/ipoib/kernel/ipoib_port.c b/trunk/ulp/ipoib/kernel/ipoib_port.c index 11743a9f..5a9955af 100644 --- a/trunk/ulp/ipoib/kernel/ipoib_port.c +++ b/trunk/ulp/ipoib/kernel/ipoib_port.c @@ -1700,16 +1700,30 @@ __recv_get_endpts( CL_ASSERT( *pp_dst ); } - IPOIB_TRACE( (IPOIB_DBG_RECV | IPOIB_DBG_INFO), - ("Recv:\n" - "\tsrc MAC: %02X-%02X-%02X-%02X-%02X-%02X\n" - "\tdst MAC: %02X-%02X-%02X-%02X-%02X-%02X\n", - (*pp_src )->mac.addr[0], (*pp_src )->mac.addr[1], - (*pp_src )->mac.addr[2], (*pp_src )->mac.addr[3], - (*pp_src )->mac.addr[4], (*pp_src )->mac.addr[5], - (*pp_dst )->mac.addr[0], (*pp_dst )->mac.addr[1], - (*pp_dst )->mac.addr[2], (*pp_dst )->mac.addr[3], - (*pp_dst )->mac.addr[4], (*pp_dst )->mac.addr[5]) ); + if( *pp_src && (*pp_src)->qpn != p_wc->recv.ud.remote_qp ) + { + /* Update the QPN for the endpoint. */ + IPOIB_TRACE( (IPOIB_DBG_RECV | IPOIB_DBG_WARN), + ("Updating QPN for MAC: %02X-%02X-%02X-%02X-%02X-%02X\n", + (*pp_src )->mac.addr[0], (*pp_src )->mac.addr[1], + (*pp_src )->mac.addr[2], (*pp_src )->mac.addr[3], + (*pp_src )->mac.addr[4], (*pp_src )->mac.addr[5]) ); + (*pp_src)->qpn = p_wc->recv.ud.remote_qp; + } + + if( *pp_src && *pp_dst ) + { + IPOIB_TRACE( (IPOIB_DBG_RECV | IPOIB_DBG_INFO), + ("Recv:\n" + "\tsrc MAC: %02X-%02X-%02X-%02X-%02X-%02X\n" + "\tdst MAC: %02X-%02X-%02X-%02X-%02X-%02X\n", + (*pp_src )->mac.addr[0], (*pp_src )->mac.addr[1], + (*pp_src )->mac.addr[2], (*pp_src )->mac.addr[3], + (*pp_src )->mac.addr[4], (*pp_src )->mac.addr[5], + (*pp_dst )->mac.addr[0], (*pp_dst )->mac.addr[1], + (*pp_dst )->mac.addr[2], (*pp_dst )->mac.addr[3], + (*pp_dst )->mac.addr[4], (*pp_dst )->mac.addr[5]) ); + } IPOIB_EXIT( IPOIB_DBG_RECV ); }