[ofw][patch][[ibbus]

Leonid Keller leonid at mellanox.co.il
Tue Mar 17 09:09:39 PDT 2009


OK


________________________________

	From: Smith, Stan [mailto:stan.smith at intel.com] 
	Sent: Tuesday, March 17, 2009 2:08 AM
	To: Leonid Keller; James Yang
	Cc: ofw at lists.openfabrics.org
	Subject: RE: [ofw][patch][[ibbus]
	
	
	Leo,
	  Please hold off on this patch until I finished the ibbus CA
reference per fabric PDO experiment you asked me to perform.
	James has stated this patch is unnecessary if we go down the CA
ref / fabric PDO path.
	Should have testing wrapped up by EOD Tuesday.
	 
	thanks,
	 
	stan.

________________________________

	From: ofw-bounces at lists.openfabrics.org
[mailto:ofw-bounces at lists.openfabrics.org] On Behalf Of Leonid Keller
	Sent: Monday, March 16, 2009 9:22 AM
	To: James Yang
	Cc: ofw at lists.openfabrics.org
	Subject: [ofw][patch][[ibbus]
	
	
	[IBBUS] Fix for hibernate in case of several child devices of
IBBUS

	Signed-off-by: James Yang  
	 
	Index: core/bus/kernel/bus_port_mgr.c
	
===================================================================
	--- core/bus/kernel/bus_port_mgr.c (revision 2032)
	+++ core/bus/kernel/bus_port_mgr.c (working copy)
	@@ -420,13 +420,12 @@
	    deref_al_obj( &p_ext->h_ca->obj );
	   }
	 
	-  BUS_TRACE( BUS_DBG_PNP, ("%s Deleted device %s: PDO %p, ext
%p\n",
	-     p_bfi->whoami, p_ext->cl_ext.vfptr_pnp_po->identity,
	-     p_ext->cl_ext.p_self_do, p_ext ) );
	+   BUS_TRACE( BUS_DBG_PNP, ("%s Deleted device %s: PDO %p, ext
%p\n",
	+      p_bfi->whoami, p_ext->cl_ext.vfptr_pnp_po->identity,
	+      p_ext->cl_ext.p_self_do, p_ext ) );
	+   IoDeleteDevice( p_ext->cl_ext.p_self_do );
	+  }
	 
	-  IoDeleteDevice( p_ext->cl_ext.p_self_do );
	- }
	-
	  cl_mutex_destroy( &p_port_mgr->pdo_mutex );
	  cl_obj_deinit( p_obj );
	  cl_free( p_port_mgr );
	@@ -585,7 +584,7 @@
	  NTSTATUS  status;
	  cl_list_item_t *p_list_item;
	  bus_port_ext_t *p_port_ext;
	- bus_pdo_ext_t *p_pdo_ext = NULL;
	+ bus_pdo_ext_t *p_shadow_pdo_ext, *p_pdo_ext = NULL;
	  size_t   n_devs = 0;
	  port_mgr_t  *p_port_mgr = p_bfi->p_port_mgr;
	  cl_qlist_t  *p_pdo_list = &p_port_mgr->port_list;
	@@ -611,14 +610,14 @@
	   p_pdo_ext = PARENT_STRUCT( p_list_item, bus_pdo_ext_t,
list_item );
	   p_port_ext = (bus_port_ext_t*)p_pdo_ext;
	  
	-  if( p_pdo_ext->b_present && p_pdo_ext->b_hibernating &&
	+  if( p_pdo_ext->b_present && p_pdo_ext->b_hibernating &&
p_pdo_ext->hca_acquired &&
	    (p_port_ext->port_guid.guid ==
p_pnp_rec->p_port_attr->port_guid) )
	   {
	    n_devs++;
	    break;
	   }
	 
	-  BUS_TRACE( BUS_DBG_PNP, ("%s Skipped PDO for %s: PDO %p, ext
%p, "
	+  BUS_TRACE( BUS_DBG_PNP, ("%s Skipped acquire hca on PDO for
%s: PDO %p, ext %p, "
	    "present %d, missing %d, hibernating %d, port_guid
%I64x.\n",
	    p_bfi->whoami,
	    p_pdo_ext->cl_ext.vfptr_pnp_po->identity,
	@@ -654,6 +653,31 @@
	     p_pdo_ext->cl_ext.p_self_do, 
	     p_pdo_ext, p_pdo_ext->b_present,
p_pdo_ext->b_reported_missing, 
	     p_pdo_ext->b_hibernating, p_port_ext->port_guid.guid ) );
	+
	+   for( p_list_item = cl_qlist_head( p_pdo_list );
	+    p_list_item != cl_qlist_end( p_pdo_list );
	+    p_list_item = cl_qlist_next( p_list_item ) )
	+   {
	+    p_shadow_pdo_ext = PARENT_STRUCT( p_list_item,
bus_pdo_ext_t, list_item );
	+    p_port_ext = (bus_port_ext_t*)p_shadow_pdo_ext;
	+
	+    if( p_shadow_pdo_ext->b_present &&
p_shadow_pdo_ext->b_hibernating &&
	+     (p_port_ext->port_guid.guid ==
p_pnp_rec->p_port_attr->port_guid) )
	+    {
	+     p_shadow_pdo_ext->b_hibernating = FALSE;
	+     p_shadow_pdo_ext->h_ca = p_pdo_ext->h_ca;
	+
	+
	+     BUS_TRACE( BUS_DBG_PNP, ("%s set shadow h_ca PDO for %s:
PDO %p, ext %p, "
	+            "present %d, missing %d, hibernating %d, port_guid
%I64x.\n",
	+            p_bfi->whoami,
	+            p_shadow_pdo_ext->cl_ext.vfptr_pnp_po->identity,
	+            p_shadow_pdo_ext->cl_ext.p_self_do, 
	+            p_shadow_pdo_ext, p_shadow_pdo_ext->b_present,
p_shadow_pdo_ext->b_reported_missing, 
	+            p_shadow_pdo_ext->b_hibernating,
p_port_ext->port_guid.guid  ) );
	+    }
	+   }
	+
	   }
	  }
	  else 
	@@ -1144,6 +1168,10 @@
	  port_mgr_t  *p_port_mgr;
	  bus_filter_t *p_bfi;
	  port_pnp_ctx_t *p_ctx = p_pnp_rec->pnp_rec.context;
	+ cl_list_item_t  *p_list_item;
	+ bus_port_ext_t  *p_port_ext;
	+ bus_pdo_ext_t  *p_pdo_ext;
	+ cl_qlist_t*      p_pdo_list;
	 
	  BUS_ENTER( BUS_DBG_PNP );
	 
	@@ -1210,6 +1238,23 @@
	  }
	 
	  p_ext->b_present = FALSE;
	+
	+ p_pdo_list = &p_port_mgr->port_list;
	+
	+ for( p_list_item = cl_qlist_head( p_pdo_list );
	+   p_list_item != cl_qlist_end( p_pdo_list );
	+   p_list_item = cl_qlist_next( p_list_item ) )
	+  {
	+  p_pdo_ext = PARENT_STRUCT( p_list_item, bus_pdo_ext_t,
list_item );
	+  p_port_ext =  (bus_port_ext_t*) p_pdo_ext;
	+
	+  if( (p_port_ext->port_guid.guid ==
((bus_port_ext_t*)p_ext)->port_guid.guid) )
	+   {
	+   p_pdo_ext->b_present = FALSE;
	+  }   
	+ }
	+
	+
	  BUS_TRACE( BUS_DBG_PNP,
	   ("Mark removing %s: PDO %p, ext %p, present %d, missing %d
.\n",
	   p_ext->cl_ext.vfptr_pnp_po->identity,
p_ext->cl_ext.p_self_do, p_ext,
	@@ -1235,6 +1280,21 @@
	  // after arriving IB_PNP_PORT_ADD event from IBAL
	  p_ext->h_ca = NULL;
	 
	+ p_pdo_list = &p_port_mgr->port_list;
	+
	+ for( p_list_item = cl_qlist_head( p_pdo_list );
	+   p_list_item != cl_qlist_end( p_pdo_list );
	+   p_list_item = cl_qlist_next( p_list_item ) )
	+  {
	+  p_pdo_ext = PARENT_STRUCT( p_list_item, bus_pdo_ext_t,
list_item );
	+  p_port_ext =  (bus_port_ext_t*) p_pdo_ext;
	+
	+  if( p_port_ext->port_guid.guid ==
((bus_port_ext_t*)p_ext)->port_guid.guid )
	+  {
	+   p_pdo_ext->h_ca = NULL;
	+  }   
	+ }
	+
	  cl_mutex_release( &p_port_mgr->pdo_mutex );
	 
	  BUS_EXIT( BUS_DBG_PNP );
	

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.openfabrics.org/pipermail/ofw/attachments/20090317/7da30886/attachment.html>


More information about the ofw mailing list