]> git.openfabrics.org - ~shefty/rdma-win.git/commitdiff
[IPoIB] Fix for "Avoid the SM " patch
authorleonidk <leonidk@ad392aa1-c5ef-ae45-8dd8-e69d62a5ef86>
Thu, 25 Sep 2008 08:22:11 +0000 (08:22 +0000)
committerleonidk <leonidk@ad392aa1-c5ef-ae45-8dd8-e69d62a5ef86>
Thu, 25 Sep 2008 08:22:11 +0000 (08:22 +0000)
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

branches/WOF2-0/trunk/ulp/ipoib/kernel/ipoib_port.c

index 92c2fcea15a02d175b986206ca1f64fd845df6d8..ae5ddccd36a52491a98d7767912140104667044a 100644 (file)
@@ -2413,6 +2413,11 @@ __recv_arp(
                        __endpt_mgr_remove( p_port, *pp_src );\r
                        *pp_src = NULL;\r
                }\r
+               else if ( ! ((*pp_src)->dlid)) {\r
+                       /* Out of date!  Destroy the endpoint and replace it. */\r
+                       __endpt_mgr_remove( p_port, *pp_src );\r
+                       *pp_src = NULL;\r
+               }\r
                else if( ipoib_is_voltaire_router_gid( &(*pp_src)->dgid ) )\r
                {\r
                        if( (*pp_src)->qpn !=\r
@@ -4531,6 +4536,21 @@ __endpt_mgr_reset_all(
        while( p_port->endpt_rdr )\r
                ;\r
 \r
+#if 0\r
+                       __endpt_mgr_remove_all(p_port);\r
+#else\r
+       \r
+               NdisMIndicateStatus( p_port->p_adapter->h_adapter,\r
+                                               NDIS_STATUS_MEDIA_DISCONNECT, NULL, 0 );\r
+               NdisMIndicateStatusComplete( p_port->p_adapter->h_adapter );\r
+               \r
+               NdisMIndicateStatus( p_port->p_adapter->h_adapter,\r
+                                               NDIS_STATUS_MEDIA_CONNECT, NULL, 0 );\r
+               NdisMIndicateStatusComplete( p_port->p_adapter->h_adapter );\r
+               \r
+                               //      IPOIB_PRINT( TRACE_LEVEL_INFORMATION, IPOIB_DBG_INIT,\r
+                                       //      ("Link DOWN!\n") );\r
+\r
        if( p_port->p_local_endpt )\r
        {\r
                cl_qmap_remove_item( &p_port->endpt_mgr.mac_endpts,\r
@@ -4577,11 +4597,13 @@ __endpt_mgr_reset_all(
                {\r
                        cl_qmap_remove_item( &p_port->endpt_mgr.lid_endpts,\r
                                &p_endpt->lid_item );\r
+                       IPOIB_PRINT( TRACE_LEVEL_INFORMATION, IPOIB_DBG_ENDPT,\r
+                               ("<__endptr_mgr_reset_all: setting p_endpt->dlid to 0\n"));\r
                        p_endpt->dlid = 0;\r
                }\r
                \r
        }\r
-\r
+#endif\r
        cl_obj_unlock( &p_port->obj );\r
 \r
 \r
@@ -5078,7 +5100,7 @@ ipoib_port_remove_endpt(
                cl_obj_destroy( &p_endpt->obj );\r
 #if DBG\r
                cl_atomic_dec( &p_port->ref[ref_endpt_track] );\r
-               IPOIB_PRINT( TRACE_LEVEL_INFORMATION, IPOIB_DBG_OBJ,\r
+               IPOIB_PRINT( TRACE_LEVEL_INFORMATION, IPOIB_DBG_ENDPT,\r
                        ("ref type %d ref_cnt %d\n", ref_endpt_track, p_port->obj.ref_cnt) );\r
 #endif\r
 \r
@@ -5236,6 +5258,8 @@ __endpt_mgr_add_local(
        cl_memclr( &av_attr, sizeof(ib_av_attr_t) );\r
        av_attr.port_num = p_port->port_num;\r
        av_attr.sl = 0;\r
+       IPOIB_PRINT_EXIT( TRACE_LEVEL_ERROR, IPOIB_DBG_ENDPT,\r
+               ("<__endpt_mgr_add_local>:  av_attr.dlid = p_port_info->base_lid = %d\n",p_port_info->base_lid));\r
        av_attr.dlid = p_port_info->base_lid;\r
        av_attr.static_rate = ib_port_info_compute_rate( p_port_info );\r
        av_attr.path_bits = 0;\r