\r
hca_deref:\r
deref_al_obj( &p_ext->h_ca->obj );\r
+ \r
+ // Setting h_ca to be NULL forces IPoIB to start only after re-acquiring new CA object\r
+ // The latter happens in __port_was_hibernated or port_mgr_port_add functions \r
+ // after arriving IB_PNP_PORT_ADD event from IBAL\r
+ p_ext->h_ca = NULL;\r
+\r
cl_mutex_release( &p_port_mgr->pdo_mutex );\r
\r
BUS_EXIT( BUS_DBG_PNP );\r
CL_ASSERT( KeGetCurrentIrql() < DISPATCH_LEVEL );\r
\r
p_ext = p_dev_obj->DeviceExtension;\r
- if (p_ext->pdo.b_hibernating) {\r
- // Can't continue within hibernation stage\r
- return STATUS_UNSUCCESSFUL;\r
- }\r
- BUS_TRACE( BUS_DBG_PNP, ("Query i/f for %s: PDO %p (=%p),ext %p, present %d, missing %d .\n",\r
+\r
+ BUS_TRACE( BUS_DBG_PNP, ("Query i/f for %s: PDO %p (=%p),ext %p, present %d, missing %d, hibernated %d .\n",\r
p_ext->pdo.cl_ext.vfptr_pnp_po->identity, p_ext->pdo.cl_ext.p_self_do, \r
- p_dev_obj, p_ext, p_ext->pdo.b_present, p_ext->pdo.b_reported_missing ) );\r
+ p_dev_obj, p_ext, p_ext->pdo.b_present, p_ext->pdo.b_reported_missing, p_ext->pdo.b_hibernating ) );\r
\r
/* Get the interface. */\r
status = cl_fwd_query_ifc(\r