[ofw][patches][IBAL] work around for reference count leakage bugs

Smith, Stan stan.smith at intel.com
Mon Jun 1 09:06:16 PDT 2009


Hello Leo,
  At what svn revision did you 1st start seeing the refcnt leakage?

Specifically @ svn.2221 (mthca.sys) I do not see refcnt leakage ASSERTS/problems in HCA disable or system shutdown?

Any ideas as to what has changed?

thanks,

stan.

________________________________
From: ofw-bounces at lists.openfabrics.org [mailto:ofw-bounces at lists.openfabrics.org] On Behalf Of Leonid Keller
Sent: Monday, June 01, 2009 8:41 AM
To: ofw at lists.openfabrics.org
Subject: [ofw][patches][IBAL] work around for reference count leakage bugs

IBAL still has bugs, which cause reference count leakage, which stops the cascading destroying resources of IBAL.
It causes  in turn a freeze of IBBUS on HCA disable or system power down.
On checked builds IBAL forces destroying of the objects after some timeout.
On free version it waits endlessly.
This patch makes the behavior of free version to be the same in checked version while sending a message to System Event Log.



Index: V:/svn/winib/trunk/core/al/al_common.c
===================================================================
--- V:/svn/winib/trunk/core/al/al_common.c (revision 4403)
+++ V:/svn/winib/trunk/core/al/al_common.c (revision 4404)
@@ -35,6 +35,7 @@
 #include "al_ci_ca.h"
 #include "al_common.h"
 #include "al_debug.h"
+#include "al_ca.h"

 #if defined(EVENT_TRACING)
 #ifdef offsetof
@@ -46,6 +47,7 @@
 #include "al_mgr.h"
 #include <complib/cl_math.h>
 #include "ib_common.h"
+#include "bus_ev_log.h"



@@ -498,7 +500,6 @@

  if( deref_al_obj( p_obj ) )
  {
- #ifdef _DEBUG_
   uint32_t  wait_us;
   /*
    * Wait for all other references to go away.  We wait as long as the
@@ -529,13 +530,11 @@
      &p_obj->event, AL_MAX_TIMEOUT_US, AL_WAIT_ALERTABLE );
    } while( cl_status == CL_NOT_DONE );
   }
- #else
-  do
-  {
-   cl_status = cl_event_wait_on(
-    &p_obj->event, EVENT_NO_TIMEOUT, AL_WAIT_ALERTABLE );
-  } while( cl_status == CL_NOT_DONE );
- #endif
+  if ( p_obj->p_ci_ca && p_obj->p_ci_ca )
+   CL_PRINT_TO_EVENT_LOG( p_obj->p_ci_ca->h_ca->p_fdo, EVENT_IBBUS_ANY_ERROR,
+    ("IBAL stuck: AL object %s, ref_cnt: %d. Forcing object destruction.\n",
+    ib_get_obj_type( p_obj ), p_obj->ref_cnt));
+
   CL_ASSERT( cl_status == CL_SUCCESS );
   if( cl_status != CL_SUCCESS )
   {
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.openfabrics.org/pipermail/ofw/attachments/20090601/134e0f70/attachment.html>


More information about the ofw mailing list