ib_api_status_t status;\r
cl_status_t cl_status;\r
uint8_t port_num;\r
- KLOCK_QUEUE_HANDLE hdl;\r
\r
IPOIB_ENTER( IPOIB_DBG_INIT );\r
\r
return IB_ERROR;\r
}\r
\r
- KeAcquireInStackQueuedSpinLock( &g_ipoib.lock, &hdl );\r
- cl_qlist_insert_tail( &g_ipoib.adapter_list, &p_adapter->entry );\r
- KeReleaseInStackQueuedSpinLock( &hdl );\r
-\r
status = adapter_init( p_adapter );\r
if( status != IB_SUCCESS )\r
{\r
p_adapter->h_pnp = NULL;\r
}\r
\r
- KeAcquireInStackQueuedSpinLock( &g_ipoib.lock, &hdl );\r
- ASSERT( cl_qlist_count( &g_ipoib.adapter_list ) );\r
- cl_qlist_remove_item( &g_ipoib.adapter_list, &p_adapter->entry );\r
- KeReleaseInStackQueuedSpinLock( &hdl );\r
+ if( p_adapter->packet_filter )\r
+ {\r
+ KeAcquireInStackQueuedSpinLock( &g_ipoib.lock, &hdl );\r
+ cl_obj_lock( &p_adapter->obj );\r
+\r
+ ASSERT( cl_qlist_count( &g_ipoib.adapter_list ) );\r
+ cl_qlist_remove_item( &g_ipoib.adapter_list, &p_adapter->entry );\r
+\r
+ p_adapter->packet_filter = 0;\r
+\r
+ cl_obj_unlock( &p_adapter->obj );\r
+ KeReleaseInStackQueuedSpinLock( &hdl );\r
+ }\r
\r
IPOIB_EXIT( IPOIB_DBG_INIT );\r
}\r
\r
ULONG buf_len;\r
uint8_t port_num;\r
+\r
+ KLOCK_QUEUE_HANDLE hdl;\r
\r
IPOIB_ENTER( IPOIB_DBG_OID );\r
\r
}\r
else\r
{\r
+ KeAcquireInStackQueuedSpinLock( &g_ipoib.lock, &hdl );\r
cl_obj_lock( &p_adapter->obj );\r
switch( p_adapter->state )\r
{\r
default:\r
if( !p_adapter->packet_filter && (*(uint32_t*)info_buf) )\r
{\r
+ cl_qlist_insert_tail(\r
+ &g_ipoib.adapter_list, &p_adapter->entry );\r
+\r
/*\r
* Filter was zero, now non-zero. Register IP addresses\r
* with SA.\r
* Filter was non-zero, now zero. Deregister IP addresses.\r
*/\r
ipoib_dereg_addrs( p_adapter );\r
+\r
+ ASSERT( cl_qlist_count( &g_ipoib.adapter_list ) );\r
+ cl_qlist_remove_item(\r
+ &g_ipoib.adapter_list, &p_adapter->entry );\r
}\r
\r
p_adapter->packet_filter = *(uint32_t*)info_buf;\r
}\r
cl_obj_unlock( &p_adapter->obj );\r
+ KeReleaseInStackQueuedSpinLock( &hdl );\r
}\r
break;\r
\r
ipoib_resume_oids(\r
IN ipoib_adapter_t* const p_adapter )\r
{\r
- ULONG info;\r
- NDIS_STATUS status;\r
- boolean_t pending_query, pending_set;\r
- pending_oid_t query_oid = {0};\r
- pending_oid_t set_oid = {0};\r
+ ULONG info;\r
+ NDIS_STATUS status;\r
+ boolean_t pending_query, pending_set;\r
+ pending_oid_t query_oid = {0};\r
+ pending_oid_t set_oid = {0};\r
+ KLOCK_QUEUE_HANDLE hdl;\r
\r
IPOIB_ENTER( IPOIB_DBG_INIT );\r
\r
case OID_GEN_CURRENT_PACKET_FILTER:\r
/* Validation already performed in the SetInformation path. */\r
\r
+ KeAcquireInStackQueuedSpinLock( &g_ipoib.lock, &hdl );\r
cl_obj_lock( &p_adapter->obj );\r
if( !p_adapter->packet_filter && (*(PULONG)set_oid.p_buf) )\r
{\r
+ cl_qlist_insert_tail(\r
+ &g_ipoib.adapter_list, &p_adapter->entry );\r
/*\r
- * Filter was zero, now non-zero. Register IP addresses\r
- * with SA.\r
- */\r
+ * Filter was zero, now non-zero. Register IP addresses\r
+ * with SA.\r
+ */\r
ipoib_reg_addrs( p_adapter );\r
}\r
else if( p_adapter->packet_filter && !(*(PULONG)set_oid.p_buf) )\r
{\r
- /*\r
- * Filter was non-zero, now zero. Deregister IP addresses.\r
- */\r
+ /* Filter was non-zero, now zero. Deregister IP addresses. */\r
ipoib_dereg_addrs( p_adapter );\r
+\r
+ ASSERT( cl_qlist_count( &g_ipoib.adapter_list ) );\r
+ cl_qlist_remove_item(\r
+ &g_ipoib.adapter_list, &p_adapter->entry );\r
}\r
+ p_adapter->packet_filter = *(PULONG)set_oid.p_buf;\r
+\r
cl_obj_unlock( &p_adapter->obj );\r
+ KeReleaseInStackQueuedSpinLock( &hdl );\r
\r
- p_adapter->packet_filter = *(PULONG)set_oid.p_buf;\r
NdisMSetInformationComplete( p_adapter->h_adapter, status );\r
break;\r
\r