[NTOS:MM] Implement and use MiAcquirePfnLockAtDpcLevel/MiReleasePfnLockFromDpcLevel.

This commit is contained in:
Thomas Faber 2017-11-21 23:36:34 +01:00
parent da5949280c
commit 81532227b6
No known key found for this signature in database
GPG Key ID: 076E7C3D44720826
2 changed files with 24 additions and 4 deletions

View File

@ -883,6 +883,28 @@ MiReleasePfnLock(
KeReleaseQueuedSpinLock(LockQueuePfnLock, OldIrql);
}
FORCEINLINE
VOID
MiAcquirePfnLockAtDpcLevel(VOID)
{
PKSPIN_LOCK_QUEUE LockQueue;
ASSERT(KeGetCurrentIrql() >= DISPATCH_LEVEL);
LockQueue = &KeGetCurrentPrcb()->LockQueue[LockQueuePfnLock];
KeAcquireQueuedSpinLockAtDpcLevel(LockQueue);
}
FORCEINLINE
VOID
MiReleasePfnLockFromDpcLevel(VOID)
{
PKSPIN_LOCK_QUEUE LockQueue;
LockQueue = &KeGetCurrentPrcb()->LockQueue[LockQueuePfnLock];
KeReleaseQueuedSpinLockFromDpcLevel(LockQueue);
ASSERT(KeGetCurrentIrql() >= DISPATCH_LEVEL);
}
#define MI_ASSERT_PFN_LOCK_HELD() ASSERT(KeGetCurrentIrql() == DISPATCH_LEVEL)
FORCEINLINE

View File

@ -433,7 +433,6 @@ MiAllocatePoolPages(IN POOL_TYPE PoolType,
PMMPFN Pfn1;
PVOID BaseVa, BaseVaStart;
PMMFREE_POOL_ENTRY FreeEntry;
PKSPIN_LOCK_QUEUE LockQueue;
//
// Figure out how big the allocation is in pages
@ -844,8 +843,7 @@ MiAllocatePoolPages(IN POOL_TYPE PoolType,
//
// Lock the PFN database too
//
LockQueue = &KeGetCurrentPrcb()->LockQueue[LockQueuePfnLock];
KeAcquireQueuedSpinLockAtDpcLevel(LockQueue);
MiAcquirePfnLockAtDpcLevel();
//
// Loop the pages
@ -889,7 +887,7 @@ MiAllocatePoolPages(IN POOL_TYPE PoolType,
//
// Release the PFN and nonpaged pool lock
//
KeReleaseQueuedSpinLockFromDpcLevel(LockQueue);
MiReleasePfnLockFromDpcLevel();
KeReleaseQueuedSpinLock(LockQueueMmNonPagedPoolLock, OldIrql);
//