From 3c3bc8819f4ddeb04e454502063223cb663d41a4 Mon Sep 17 00:00:00 2001 From: leonidk Date: Thu, 25 Sep 2008 08:22:11 +0000 Subject: [PATCH] [IPoIB] Fix for "Avoid the SM " patch This patch solves the "ping broken" problem, arising after restarting of OPENSM. Signed-off by: Alexander Naslednikov (xalex@mellanox.co.il) git-svn-id: svn://openib.tc.cornell.edu/gen1@1617 ad392aa1-c5ef-ae45-8dd8-e69d62a5ef86 --- .../trunk/ulp/ipoib/kernel/ipoib_port.c | 28 +++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) diff --git a/branches/WOF2-0/trunk/ulp/ipoib/kernel/ipoib_port.c b/branches/WOF2-0/trunk/ulp/ipoib/kernel/ipoib_port.c index 92c2fcea..ae5ddccd 100644 --- a/branches/WOF2-0/trunk/ulp/ipoib/kernel/ipoib_port.c +++ b/branches/WOF2-0/trunk/ulp/ipoib/kernel/ipoib_port.c @@ -2413,6 +2413,11 @@ __recv_arp( __endpt_mgr_remove( p_port, *pp_src ); *pp_src = NULL; } + else if ( ! ((*pp_src)->dlid)) { + /* Out of date! Destroy the endpoint and replace it. */ + __endpt_mgr_remove( p_port, *pp_src ); + *pp_src = NULL; + } else if( ipoib_is_voltaire_router_gid( &(*pp_src)->dgid ) ) { if( (*pp_src)->qpn != @@ -4531,6 +4536,21 @@ __endpt_mgr_reset_all( while( p_port->endpt_rdr ) ; +#if 0 + __endpt_mgr_remove_all(p_port); +#else + + NdisMIndicateStatus( p_port->p_adapter->h_adapter, + NDIS_STATUS_MEDIA_DISCONNECT, NULL, 0 ); + NdisMIndicateStatusComplete( p_port->p_adapter->h_adapter ); + + NdisMIndicateStatus( p_port->p_adapter->h_adapter, + NDIS_STATUS_MEDIA_CONNECT, NULL, 0 ); + NdisMIndicateStatusComplete( p_port->p_adapter->h_adapter ); + + // IPOIB_PRINT( TRACE_LEVEL_INFORMATION, IPOIB_DBG_INIT, + // ("Link DOWN!\n") ); + if( p_port->p_local_endpt ) { cl_qmap_remove_item( &p_port->endpt_mgr.mac_endpts, @@ -4577,11 +4597,13 @@ __endpt_mgr_reset_all( { cl_qmap_remove_item( &p_port->endpt_mgr.lid_endpts, &p_endpt->lid_item ); + IPOIB_PRINT( TRACE_LEVEL_INFORMATION, IPOIB_DBG_ENDPT, + ("<__endptr_mgr_reset_all: setting p_endpt->dlid to 0\n")); p_endpt->dlid = 0; } } - +#endif cl_obj_unlock( &p_port->obj ); @@ -5078,7 +5100,7 @@ ipoib_port_remove_endpt( cl_obj_destroy( &p_endpt->obj ); #if DBG cl_atomic_dec( &p_port->ref[ref_endpt_track] ); - IPOIB_PRINT( TRACE_LEVEL_INFORMATION, IPOIB_DBG_OBJ, + IPOIB_PRINT( TRACE_LEVEL_INFORMATION, IPOIB_DBG_ENDPT, ("ref type %d ref_cnt %d\n", ref_endpt_track, p_port->obj.ref_cnt) ); #endif @@ -5236,6 +5258,8 @@ __endpt_mgr_add_local( cl_memclr( &av_attr, sizeof(ib_av_attr_t) ); av_attr.port_num = p_port->port_num; av_attr.sl = 0; + IPOIB_PRINT_EXIT( TRACE_LEVEL_ERROR, IPOIB_DBG_ENDPT, + ("<__endpt_mgr_add_local>: av_attr.dlid = p_port_info->base_lid = %d\n",p_port_info->base_lid)); av_attr.dlid = p_port_info->base_lid; av_attr.static_rate = ib_port_info_compute_rate( p_port_info ); av_attr.path_bits = 0; -- 2.46.0