--- core/bus/kernel/bus_port_mgr.c	Tue Jun 07 13:44:20 2011
+++ core/bus/kernel/bus_port_mgr.c	Tue Jun 07 13:39:10 2011
@@ -75,6 +75,7 @@
 
 
 extern pkey_array_t  g_pkeys;
+static pnp_port_active;
 
 /*
  * Function prototypes.
@@ -103,6 +104,9 @@
 port_mgr_port_remove(
 	IN				ib_pnp_port_rec_t*			p_pnp_rec );
 
+void
+ioc_pnp_request_ioc_rescan(void);
+
 static NTSTATUS
 port_start(
 	IN				DEVICE_OBJECT* const		p_dev_obj,
@@ -501,11 +505,17 @@
 		break;
 
 	case IB_PNP_PORT_REMOVE:
+		if (pnp_port_active > 0)
+			pnp_port_active--;
 		port_mgr_port_remove( (ib_pnp_port_rec_t*)p_pnp_rec );
 		break;
 
+	case IB_PNP_PORT_ACTIVE:
+		pnp_port_active++;
+		break;
+
 	default:
-		XBUS_PRINT( BUS_DBG_PNP, ("Unhandled PNP Event %s\n",
+		BUS_PRINT( BUS_DBG_PNP, ("Ignored PNP Event %s\n",
 					ib_get_pnp_event_str(p_pnp_rec->pnp_event) ));
 		break;
 	}
@@ -567,6 +577,15 @@
 							p_bfi->whoami, ca_guid, p_port_mgr) );
 	if (!p_port_mgr)
 		return STATUS_NO_SUCH_DEVICE;
+
+	if ( g_ioc_poll_interval == 1 && pnp_port_active
+		&& p_bfi->p_bus_ext->cl_ext.vfptr_pnp_po->identity
+		&& strcmp(p_bfi->p_bus_ext->cl_ext.vfptr_pnp_po->identity, "IB Bus") == 0 )
+	{
+		BUS_PRINT(BUS_DBG_PNP, ("***** device '%s' requesting IOC rescan\n",
+				p_bfi->p_bus_ext->cl_ext.vfptr_pnp_po->identity) );
+		ioc_pnp_request_ioc_rescan();
+	}
 
 	cl_mutex_acquire( &p_port_mgr->pdo_mutex );
 	status = bus_get_relations( &p_port_mgr->port_list, ca_guid, p_irp );
