[ofw] [Patch][IPoIB_NIDS6_CM] Adding shutter_shut for Adapter Reset flow
Smith, Stan
stan.smith at intel.com
Thu Oct 7 09:06:45 PDT 2010
________________________________
From: Tzachi Dar [mailto:tzachid at mellanox.co.il]
Sent: Thursday, October 07, 2010 8:58 AM
To: Smith, Stan; ofw at lists.openfabrics.org
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:stan.smith at intel.com]
Sent: Thursday, October 07, 2010 5:50 PM
To: Tzachi Dar; ofw at lists.openfabrics.org
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: ofw-bounces at lists.openfabrics.org [mailto:ofw-bounces at lists.openfabrics.org] On Behalf Of Tzachi Dar
Sent: Thursday, October 07, 2010 3:22 AM
To: Alex Naslednikov; ofw at lists.openfabrics.org
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: ofw-bounces at lists.openfabrics.org [mailto:ofw-bounces at lists.openfabrics.org] On Behalf Of Alex Naslednikov
Sent: Wednesday, October 06, 2010 1:13 PM
To: ofw at lists.openfabrics.org
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
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.openfabrics.org/pipermail/ofw/attachments/20101007/2ffb572b/attachment.html>
More information about the ofw
mailing list