From: tzachid Date: Tue, 28 Oct 2008 09:33:46 +0000 (+0000) Subject: [ibal] Replace mutex unsafe function with events. X-Git-Url: https://openfabrics.org/gitweb/?a=commitdiff_plain;h=fdbf3d6e4a6d5b31bf36bec5f98465e4fb73e6d2;p=~shefty%2Frdma-win.git [ibal] Replace mutex unsafe function with events. git-svn-id: svn://openib.tc.cornell.edu/gen1@1700 ad392aa1-c5ef-ae45-8dd8-e69d62a5ef86 --- diff --git a/branches/WOF2-0/trunk/core/bus/kernel/bus_driver.c b/branches/WOF2-0/trunk/core/bus/kernel/bus_driver.c index ddfd1161..7c6215d4 100644 --- a/branches/WOF2-0/trunk/core/bus/kernel/bus_driver.c +++ b/branches/WOF2-0/trunk/core/bus/kernel/bus_driver.c @@ -799,7 +799,7 @@ DriverEntry( // Mutex to synchronize multiple threads creating & deleting // control deviceobjects. - ExInitializeFastMutex(&g_ControlMutex); + KeInitializeEvent(&g_ControlEvent, SynchronizationEvent, TRUE); g_bfi_InstanceCount = 0; memset( __out_bcount(sizeof(g_bus_filters)) (void*)g_bus_filters, 0, sizeof(g_bus_filters) ); diff --git a/branches/WOF2-0/trunk/core/bus/kernel/bus_driver.h b/branches/WOF2-0/trunk/core/bus/kernel/bus_driver.h index 12ed47c6..c3625356 100644 --- a/branches/WOF2-0/trunk/core/bus/kernel/bus_driver.h +++ b/branches/WOF2-0/trunk/core/bus/kernel/bus_driver.h @@ -255,7 +255,7 @@ typedef struct _bus_filter_instance extern bus_filter_t g_bus_filters[MAX_BUS_FILTERS]; extern ULONG g_bfi_InstanceCount; -extern FAST_MUTEX g_ControlMutex; // serializes InstanceCount & g_bus_filters +extern KEVENT g_ControlEvent; // serializes InstanceCount & g_bus_filters extern bus_filter_t *alloc_bfi( IN DRIVER_OBJECT *, OUT int * ); extern int free_bfi( IN bus_filter_t *p_bfi ); @@ -265,4 +265,12 @@ extern bus_filter_t *get_bfi_by_ca_guid( IN net64_t ca_guid ); extern bus_filter_t *get_set_bfi_by_ca_guid( IN net64_t ca_guid ); extern char *get_obj_state_str(cl_state_t state); +inline VOID lock_control_event() { + KeWaitForSingleObject(&g_ControlEvent, Executive, KernelMode , FALSE, NULL); +} + +inline VOID unlock_control_event() { + KeSetEvent(&g_ControlEvent, 0, FALSE); +} + #endif /* !defined _BUS_DRIVER_H_ */ diff --git a/branches/WOF2-0/trunk/core/bus/kernel/bus_iou_mgr.c b/branches/WOF2-0/trunk/core/bus/kernel/bus_iou_mgr.c index e9ff3ff7..fcc31754 100644 --- a/branches/WOF2-0/trunk/core/bus/kernel/bus_iou_mgr.c +++ b/branches/WOF2-0/trunk/core/bus/kernel/bus_iou_mgr.c @@ -483,13 +483,13 @@ bus_reg_iou_pnp( IN bus_filter_t *p_bfi ) */ if ( !bus_globals.h_pnp_iou ) { - ExAcquireFastMutexUnsafe(&g_ControlMutex); + lock_control_event(); if ( !bus_globals.h_pnp_iou ) { bus_globals.h_pnp_iou = (ib_pnp_handle_t)1; /* block others */ need_pnp_reg = TRUE; } - ExReleaseFastMutexUnsafe(&g_ControlMutex); + unlock_control_event(); if ( need_pnp_reg ) { diff --git a/branches/WOF2-0/trunk/core/bus/kernel/bus_pnp.c b/branches/WOF2-0/trunk/core/bus/kernel/bus_pnp.c index 7eb44811..661d5d39 100644 --- a/branches/WOF2-0/trunk/core/bus/kernel/bus_pnp.c +++ b/branches/WOF2-0/trunk/core/bus/kernel/bus_pnp.c @@ -51,7 +51,7 @@ static UNICODE_STRING al_ifc_name; static UNICODE_STRING ci_ifc_name; -FAST_MUTEX g_ControlMutex; +KEVENT g_ControlEvent; ULONG g_bfi_InstanceCount; bus_filter_t g_bus_filters[MAX_BUS_FILTERS]; @@ -334,7 +334,7 @@ fdo_start( return status; } - ExAcquireFastMutexUnsafe(&g_ControlMutex); + lock_control_event(); if ( !gh_al ) { /* Initialize AL */ ib_status = al_initialize(); @@ -343,12 +343,12 @@ fdo_start( al_cleanup(); BUS_TRACE_EXIT( BUS_DBG_ERROR, ("al_initialize returned %s.\n", ib_get_err_str(ib_status)) ); - ExReleaseFastMutexUnsafe(&g_ControlMutex); + unlock_control_event(); return STATUS_UNSUCCESSFUL; } AL_init_here = TRUE; } - ExReleaseFastMutexUnsafe(&g_ControlMutex); + unlock_control_event(); /* Initialize the port manager. */ ib_status = create_port_mgr( p_ext->bus_filter, &p_ext->p_port_mgr ); @@ -1252,7 +1252,7 @@ get_bfi_by_obj(IN int obj_type, IN cl_obj_t *p_obj ) CL_ASSERT((obj_type == BFI_PORT_MGR_OBJ) || (obj_type == BFI_IOU_MGR_OBJ)); - ExAcquireFastMutexUnsafe(&g_ControlMutex); + lock_control_event(); for(p_bfi=g_bus_filters; p_bfi < &g_bus_filters[MAX_BUS_FILTERS]; p_bfi++) { @@ -1272,7 +1272,7 @@ get_bfi_by_obj(IN int obj_type, IN cl_obj_t *p_obj ) } } } - ExReleaseFastMutexUnsafe(&g_ControlMutex); + unlock_control_event(); BUS_PRINT( BUS_DBG_PNP, ("%s() cl_obj %p type %s_MGR_OBJ --> bfi[%d] %p\n", @@ -1302,7 +1302,7 @@ get_bfi_by_ca_guid( IN net64_t ca_guid ) return matched; } - ExAcquireFastMutexUnsafe(&g_ControlMutex); + lock_control_event(); for(p_bfi=g_bus_filters; p_bfi < &g_bus_filters[MAX_BUS_FILTERS]; p_bfi++) { @@ -1315,7 +1315,7 @@ get_bfi_by_ca_guid( IN net64_t ca_guid ) break; } } - ExReleaseFastMutexUnsafe(&g_ControlMutex); + unlock_control_event(); #if DBG if ( !matched ) @@ -1376,7 +1376,7 @@ get_set_bfi_by_ca_guid( IN net64_t ca_guid ) */ if ( !matched ) { - ExAcquireFastMutexUnsafe(&g_ControlMutex); + lock_control_event(); for(p_bfi=g_bus_filters; p_bfi < &g_bus_filters[MAX_BUS_FILTERS]; p_bfi++) { @@ -1391,7 +1391,7 @@ get_set_bfi_by_ca_guid( IN net64_t ca_guid ) break; } } - ExReleaseFastMutexUnsafe(&g_ControlMutex); + unlock_control_event(); } BUS_PRINT( BUS_DBG_PNP, @@ -1413,7 +1413,7 @@ alloc_bfi( IN DRIVER_OBJECT *p_driver_obj, OUT int *p_instance_count ) * IoCreateDeviceSecure & IoCreateSymbolicLink must be called at * PASSIVE_LEVEL. */ - ExAcquireFastMutexUnsafe(&g_ControlMutex); + lock_control_event(); // find 1st unused bfi slot. for(p_bfi=g_bus_filters; p_bfi < &g_bus_filters[MAX_BUS_FILTERS]; p_bfi++) @@ -1430,7 +1430,7 @@ alloc_bfi( IN DRIVER_OBJECT *p_driver_obj, OUT int *p_instance_count ) break; } } - ExReleaseFastMutexUnsafe(&g_ControlMutex); + unlock_control_event(); #if DBG RtlStringCbPrintfA ( p_bfi->whoami, @@ -1453,12 +1453,12 @@ free_bfi( IN bus_filter_t *p_bfi ) { int remaining; - ExAcquireFastMutexUnsafe(&g_ControlMutex); + lock_control_event(); p_bfi->p_bus_ext = NULL; p_bfi->ca_guid = 0ULL; remaining = --g_bfi_InstanceCount; // one less bfi in-use - ExReleaseFastMutexUnsafe(&g_ControlMutex); - + unlock_control_event(); + return remaining; } @@ -1467,10 +1467,10 @@ get_bfi_count( void ) { int ic; - ExAcquireFastMutexUnsafe(&g_ControlMutex); + lock_control_event(); ic = g_bfi_InstanceCount; - ExReleaseFastMutexUnsafe(&g_ControlMutex); - + unlock_control_event(); + return ic; } diff --git a/branches/WOF2-0/trunk/core/bus/kernel/bus_port_mgr.c b/branches/WOF2-0/trunk/core/bus/kernel/bus_port_mgr.c index fc0fadef..e7b3212b 100644 --- a/branches/WOF2-0/trunk/core/bus/kernel/bus_port_mgr.c +++ b/branches/WOF2-0/trunk/core/bus/kernel/bus_port_mgr.c @@ -483,12 +483,12 @@ bus_reg_port_pnp( IN bus_filter_t *p_bfi ) */ if ( !bus_globals.h_pnp_port ) { - ExAcquireFastMutexUnsafe(&g_ControlMutex); + lock_control_event(); if ( !bus_globals.h_pnp_port ) { bus_globals.h_pnp_port = (ib_pnp_handle_t)1; /* block others */ need_pnp_reg = TRUE; } - ExReleaseFastMutexUnsafe(&g_ControlMutex); + unlock_control_event(); if ( need_pnp_reg ) { @@ -1005,10 +1005,10 @@ cl_status_t port_mgr_pkey_rem( IN pkey_array_t *pkeys ) if ( !p_bfi->p_bus_ext ) continue; GO = FALSE; - ExAcquireFastMutexUnsafe(&g_ControlMutex); + lock_control_event(); if ( p_bfi->ca_guid && p_bfi->p_port_mgr ) GO = TRUE; - ExReleaseFastMutexUnsafe(&g_ControlMutex); + unlock_control_event(); if ( GO == FALSE ) continue; status = _port_mgr_pkey_rem( pkeys, p_bfi->p_port_mgr ); @@ -1149,10 +1149,10 @@ cl_status_t port_mgr_pkey_add(pkey_array_t *pkeys) if ( !p_bfi->p_bus_ext ) continue; GO = FALSE; - ExAcquireFastMutexUnsafe(&g_ControlMutex); + lock_control_event(); if ( p_bfi->ca_guid && p_bfi->p_port_mgr ) GO = TRUE; - ExReleaseFastMutexUnsafe(&g_ControlMutex); + unlock_control_event(); if ( GO == FALSE ) continue; status = _port_mgr_pkey_add( pkeys, p_bfi, p_bfi->p_port_mgr );