________________________________ From: Tzachi Dar [mailto:[email protected]] Sent: Thursday, October 07, 2010 8:58 AM To: Smith, Stan; [email protected] Subject: RE: [ofw] [Patch][IPoIB_NIDS6_CM] Adding shutter_shut for Adapter Reset flow
I'm fine with the ipoib forwarding checkin. (if no one else has objection). OK, will make it part of winOFED 2.3 RC4; meaning I will go ahead and commit the patch to winOFED SVN. As for the shutter checkin, we have been running with it for a few days, but I don't know if shutdown is really tested. Will include this patch in 2.3 RC4 as I have not witnessed any shutdown problems so far in pre-RC4 testing. I'll hold back on committing the patch until we have more shutdown testing on both sides of the pond. thanks, stan. Thanks Tzachi From: Smith, Stan [mailto:[email protected]] Sent: Thursday, October 07, 2010 5:50 PM To: Tzachi Dar; [email protected] Subject: RE: [ofw] [Patch][IPoIB_NIDS6_CM] Adding shutter_shut for Adapter Reset flow Hello, If shutter_shut() is called twice an ASSERT() in shutter.h::shutter_shut() will fire. I do not see the ASSERT() fire so we are OK; although code inspection looked as if shutter_shut() 'could' be called twice: 1) ex_shutdown path - power down case 2) PNP port down path What are your plans for SVN committing this patch and the patch for fixing forwarding of ipoib ? ________________________________ From: [email protected] [mailto:[email protected]] On Behalf Of Tzachi Dar Sent: Thursday, October 07, 2010 3:22 AM To: Alex Naslednikov; [email protected] Subject: Re: [ofw] [Patch][IPoIB_NIDS6_CM] Adding shutter_shut for Adapter Reset flow Hi Stan, Shuter_shut should not be called twice. In the case that it will than it will probably stay shut "for ever". The real question is whether it can be called twice. I believe that there is an assumption in the code that once reset is called shut down cannot be called, so the shutter will not be called twice. Thanks Tzachi From: [email protected] [mailto:[email protected]] On Behalf Of Alex Naslednikov Sent: Wednesday, October 06, 2010 1:13 PM To: [email protected] Subject: [ofw] [Patch][IPoIB_NIDS6_CM] Adding shutter_shut for Adapter Reset flow The patch below prevents race with BSOD when NDIS call receive callback of ipoib while some ipoib global objects are under destruction (like p_adapter ->p_port). It was tested by night regression run on IPoIB driver --- Adding shutter_shut for Adapter Reset flow Signed-off by: Alexander Naslednikov (xalex at mellanox.co.il) Index: kernel/ipoib_adapter.cpp =================================================================== --- kernel/ipoib_adapter.cpp (revision 2938) +++ kernel/ipoib_adapter.cpp (working copy) @@ -988,10 +988,13 @@ p_adapter->reset = TRUE; if( p_adapter->h_pnp ) - { + { + h_pnp = p_adapter->h_pnp; p_adapter->h_pnp = NULL; status = p_adapter->p_ifc->dereg_pnp( h_pnp, __ipoib_pnp_dereg ); + // Wait until NDIS will return all indicated NBLs that were received + shutter_shut( &p_adapter->recv_shutter ); if( status == IB_SUCCESS ) status = IB_NOT_DONE; } Index: kernel/ipoib_port.cpp =================================================================== --- kernel/ipoib_port.cpp (revision 2946) +++ kernel/ipoib_port.cpp (working copy) @@ -830,11 +830,15 @@ IPOIB_PRINT( TRACE_LEVEL_ERROR, IPOIB_DBG_OBJ, ("ref type %d ref_cnt %d\n", ref_init, p_port->obj.ref_cnt) ); #endif - // The port is started as paused and NDIS calls latter to ipoib_restart. We - // shut the recv_shuter for now and alive it on ipoib_restart. We did - // it in this way since MpInitializeInternal also calls in reset and than - // we need to set the rec ref count to 1 //TODO !!!!!!!!!!1 - // + /* The steps of the initialization are as depicted below: + I. adapter_init() calls shutter_init(), the shutter counter is set to 0 + II. ipoib_pnp_cb() calls to ipoib_port_init() that calls to __port_init() that SHOULD set shutter counter to -MAX_OPERATIONS + That is, the code below should call to shutter_shut() + III.NDIS calls to ipoib_restart() that calls to shutter_alive. Now, shutter_counter is again 0. + IV. NDIS call to ipoib_pause() that sets the adapter to pause state, calls to shutter_shut. + Now, the counter is again equals to -MAX_OPERATIONS + V. NDIS calls to ipoib_restart that calls to shutter_alive. Shutter counter is 0 and we can start working + */ if ( p_adapter->ipoib_state == IPOIB_INIT) { IPOIB_PRINT( TRACE_LEVEL_INFORMATION, IPOIB_DBG_RECV, Alexander (XaleX) Naslednikov SW Networking Team Mellanox Technologies
_______________________________________________ ofw mailing list [email protected] http://lists.openfabrics.org/cgi-bin/mailman/listinfo/ofw
