From 9d0ad1a58ff82e684b8aa9893fc36667fb15e349 Mon Sep 17 00:00:00 2001 From: ftillier Date: Fri, 16 Sep 2005 19:36:20 +0000 Subject: [PATCH] [IPoIB] Track adapters instances in a list. git-svn-id: svn://openib.tc.cornell.edu/gen1@70 ad392aa1-c5ef-ae45-8dd8-e69d62a5ef86 --- trunk/ulp/ipoib/kernel/ipoib_adapter.c | 21 ++++++++++++++++----- trunk/ulp/ipoib/kernel/ipoib_adapter.h | 2 ++ trunk/ulp/ipoib/kernel/ipoib_driver.c | 7 +++++-- trunk/ulp/ipoib/kernel/ipoib_driver.h | 13 ++++++++++++- trunk/ulp/ipoib/kernel/ipoib_xfr_mgr.h | 5 +---- 5 files changed, 36 insertions(+), 12 deletions(-) diff --git a/trunk/ulp/ipoib/kernel/ipoib_adapter.c b/trunk/ulp/ipoib/kernel/ipoib_adapter.c index 56e048fe..f999084a 100644 --- a/trunk/ulp/ipoib/kernel/ipoib_adapter.c +++ b/trunk/ulp/ipoib/kernel/ipoib_adapter.c @@ -123,10 +123,11 @@ ipoib_create_adapter( IN void* const h_adapter, OUT ipoib_adapter_t** const pp_adapter ) { - ipoib_adapter_t *p_adapter; - ib_api_status_t status; - cl_status_t cl_status; - uint8_t port_num; + ipoib_adapter_t *p_adapter; + ib_api_status_t status; + cl_status_t cl_status; + uint8_t port_num; + KLOCK_QUEUE_HANDLE hdl; IPOIB_ENTER( IPOIB_DBG_INIT ); @@ -197,6 +198,10 @@ ipoib_create_adapter( return IB_ERROR; } + KeAcquireInStackQueuedSpinLock( &g_ipoib.lock, &hdl ); + InsertHeadList( &g_ipoib.adapter_list, &p_adapter->entry ); + KeReleaseInStackQueuedSpinLock( &hdl ); + status = adapter_init( p_adapter ); if( status != IB_SUCCESS ) { @@ -414,7 +419,8 @@ static void __adapter_destroying( IN cl_obj_t* const p_obj ) { - ipoib_adapter_t *p_adapter; + ipoib_adapter_t *p_adapter; + KLOCK_QUEUE_HANDLE hdl; IPOIB_ENTER( IPOIB_DBG_INIT ); @@ -431,6 +437,11 @@ __adapter_destroying( p_adapter->h_pnp = NULL; } + KeAcquireInStackQueuedSpinLock( &g_ipoib.lock, &hdl ); + ASSERT( !IsListEmpty( &g_ipoib.adapter_list ) ); + RemoveEntryList( &p_adapter->entry ); + KeReleaseInStackQueuedSpinLock( &hdl ); + IPOIB_EXIT( IPOIB_DBG_INIT ); } diff --git a/trunk/ulp/ipoib/kernel/ipoib_adapter.h b/trunk/ulp/ipoib/kernel/ipoib_adapter.h index fd786434..ba67e240 100644 --- a/trunk/ulp/ipoib/kernel/ipoib_adapter.h +++ b/trunk/ulp/ipoib/kernel/ipoib_adapter.h @@ -130,6 +130,8 @@ typedef struct _ipoib_adapter NDIS_HANDLE h_adapter; ipoib_ifc_data_t guids; + LIST_ENTRY entry; + ib_al_handle_t h_al; ib_pnp_handle_t h_pnp; diff --git a/trunk/ulp/ipoib/kernel/ipoib_driver.c b/trunk/ulp/ipoib/kernel/ipoib_driver.c index af855db6..f81da084 100644 --- a/trunk/ulp/ipoib/kernel/ipoib_driver.c +++ b/trunk/ulp/ipoib/kernel/ipoib_driver.c @@ -119,8 +119,8 @@ static const unsigned char VENDOR_ID[] = {0x00, 0x06, 0x6A, 0x00}; /* Global driver debug level */ -uint32_t g_ipoib_dbg_lvl = IPOIB_DBG_ERROR; -atomic32_t g_laa_idx = 0; +uint32_t g_ipoib_dbg_lvl = IPOIB_DBG_ERROR; +ipoib_globals_t g_ipoib = {0}; NTSTATUS @@ -249,6 +249,9 @@ DriverEntry( status = NDIS_STATUS_SUCCESS; ndis_handle = NULL; + KeInitializeSpinLock( &g_ipoib.lock ); + InitializeListHead( &g_ipoib.adapter_list ); + NdisMInitializeWrapper( &ndis_handle, p_drv_obj, p_registry_path, NULL ); memset(&characteristics, 0, sizeof(characteristics)); diff --git a/trunk/ulp/ipoib/kernel/ipoib_driver.h b/trunk/ulp/ipoib/kernel/ipoib_driver.h index 34b7a146..94bea711 100644 --- a/trunk/ulp/ipoib/kernel/ipoib_driver.h +++ b/trunk/ulp/ipoib/kernel/ipoib_driver.h @@ -63,19 +63,30 @@ typedef struct _ipoib_globals { - cl_spinlock_t lock; + KSPIN_LOCK lock; + LIST_ENTRY adapter_list; cl_qlist_t bundle_list; + atomic32_t laa_idx; + } ipoib_globals_t; /* * FIELDS * lock * Spinlock to protect list access. * +* adapter_list +* List of all adapter instances. Used for address translation support. +* * bundle_list * List of all adapter bundles. +* +* laa_idx +* Global counter for generating LAA MACs *********/ +extern ipoib_globals_t g_ipoib; + typedef struct _ipoib_bundle { diff --git a/trunk/ulp/ipoib/kernel/ipoib_xfr_mgr.h b/trunk/ulp/ipoib/kernel/ipoib_xfr_mgr.h index b7e0fd87..2b5a3b88 100644 --- a/trunk/ulp/ipoib/kernel/ipoib_xfr_mgr.h +++ b/trunk/ulp/ipoib/kernel/ipoib_xfr_mgr.h @@ -88,9 +88,6 @@ extern "C" { #endif -/* Global counter for generating LAA MACs */ -extern atomic32_t g_laa_idx; - /* * Address accessors @@ -221,7 +218,7 @@ ipoib_mac_from_guid( } /* Value of zero is reserved. */ - laa = cl_atomic_inc( &g_laa_idx ); + laa = cl_atomic_inc( &g_ipoib.laa_idx ); if( !laa ) return IB_INVALID_GUID; -- 2.41.0