[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [win-pv-devel] [PATCH] Stop using FAST_MUTEX
There are several build warnings because of functions that must be called at PASSIVE_LEVEL being called at APC_LEVEL. This is because acquiring a FAST_MUTEX raises IRQL to APC_LEVEL which is an annoying semantic that basically renders them useless. This patch replaces occurences of FAST_MUTEX with XENIFACE_MUTEX acquisition of which does not modify IRQL. Signed-off-by: Paul Durrant <paul.durrant@xxxxxxxxxx> --- src/xeniface/fdo.h | 2 +- src/xeniface/wmi.c | 58 ++++++++++++++++++++++-------------------------------- 2 files changed, 25 insertions(+), 35 deletions(-) diff --git a/src/xeniface/fdo.h b/src/xeniface/fdo.h index 0791906..1fedc09 100644 --- a/src/xeniface/fdo.h +++ b/src/xeniface/fdo.h @@ -106,7 +106,7 @@ typedef struct _XENIFACE_FDO { int WmiReady; USHORT Sessions; - FAST_MUTEX SessionLock; + XENIFACE_MUTEX SessionLock; LIST_ENTRY SessionHead; PXENIFACE_THREAD registryThread; diff --git a/src/xeniface/wmi.c b/src/xeniface/wmi.c index 65d31c9..479f400 100644 --- a/src/xeniface/wmi.c +++ b/src/xeniface/wmi.c @@ -1,4 +1,4 @@ -/* Copyright (c) Citrix Systems Inc. + /* Copyright (c) Citrix Systems Inc. * All rights reserved. * * Redistribution and use in source and binary forms, @@ -46,24 +46,17 @@ #include "xeniface_ioctls.h" #include <version.h> -__drv_raisesIRQL(APC_LEVEL) -__drv_savesIRQLGlobal(OldIrql, fdoData->SessionLock) void LockSessions( XENIFACE_FDO* fdoData) { - ASSERT(KeGetCurrentIrql() <= APC_LEVEL); - ExAcquireFastMutex(&fdoData->SessionLock); + AcquireMutex(&fdoData->SessionLock); } -__drv_requiresIRQL(APC_LEVEL) -__drv_restoresIRQLGlobal(OldIrql, fdoData->SessionLock) void UnlockSessions( XENIFACE_FDO* fdoData) { - ASSERT(KeGetCurrentIrql() == APC_LEVEL); -#pragma prefast (suppress:26110) - ExReleaseFastMutex(&fdoData->SessionLock); + ReleaseMutex(&fdoData->SessionLock); } void GetUnicodeString(UNICODE_STRING *unicode, USHORT maxlength, LPWSTR location) @@ -678,7 +671,7 @@ typedef struct _XenStoreSession { KEVENT* watchevents[MAXIMUM_WAIT_OBJECTS]; KWAIT_BLOCK watchwaitblockarray[MAXIMUM_WAIT_OBJECTS]; KEVENT SessionChangedEvent; - FAST_MUTEX WatchMapLock; + XENIFACE_MUTEX WatchMapLock; BOOLEAN mapchanged; BOOLEAN closing; BOOLEAN suspended; @@ -730,14 +723,13 @@ int CompareUnicodeStrings(PCUNICODE_STRING string1, PCUNICODE_STRING string2) { } -_IRQL_raises_(APC_LEVEL) XenStoreWatch * SessionFindWatchLocked(XenStoreSession *session, UNICODE_STRING *path) { XenStoreWatch * watch; XenIfaceDebugPrint(TRACE,"Wait for session watch lock\n"); - ExAcquireFastMutex(&session->WatchMapLock); + AcquireMutex(&session->WatchMapLock); XenIfaceDebugPrint(TRACE,"got session watch lock\n"); watch = (XenStoreWatch *)session->watches.Flink; @@ -844,7 +836,7 @@ VOID WatchCallbackThread(__in PVOID StartContext) { XenStoreSession * session = (XenStoreSession*) StartContext; for(;;) { - ExAcquireFastMutex(&session->WatchMapLock); + AcquireMutex(&session->WatchMapLock); if (session->mapchanged) { // Construct a new mapping XenStoreWatch *watch; @@ -857,7 +849,7 @@ VOID WatchCallbackThread(__in PVOID StartContext) { session->mapchanged = FALSE; session->watchevents[i] = &session->SessionChangedEvent; } - ExReleaseFastMutex(&session->WatchMapLock); + ReleaseMutex(&session->WatchMapLock); XenIfaceDebugPrint(TRACE,"Wait for new event\n"); status = KeWaitForMultipleObjects(i+1, session->watchevents, WaitAny, Executive, KernelMode, TRUE, NULL, session->watchwaitblockarray); XenIfaceDebugPrint(TRACE,"got new event\n"); @@ -865,7 +857,7 @@ VOID WatchCallbackThread(__in PVOID StartContext) { XenStoreWatch *watch; XenIfaceDebugPrint(TRACE,"watch or suspend\n"); watch = CONTAINING_RECORD(session->watchevents[status-STATUS_WAIT_0], XenStoreWatch, watchevent ); - ExAcquireFastMutex(&session->WatchMapLock); + AcquireMutex(&session->WatchMapLock); KeClearEvent(&watch->watchevent); @@ -886,10 +878,10 @@ VOID WatchCallbackThread(__in PVOID StartContext) { } else { FireWatch(watch); } - ExReleaseFastMutex(&session->WatchMapLock); + ReleaseMutex(&session->WatchMapLock); } else if ( status == STATUS_WAIT_0 + i) { - ExAcquireFastMutex(&session->WatchMapLock); + AcquireMutex(&session->WatchMapLock); KeClearEvent(&session->SessionChangedEvent); if (session->closing==TRUE) { XenIfaceDebugPrint(TRACE,"Trying to end session thread\n"); @@ -905,14 +897,14 @@ VOID WatchCallbackThread(__in PVOID StartContext) { session->watchcount --; } } - ExReleaseFastMutex(&session->WatchMapLock); + ReleaseMutex(&session->WatchMapLock); XenIfaceDebugPrint(TRACE,"Ending session thread\n"); PsTerminateSystemThread(STATUS_SUCCESS); - //ExReleaseFastMutex(&session->WatchMapLock); + //ReleaseMutex(&session->WatchMapLock); } else { - ExReleaseFastMutex(&session->WatchMapLock); + ReleaseMutex(&session->WatchMapLock); } } @@ -956,7 +948,7 @@ SessionAddWatchLocked(XenStoreSession *session, return STATUS_INSUFFICIENT_RESOURCES; } - ExAcquireFastMutex(&session->WatchMapLock); + AcquireMutex(&session->WatchMapLock); session->mapchanged = TRUE; KeSetEvent(&session->SessionChangedEvent, IO_NO_INCREMENT,FALSE); session->watchcount++; @@ -971,7 +963,7 @@ SessionAddWatchLocked(XenStoreSession *session, } XenIfaceDebugPrint(TRACE, "WATCHLIST-------------------\n"); - ExReleaseFastMutex(&session->WatchMapLock); + ReleaseMutex(&session->WatchMapLock); return STATUS_SUCCESS; } @@ -1004,7 +996,7 @@ void SessionRemoveWatchesLocked(XenStoreSession *session) { XenStoreWatch *watch; XenIfaceDebugPrint(TRACE, "wait remove mutex\n"); - ExAcquireFastMutex(&session->WatchMapLock); + AcquireMutex(&session->WatchMapLock); for (watch = (XenStoreWatch *)session->watches.Flink; watch!=(XenStoreWatch *)&session->watches; watch=(XenStoreWatch *)watch->listentry.Flink) { @@ -1013,7 +1005,7 @@ void SessionRemoveWatchesLocked(XenStoreSession *session) { SessionRemoveWatchLocked(session, watch); } XenIfaceDebugPrint(TRACE, "release remove mutex\n"); - ExReleaseFastMutex(&session->WatchMapLock); + ReleaseMutex(&session->WatchMapLock); } @@ -1037,8 +1029,6 @@ FindSessionByInstanceLocked(XENIFACE_FDO *fdoData, __checkReturn __success(return!=NULL) -__drv_raisesIRQL(APC_LEVEL) -__drv_savesIRQLGlobal(OldIrql, fdoData->SessionLock) XenStoreSession * FindSessionByInstanceAndLock(XENIFACE_FDO *fdoData, UNICODE_STRING *instance) { @@ -1098,7 +1088,7 @@ CreateNewSession(XENIFACE_FDO *fdoData, return STATUS_INSUFFICIENT_RESOURCES; RtlZeroMemory(session, sizeof(XenStoreSession)); - ExInitializeFastMutex(&session->WatchMapLock); + InitializeMutex(&session->WatchMapLock); session->mapchanged = TRUE; status = RtlUnicodeStringToAnsiString(&ansi, stringid, TRUE); if (!NT_SUCCESS(status)) { @@ -1222,7 +1212,7 @@ void SessionUnwatchWatchesLocked(XenStoreSession *session) { int i; XenStoreWatch *watch; - ExAcquireFastMutex(&session->WatchMapLock); + AcquireMutex(&session->WatchMapLock); watch = (XenStoreWatch *)session->watches.Flink; for (i=0; watch != (XenStoreWatch *)&session->watches; i++) { XenIfaceDebugPrint(TRACE,"Suspend unwatch %p\n", watch->watchhandle); @@ -1240,7 +1230,7 @@ void SessionUnwatchWatchesLocked(XenStoreSession *session) } XenIfaceDebugPrint(TRACE, "WATCHLIST-------------------\n"); session->suspended=1; - ExReleaseFastMutex(&session->WatchMapLock); + ReleaseMutex(&session->WatchMapLock); } void SuspendSessionLocked(XENIFACE_FDO *fdoData, @@ -1274,7 +1264,7 @@ WmiSessionsSuspendAll( void SessionRenewWatchesLocked(XenStoreSession *session) { int i; XenStoreWatch *watch; - ExAcquireFastMutex(&session->WatchMapLock); + AcquireMutex(&session->WatchMapLock); watch = (XenStoreWatch *)session->watches.Flink; for (i=0; watch != (XenStoreWatch *)&session->watches; i++) { if (!watch->finished) { @@ -1294,7 +1284,7 @@ void SessionRenewWatchesLocked(XenStoreSession *session) { session->suspended=0; session->mapchanged = TRUE; KeSetEvent(&session->SessionChangedEvent, IO_NO_INCREMENT,FALSE); - ExReleaseFastMutex(&session->WatchMapLock); + ReleaseMutex(&session->WatchMapLock); } void ResumeSessionLocked(XENIFACE_FDO *fdoData, @@ -1548,7 +1538,7 @@ SessionExecuteRemoveWatch(UCHAR *InBuffer, XenIfaceDebugPrint(WARNING, "No Watch\n"); } #pragma prefast (suppress:26110) - ExReleaseFastMutex(&session->WatchMapLock); + ReleaseMutex(&session->WatchMapLock); UnlockSessions(fdoData); *byteswritten=0; @@ -3111,7 +3101,7 @@ WmiInitialize( Fdo->Sessions = 0; InitializeListHead(&Fdo->SessionHead); - ExInitializeFastMutex(&Fdo->SessionLock); + InitializeMutex(&Fdo->SessionLock); return STATUS_SUCCESS; -- 2.5.3 _______________________________________________ win-pv-devel mailing list win-pv-devel@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |