[ofw] RE: patch: [ibal] use safe function for working on mutex.
Smith, Stan
stan.smith at intel.com
Mon Oct 27 10:04:58 PDT 2008
Hello Tzachi,
My intent on using ExAcquireFastMutexUnsafe() was a debug technique copied from a Microsoft KMDF driver example. The debug plan was intended to 'blow up' if/when the ExAcquireFastMutexUnsafe() call was invoked at an incorrect IRQL level.
I never did see an example of the code 'blowing up', hence did not worry about it. Seems I trusted the MS example code and did not completely read the ExAcquireFastMutexUnsafe() documentation.
ExAcquireFastMutex() is a better way to go.
stan.
________________________________
From: ofw-bounces at lists.openfabrics.org [mailto:ofw-bounces at lists.openfabrics.org] On Behalf Of Tzachi Dar
Sent: Monday, October 27, 2008 7:58 AM
To: ofw at lists.openfabrics.org
Subject: [ofw] patch: [ibal] use safe function for working on mutex.
The unsafe functions can only be used from apc level. We call them from passive level, so we use the safe functions.
Index: Q:/projinf3/trunk/core/bus/kernel/bus_port_mgr.c
===================================================================
--- Q:/projinf3/trunk/core/bus/kernel/bus_port_mgr.c (revision 3372)
+++ Q:/projinf3/trunk/core/bus/kernel/bus_port_mgr.c (revision 3373)
@@ -483,12 +483,12 @@
*/
if ( !bus_globals.h_pnp_port )
{
- ExAcquireFastMutexUnsafe(&g_ControlMutex);
+ ExAcquireFastMutex(&g_ControlMutex);
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);
+ ExReleaseFastMutex(&g_ControlMutex);
if ( need_pnp_reg )
{
@@ -1005,10 +1005,10 @@
if ( !p_bfi->p_bus_ext )
continue;
GO = FALSE;
- ExAcquireFastMutexUnsafe(&g_ControlMutex);
+ ExAcquireFastMutex(&g_ControlMutex);
if ( p_bfi->ca_guid && p_bfi->p_port_mgr )
GO = TRUE;
- ExReleaseFastMutexUnsafe(&g_ControlMutex);
+ ExReleaseFastMutex(&g_ControlMutex);
if ( GO == FALSE )
continue;
status = _port_mgr_pkey_rem( pkeys, p_bfi->p_port_mgr );
@@ -1149,10 +1149,10 @@
if ( !p_bfi->p_bus_ext )
continue;
GO = FALSE;
- ExAcquireFastMutexUnsafe(&g_ControlMutex);
+ ExAcquireFastMutex(&g_ControlMutex);
if ( p_bfi->ca_guid && p_bfi->p_port_mgr )
GO = TRUE;
- ExReleaseFastMutexUnsafe(&g_ControlMutex);
+ ExReleaseFastMutex(&g_ControlMutex);
if ( GO == FALSE )
continue;
status = _port_mgr_pkey_add( pkeys, p_bfi, p_bfi->p_port_mgr );
Index: Q:/projinf3/trunk/core/bus/kernel/bus_pnp.c
===================================================================
--- Q:/projinf3/trunk/core/bus/kernel/bus_pnp.c (revision 3372)
+++ Q:/projinf3/trunk/core/bus/kernel/bus_pnp.c (revision 3373)
@@ -334,7 +334,7 @@
return status;
}
- ExAcquireFastMutexUnsafe(&g_ControlMutex);
+ ExAcquireFastMutex(&g_ControlMutex);
if ( !gh_al ) {
/* Initialize AL */
ib_status = al_initialize();
@@ -343,12 +343,12 @@
al_cleanup();
BUS_TRACE_EXIT( BUS_DBG_ERROR, ("al_initialize returned %s.\n",
ib_get_err_str(ib_status)) );
- ExReleaseFastMutexUnsafe(&g_ControlMutex);
+ ExReleaseFastMutex(&g_ControlMutex);
return STATUS_UNSUCCESSFUL;
}
AL_init_here = TRUE;
}
- ExReleaseFastMutexUnsafe(&g_ControlMutex);
+ ExReleaseFastMutex(&g_ControlMutex);
/* Initialize the port manager. */
ib_status = create_port_mgr( p_ext->bus_filter, &p_ext->p_port_mgr );
@@ -1252,7 +1252,7 @@
CL_ASSERT((obj_type == BFI_PORT_MGR_OBJ) || (obj_type == BFI_IOU_MGR_OBJ));
- ExAcquireFastMutexUnsafe(&g_ControlMutex);
+ ExAcquireFastMutex(&g_ControlMutex);
for(p_bfi=g_bus_filters; p_bfi < &g_bus_filters[MAX_BUS_FILTERS]; p_bfi++) {
@@ -1272,7 +1272,7 @@
}
}
}
- ExReleaseFastMutexUnsafe(&g_ControlMutex);
+ ExReleaseFastMutex(&g_ControlMutex);
BUS_PRINT( BUS_DBG_PNP,
("%s() cl_obj %p type %s_MGR_OBJ --> bfi[%d] %p\n",
@@ -1302,7 +1302,7 @@
return matched;
}
- ExAcquireFastMutexUnsafe(&g_ControlMutex);
+ ExAcquireFastMutex(&g_ControlMutex);
for(p_bfi=g_bus_filters; p_bfi < &g_bus_filters[MAX_BUS_FILTERS]; p_bfi++)
{
@@ -1315,7 +1315,7 @@
break;
}
}
- ExReleaseFastMutexUnsafe(&g_ControlMutex);
+ ExReleaseFastMutex(&g_ControlMutex);
#if DBG
if ( !matched )
@@ -1376,7 +1376,7 @@
*/
if ( !matched )
{
- ExAcquireFastMutexUnsafe(&g_ControlMutex);
+ ExAcquireFastMutex(&g_ControlMutex);
for(p_bfi=g_bus_filters; p_bfi < &g_bus_filters[MAX_BUS_FILTERS]; p_bfi++)
{
@@ -1391,7 +1391,7 @@
break;
}
}
- ExReleaseFastMutexUnsafe(&g_ControlMutex);
+ ExReleaseFastMutex(&g_ControlMutex);
}
BUS_PRINT( BUS_DBG_PNP,
@@ -1413,7 +1413,7 @@
* IoCreateDeviceSecure & IoCreateSymbolicLink must be called at
* PASSIVE_LEVEL.
*/
- ExAcquireFastMutexUnsafe(&g_ControlMutex);
+ ExAcquireFastMutex(&g_ControlMutex);
// 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 @@
break;
}
}
- ExReleaseFastMutexUnsafe(&g_ControlMutex);
+ ExReleaseFastMutex(&g_ControlMutex);
#if DBG
RtlStringCbPrintfA ( p_bfi->whoami,
@@ -1453,11 +1453,11 @@
{
int remaining;
- ExAcquireFastMutexUnsafe(&g_ControlMutex);
+ ExAcquireFastMutex(&g_ControlMutex);
p_bfi->p_bus_ext = NULL;
p_bfi->ca_guid = 0ULL;
remaining = --g_bfi_InstanceCount; // one less bfi in-use
- ExReleaseFastMutexUnsafe(&g_ControlMutex);
+ ExReleaseFastMutex(&g_ControlMutex);
return remaining;
}
@@ -1467,9 +1467,9 @@
{
int ic;
- ExAcquireFastMutexUnsafe(&g_ControlMutex);
+ ExAcquireFastMutex(&g_ControlMutex);
ic = g_bfi_InstanceCount;
- ExReleaseFastMutexUnsafe(&g_ControlMutex);
+ ExReleaseFastMutex(&g_ControlMutex);
return ic;
}
Index: Q:/projinf3/trunk/core/bus/kernel/bus_iou_mgr.c
===================================================================
--- Q:/projinf3/trunk/core/bus/kernel/bus_iou_mgr.c (revision 3372)
+++ Q:/projinf3/trunk/core/bus/kernel/bus_iou_mgr.c (revision 3373)
@@ -483,13 +483,13 @@
*/
if ( !bus_globals.h_pnp_iou )
{
- ExAcquireFastMutexUnsafe(&g_ControlMutex);
+ ExAcquireFastMutex(&g_ControlMutex);
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);
+ ExReleaseFastMutex(&g_ControlMutex);
if ( need_pnp_reg )
{
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.openfabrics.org/pipermail/ofw/attachments/20081027/c9d92411/attachment.html>
More information about the ofw
mailing list