From: ftillier Date: Fri, 16 Sep 2005 18:52:31 +0000 (+0000) Subject: Add support for SM, LID, and GID change by flagging adapter as hung. X-Git-Url: https://openfabrics.org/gitweb/?a=commitdiff_plain;h=3bb578762ae8d08b1805696ad1a12453095ed27c;p=~shefty%2Frdma-win.git Add support for SM, LID, and GID change by flagging adapter as hung. Tweaks to debug output sumbitted by Yossi Leybovich (sleybo@mellanox.co.il) git-svn-id: svn://openib.tc.cornell.edu/gen1@69 ad392aa1-c5ef-ae45-8dd8-e69d62a5ef86 --- diff --git a/trunk/ulp/ipoib/kernel/ipoib_adapter.c b/trunk/ulp/ipoib/kernel/ipoib_adapter.c index d3180654..56e048fe 100644 --- a/trunk/ulp/ipoib/kernel/ipoib_adapter.c +++ b/trunk/ulp/ipoib/kernel/ipoib_adapter.c @@ -500,6 +500,9 @@ __ipoib_pnp_cb( return IB_NOT_DONE; } + IPOIB_TRACE( IPOIB_DBG_INFO, + ("p_pnp_rec->pnp_event = 0x%x\n",p_pnp_rec->pnp_event)); + switch( p_pnp_rec->pnp_event ) { case IB_PNP_PORT_ADD: @@ -606,15 +609,16 @@ __ipoib_pnp_cb( status = IB_SUCCESS; break; + default: + IPOIB_TRACE( IPOIB_DBG_INFO, + ("IPOIB: Received unhandled PnP event 0x%x\n", + p_pnp_rec->pnp_event) ); + /* Fall through. */ case IB_PNP_PKEY_CHANGE: case IB_PNP_SM_CHANGE: case IB_PNP_GID_CHANGE: case IB_PNP_LID_CHANGE: - /* TODO: Refresh all multicast group memberships in case the SM changed. */ - IPOIB_TRACE( IPOIB_DBG_INFO, - ("IPOIB: Received unhandled PnP event %d\n", - p_pnp_rec->pnp_event) ); - default: + p_adapter->hung = TRUE; status = IB_SUCCESS; break; } diff --git a/trunk/ulp/ipoib/kernel/ipoib_driver.c b/trunk/ulp/ipoib/kernel/ipoib_driver.c index 38ec84e6..af855db6 100644 --- a/trunk/ulp/ipoib/kernel/ipoib_driver.c +++ b/trunk/ulp/ipoib/kernel/ipoib_driver.c @@ -2103,6 +2103,8 @@ ipoib_reg_addrs( cl_memcpy( &ib_service.svc_rec.service_data8[ATS_IPV4_OFFSET], p_addr_item->address.as_bytes, IPV4_ADDR_SIZE ); + /* Take a reference for each service request. */ + cl_obj_ref(&p_adapter->obj); ib_status = p_adapter->p_ifc->reg_svc( p_adapter->h_al, &ib_service, &p_addr_item->p_reg->h_reg_svc ); if( ib_status != IB_SUCCESS ) @@ -2134,6 +2136,7 @@ ipoib_reg_addrs( p_adapter->p_ifc->get_err_str( ib_status )) ); p_adapter->hung = TRUE; } + cl_obj_deref(&p_adapter->obj); cl_free( p_addr_item->p_reg ); p_addr_item->p_reg = NULL; } @@ -2223,6 +2226,7 @@ __ipoib_ats_reg_cb( } cl_obj_unlock( &p_reg->p_adapter->obj ); + cl_obj_deref(&p_reg->p_adapter->obj); IPOIB_EXIT( IPOIB_DBG_OID ); } diff --git a/trunk/ulp/ipoib/kernel/ipoib_endpoint.c b/trunk/ulp/ipoib/kernel/ipoib_endpoint.c index 5fe1c547..2c62c2af 100644 --- a/trunk/ulp/ipoib/kernel/ipoib_endpoint.c +++ b/trunk/ulp/ipoib/kernel/ipoib_endpoint.c @@ -196,7 +196,7 @@ __endpt_destroying( } cl_obj_unlock( p_obj ); - IPOIB_EXIT( IPOIB_DBG_INIT ); + IPOIB_EXIT( IPOIB_DBG_ENDPT ); } diff --git a/trunk/ulp/ipoib/kernel/ipoib_endpoint.h b/trunk/ulp/ipoib/kernel/ipoib_endpoint.h index a4de33cc..58a6eede 100644 --- a/trunk/ulp/ipoib/kernel/ipoib_endpoint.h +++ b/trunk/ulp/ipoib/kernel/ipoib_endpoint.h @@ -148,7 +148,7 @@ ipoib_endpt_deref( { IPOIB_ENTER( IPOIB_DBG_ENDPT ); cl_obj_deref( &p_endpt->obj ); - IPOIB_EXIT( IPOIB_DBG_INIT ); + IPOIB_EXIT( IPOIB_DBG_ENDPT ); }