[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