[NTOS:MM] Use inline functions to acquire/release the PFN lock.
authorThomas Faber <thomas.faber@reactos.org>
Tue, 21 Nov 2017 22:33:42 +0000 (23:33 +0100)
committerThomas Faber <thomas.faber@reactos.org>
Fri, 8 Dec 2017 09:32:08 +0000 (10:32 +0100)
23 files changed:
ntoskrnl/cache/section/data.c
ntoskrnl/cache/section/fault.c
ntoskrnl/include/internal/mm.h
ntoskrnl/mm/ARM3/contmem.c
ntoskrnl/mm/ARM3/dynamic.c
ntoskrnl/mm/ARM3/i386/init.c
ntoskrnl/mm/ARM3/mdlsup.c
ntoskrnl/mm/ARM3/mminit.c
ntoskrnl/mm/ARM3/pagfault.c
ntoskrnl/mm/ARM3/pfnlist.c
ntoskrnl/mm/ARM3/pool.c
ntoskrnl/mm/ARM3/procsup.c
ntoskrnl/mm/ARM3/section.c
ntoskrnl/mm/ARM3/session.c
ntoskrnl/mm/ARM3/special.c
ntoskrnl/mm/ARM3/sysldr.c
ntoskrnl/mm/ARM3/virtual.c
ntoskrnl/mm/ARM3/zeropage.c
ntoskrnl/mm/amd64/page.c
ntoskrnl/mm/balance.c
ntoskrnl/mm/freelist.c
ntoskrnl/mm/marea.c
ntoskrnl/mm/section.c

index 198787b..1fb0fc2 100644 (file)
@@ -192,9 +192,9 @@ _MiFlushMappedSection(PVOID BaseAddress,
             (MmIsDirtyPageRmap(Page) || IS_DIRTY_SSE(Entry)) &&
             FileOffset.QuadPart < FileSize->QuadPart)
         {
-            OldIrql = KeAcquireQueuedSpinLock(LockQueuePfnLock);
+            OldIrql = MiAcquirePfnLock();
             MmReferencePage(Page);
-            KeReleaseQueuedSpinLock(LockQueuePfnLock, OldIrql);
+            MiReleasePfnLock(OldIrql);
             Pages[(PageAddress - BeginningAddress) >> PAGE_SHIFT] = Entry;
         }
         else
index 169d436..c70805a 100644 (file)
@@ -236,9 +236,9 @@ MmNotPresentFaultCachePage (
             KeBugCheck(CACHE_MANAGER);
         }
 
-        OldIrql = KeAcquireQueuedSpinLock(LockQueuePfnLock);
+        OldIrql = MiAcquirePfnLock();
         MmReferencePage(Page);
-        KeReleaseQueuedSpinLock(LockQueuePfnLock, OldIrql);
+        MiReleasePfnLock(OldIrql);
 
         Status = MmCreateVirtualMapping(Process, Address, Attributes, &Page, 1);
         if (NT_SUCCESS(Status))
index 694c51f..d96900b 100644 (file)
@@ -868,6 +868,23 @@ MmPageOutPhysicalAddress(PFN_NUMBER Page);
 
 /* freelist.c **********************************************************/
 
+FORCEINLINE
+KIRQL
+MiAcquirePfnLock(VOID)
+{
+    return KeAcquireQueuedSpinLock(LockQueuePfnLock);
+}
+
+FORCEINLINE
+VOID
+MiReleasePfnLock(
+    _In_ KIRQL OldIrql)
+{
+    KeReleaseQueuedSpinLock(LockQueuePfnLock, OldIrql);
+}
+
+#define MI_ASSERT_PFN_LOCK_HELD() ASSERT(KeGetCurrentIrql() == DISPATCH_LEVEL)
+
 FORCEINLINE
 PMMPFN
 MiGetPfnEntry(IN PFN_NUMBER Pfn)
index b250ebc..6a7fe01 100644 (file)
@@ -109,7 +109,7 @@ MiFindContiguousPages(IN PFN_NUMBER LowestPfn,
                 //
                 // Acquire the PFN lock
                 //
-                OldIrql = KeAcquireQueuedSpinLock(LockQueuePfnLock);
+                OldIrql = MiAcquirePfnLock();
                 do
                 {
                     //
@@ -164,7 +164,7 @@ MiFindContiguousPages(IN PFN_NUMBER LowestPfn,
                         //
                         // Now it's safe to let go of the PFN lock
                         //
-                        KeReleaseQueuedSpinLock(LockQueuePfnLock, OldIrql);
+                        MiReleasePfnLock(OldIrql);
 
                         //
                         // Quick sanity check that the last PFN is consistent
@@ -196,7 +196,7 @@ MiFindContiguousPages(IN PFN_NUMBER LowestPfn,
                 // If we got here, something changed while we hadn't acquired
                 // the PFN lock yet, so we'll have to restart
                 //
-                KeReleaseQueuedSpinLock(LockQueuePfnLock, OldIrql);
+                MiReleasePfnLock(OldIrql);
                 Length = 0;
             }
         }
@@ -540,7 +540,7 @@ MiFreeContiguousMemory(IN PVOID BaseAddress)
     //
     // Lock the PFN database
     //
-    OldIrql = KeAcquireQueuedSpinLock(LockQueuePfnLock);
+    OldIrql = MiAcquirePfnLock();
 
     //
     // Loop all the pages
@@ -556,7 +556,7 @@ MiFreeContiguousMemory(IN PVOID BaseAddress)
     //
     // Release the PFN lock
     //
-    KeReleaseQueuedSpinLock(LockQueuePfnLock, OldIrql);
+    MiReleasePfnLock(OldIrql);
 }
 
 /* PUBLIC FUNCTIONS ***********************************************************/
index dc3469c..d0d3167 100644 (file)
@@ -91,7 +91,7 @@ MmGetPhysicalMemoryRanges(VOID)
     //
     // Lock the PFN database
     //
-    OldIrql = KeAcquireQueuedSpinLock(LockQueuePfnLock);
+    OldIrql = MiAcquirePfnLock();
 
     //
     // Make sure it hasn't changed before we had acquired the lock
@@ -121,6 +121,6 @@ MmGetPhysicalMemoryRanges(VOID)
     //
     // Release the lock and return
     //
-    KeReleaseQueuedSpinLock(LockQueuePfnLock, OldIrql);
+    MiReleasePfnLock(OldIrql);
     return Buffer;
 }
index 05c1007..58cb5ba 100644 (file)
@@ -487,7 +487,7 @@ MiInitMachineDependent(IN PLOADER_PARAMETER_BLOCK LoaderBlock)
     StartPde = MiAddressToPde(HYPER_SPACE);
 
     /* Lock PFN database */
-    OldIrql = KeAcquireQueuedSpinLock(LockQueuePfnLock);
+    OldIrql = MiAcquirePfnLock();
 
     /* Allocate a page for hyperspace and create it */
     MI_SET_USAGE(MI_USAGE_PAGE_TABLE);
@@ -501,7 +501,7 @@ MiInitMachineDependent(IN PLOADER_PARAMETER_BLOCK LoaderBlock)
     KeFlushCurrentTb();
 
     /* Release the lock */
-    KeReleaseQueuedSpinLock(LockQueuePfnLock, OldIrql);
+    MiReleasePfnLock(OldIrql);
 
     //
     // Zero out the page table now
@@ -532,7 +532,7 @@ MiInitMachineDependent(IN PLOADER_PARAMETER_BLOCK LoaderBlock)
     MiFirstReservedZeroingPte->u.Hard.PageFrameNumber = MI_ZERO_PTES - 1;
 
     /* Lock PFN database */
-    OldIrql = KeAcquireQueuedSpinLock(LockQueuePfnLock);
+    OldIrql = MiAcquirePfnLock();
 
     /* Reset the ref/share count so that MmInitializeProcessAddressSpace works */
     Pfn1 = MiGetPfnEntry(PFN_FROM_PTE(MiAddressToPde(PDE_BASE)));
@@ -565,7 +565,7 @@ MiInitMachineDependent(IN PLOADER_PARAMETER_BLOCK LoaderBlock)
     }
 
     /* Release the lock */
-    KeReleaseQueuedSpinLock(LockQueuePfnLock, OldIrql);
+    MiReleasePfnLock(OldIrql);
 
     /* Initialize the bogus address space */
     Flags = 0;
index 85bbfd1..7317a9a 100644 (file)
@@ -218,9 +218,9 @@ MiMapLockedPagesInUserSpace(
 
         /* Acquire a share count */
         Pfn1 = MI_PFN_ELEMENT(PointerPde->u.Hard.PageFrameNumber);
-        OldIrql = KeAcquireQueuedSpinLock(LockQueuePfnLock);
+        OldIrql = MiAcquirePfnLock();
         Pfn1->u2.ShareCount++;
-        KeReleaseQueuedSpinLock(LockQueuePfnLock, OldIrql);
+        MiReleasePfnLock(OldIrql);
 
         /* Next page */
         MdlPages++;
@@ -293,7 +293,7 @@ MiUnmapLockedPagesInUserSpace(
     ASSERT(Process->VadRoot.NodeHint != Vad);
 
     PointerPte = MiAddressToPte(BaseAddress);
-    OldIrql = KeAcquireQueuedSpinLock(LockQueuePfnLock);
+    OldIrql = MiAcquirePfnLock();
     while (NumberOfPages != 0 &&
            *MdlPages != LIST_HEAD)
     {
@@ -336,7 +336,7 @@ MiUnmapLockedPagesInUserSpace(
     }
 
     KeFlushProcessTb();
-    KeReleaseQueuedSpinLock(LockQueuePfnLock, OldIrql);
+    MiReleasePfnLock(OldIrql);
     MiUnlockProcessWorkingSetUnsafe(Process, Thread);
     MmUnlockAddressSpace(&Process->Vm);
     ExFreePoolWithTag(Vad, 'ldaV');
@@ -560,7 +560,7 @@ MmFreePagesFromMdl(IN PMDL Mdl)
     //
     // Acquire PFN lock
     //
-    OldIrql = KeAcquireQueuedSpinLock(LockQueuePfnLock);
+    OldIrql = MiAcquirePfnLock();
 
     //
     // Loop all the MDL pages
@@ -618,7 +618,7 @@ MmFreePagesFromMdl(IN PMDL Mdl)
     //
     // Release the lock
     //
-    KeReleaseQueuedSpinLock(LockQueuePfnLock, OldIrql);
+    MiReleasePfnLock(OldIrql);
 
     //
     // Remove the pages locked flag
@@ -1121,7 +1121,7 @@ MmProbeAndLockPages(IN PMDL Mdl,
         // Use the PFN lock
         //
         UsePfnLock = TRUE;
-        OldIrql = KeAcquireQueuedSpinLock(LockQueuePfnLock);
+        OldIrql = MiAcquirePfnLock();
     }
     else
     {
@@ -1180,7 +1180,7 @@ MmProbeAndLockPages(IN PMDL Mdl,
                 //
                 // Release PFN lock
                 //
-                KeReleaseQueuedSpinLock(LockQueuePfnLock, OldIrql);
+                MiReleasePfnLock(OldIrql);
             }
             else
             {
@@ -1212,7 +1212,7 @@ MmProbeAndLockPages(IN PMDL Mdl,
                 //
                 // Grab the PFN lock
                 //
-                OldIrql = KeAcquireQueuedSpinLock(LockQueuePfnLock);
+                OldIrql = MiAcquirePfnLock();
             }
             else
             {
@@ -1250,7 +1250,7 @@ MmProbeAndLockPages(IN PMDL Mdl,
                             //
                             // Release PFN lock
                             //
-                            KeReleaseQueuedSpinLock(LockQueuePfnLock, OldIrql);
+                            MiReleasePfnLock(OldIrql);
                         }
                         else
                         {
@@ -1281,7 +1281,7 @@ MmProbeAndLockPages(IN PMDL Mdl,
                             //
                             // Grab the PFN lock
                             //
-                            OldIrql = KeAcquireQueuedSpinLock(LockQueuePfnLock);
+                            OldIrql = MiAcquirePfnLock();
                         }
                         else
                         {
@@ -1353,7 +1353,7 @@ MmProbeAndLockPages(IN PMDL Mdl,
         //
         // Release PFN lock
         //
-        KeReleaseQueuedSpinLock(LockQueuePfnLock, OldIrql);
+        MiReleasePfnLock(OldIrql);
     }
     else
     {
@@ -1381,7 +1381,7 @@ CleanupWithLock:
         //
         // Release PFN lock
         //
-        KeReleaseQueuedSpinLock(LockQueuePfnLock, OldIrql);
+        MiReleasePfnLock(OldIrql);
     }
     else
     {
@@ -1462,7 +1462,7 @@ MmUnlockPages(IN PMDL Mdl)
         //
         // Acquire PFN lock
         //
-        OldIrql = KeAcquireQueuedSpinLock(LockQueuePfnLock);
+        OldIrql = MiAcquirePfnLock();
 
         //
         // Loop every page
@@ -1485,7 +1485,7 @@ MmUnlockPages(IN PMDL Mdl)
         //
         // Release the lock
         //
-        KeReleaseQueuedSpinLock(LockQueuePfnLock, OldIrql);
+        MiReleasePfnLock(OldIrql);
 
         //
         // Check if we have a process
@@ -1564,7 +1564,7 @@ MmUnlockPages(IN PMDL Mdl)
     //
     // Now grab the PFN lock for the actual unlock and dereference
     //
-    OldIrql = KeAcquireQueuedSpinLock(LockQueuePfnLock);
+    OldIrql = MiAcquirePfnLock();
     do
     {
         /* Get the current entry and reference count */
@@ -1575,7 +1575,7 @@ MmUnlockPages(IN PMDL Mdl)
     //
     // Release the lock
     //
-    KeReleaseQueuedSpinLock(LockQueuePfnLock, OldIrql);
+    MiReleasePfnLock(OldIrql);
 
     //
     // We're done
index 597cf05..c92db6c 100644 (file)
@@ -949,7 +949,7 @@ MiBuildPfnDatabaseFromLoaderBlock(IN PLOADER_PARAMETER_BLOCK LoaderBlock)
                 Pfn1 = MiGetPfnEntry(PageFrameIndex);
 
                 /* Lock the PFN Database */
-                OldIrql = KeAcquireQueuedSpinLock(LockQueuePfnLock);
+                OldIrql = MiAcquirePfnLock();
                 while (PageCount--)
                 {
                     /* If the page really has no references, mark it as free */
@@ -966,7 +966,7 @@ MiBuildPfnDatabaseFromLoaderBlock(IN PLOADER_PARAMETER_BLOCK LoaderBlock)
                 }
 
                 /* Release PFN database */
-                KeReleaseQueuedSpinLock(LockQueuePfnLock, OldIrql);
+                MiReleasePfnLock(OldIrql);
 
                 /* Done with this block */
                 break;
@@ -1138,7 +1138,7 @@ MmFreeLoaderBlock(IN PLOADER_PARAMETER_BLOCK LoaderBlock)
     }
 
     /* Acquire the PFN lock */
-    OldIrql = KeAcquireQueuedSpinLock(LockQueuePfnLock);
+    OldIrql = MiAcquirePfnLock();
 
     /* Loop the runs */
     LoaderPages = 0;
@@ -1180,7 +1180,7 @@ MmFreeLoaderBlock(IN PLOADER_PARAMETER_BLOCK LoaderBlock)
 
     /* Release the PFN lock and flush the TLB */
     DPRINT("Loader pages freed: %lx\n", LoaderPages);
-    KeReleaseQueuedSpinLock(LockQueuePfnLock, OldIrql);
+    MiReleasePfnLock(OldIrql);
     KeFlushCurrentTb();
 
     /* Free our run structure */
@@ -1829,7 +1829,7 @@ MiBuildPagedPool(VOID)
     //
     // Lock the PFN database
     //
-    OldIrql = KeAcquireQueuedSpinLock(LockQueuePfnLock);
+    OldIrql = MiAcquirePfnLock();
 
 #if (_MI_PAGING_LEVELS >= 3)
     /* On these systems, there's no double-mapping, so instead, the PPEs
@@ -1890,7 +1890,7 @@ MiBuildPagedPool(VOID)
     //
     // Release the PFN database lock
     //
-    KeReleaseQueuedSpinLock(LockQueuePfnLock, OldIrql);
+    MiReleasePfnLock(OldIrql);
 
     //
     // We only have one PDE mapped for now... at fault time, additional PDEs
index 0ded2d6..2e962ed 100644 (file)
@@ -638,12 +638,12 @@ MiResolveDemandZeroFault(IN PVOID Address,
     if (OldIrql == MM_NOIRQL)
     {
         /* Acquire it and remember we should release it after */
-        OldIrql = KeAcquireQueuedSpinLock(LockQueuePfnLock);
+        OldIrql = MiAcquirePfnLock();
         HaveLock = TRUE;
     }
 
     /* We either manually locked the PFN DB, or already came with it locked */
-    ASSERT(KeGetCurrentIrql() == DISPATCH_LEVEL);
+    MI_ASSERT_PFN_LOCK_HELD();
     ASSERT(PointerPte->u.Hard.Valid == 0);
 
     /* Assert we have enough pages */
@@ -692,7 +692,7 @@ MiResolveDemandZeroFault(IN PVOID Address,
     if (HaveLock)
     {
         /* Release it */
-        KeReleaseQueuedSpinLock(LockQueuePfnLock, OldIrql);
+        MiReleasePfnLock(OldIrql);
 
         /* Update performance counters */
         if (Process > HYDRA_PROCESS) Process->NumberOfPrivatePages++;
@@ -763,7 +763,7 @@ MiCompleteProtoPteFault(IN BOOLEAN StoreInstruction,
     BOOLEAN OriginalProtection, DirtyPage;
 
     /* Must be called with an valid prototype PTE, with the PFN lock held */
-    ASSERT(KeGetCurrentIrql() == DISPATCH_LEVEL);
+    MI_ASSERT_PFN_LOCK_HELD();
     ASSERT(PointerProtoPte->u.Hard.Valid == 1);
 
     /* Get the page */
@@ -825,7 +825,7 @@ MiCompleteProtoPteFault(IN BOOLEAN StoreInstruction,
     }
 
     /* Release the PFN lock */
-    KeReleaseQueuedSpinLock(LockQueuePfnLock, OldIrql);
+    MiReleasePfnLock(OldIrql);
 
     /* Remove special/caching bits */
     Protection &= ~MM_PROTECT_SPECIAL;
@@ -892,7 +892,7 @@ MiResolvePageFileFault(_In_ BOOLEAN StoreInstruction,
     ASSERT(*OldIrql != MM_NOIRQL);
 
     /* We must hold the PFN lock */
-    ASSERT(KeGetCurrentIrql() == DISPATCH_LEVEL);
+    MI_ASSERT_PFN_LOCK_HELD();
 
     /* Some sanity checks */
     ASSERT(TempPte.u.Hard.Valid == 0);
@@ -919,13 +919,13 @@ MiResolvePageFileFault(_In_ BOOLEAN StoreInstruction,
     MI_WRITE_INVALID_PTE(PointerPte, TempPte);
 
     /* Release the PFN lock while we proceed */
-    KeReleaseQueuedSpinLock(LockQueuePfnLock, *OldIrql);
+    MiReleasePfnLock(*OldIrql);
 
     /* Do the paging IO */
     Status = MiReadPageFile(Page, PageFileIndex, PageFileOffset);
 
     /* Lock the PFN database again */
-    *OldIrql = KeAcquireQueuedSpinLock(LockQueuePfnLock);
+    *OldIrql = MiAcquirePfnLock();
 
     /* Nobody should have changed that while we were not looking */
     ASSERT(Pfn1->u3.e1.ReadInProgress == 1);
@@ -1106,7 +1106,7 @@ MiResolveProtoPteFault(IN BOOLEAN StoreInstruction,
     ULONG Protection;
 
     /* Must be called with an invalid, prototype PTE, with the PFN lock held */
-    ASSERT(KeGetCurrentIrql() == DISPATCH_LEVEL);
+    MI_ASSERT_PFN_LOCK_HELD();
     ASSERT(PointerPte->u.Hard.Valid == 0);
     ASSERT(PointerPte->u.Soft.Prototype == 1);
 
@@ -1136,7 +1136,7 @@ MiResolveProtoPteFault(IN BOOLEAN StoreInstruction,
     {
         /* Release the lock */
         DPRINT1("Access on reserved section?\n");
-        KeReleaseQueuedSpinLock(LockQueuePfnLock, OldIrql);
+        MiReleasePfnLock(OldIrql);
         return STATUS_ACCESS_VIOLATION;
     }
 
@@ -1193,7 +1193,7 @@ MiResolveProtoPteFault(IN BOOLEAN StoreInstruction,
         }
 
         /* Lock again the PFN lock, MiResolveProtoPteFault unlocked it */
-        OldIrql = KeAcquireQueuedSpinLock(LockQueuePfnLock);
+        OldIrql = MiAcquirePfnLock();
 
         /* And re-read the proto PTE */
         TempPte = *PointerProtoPte;
@@ -1236,7 +1236,7 @@ MiResolveProtoPteFault(IN BOOLEAN StoreInstruction,
         MI_WRITE_VALID_PTE(PointerPte, PteContents);
 
         /* The caller expects us to release the PFN lock */
-        KeReleaseQueuedSpinLock(LockQueuePfnLock, OldIrql);
+        MiReleasePfnLock(OldIrql);
         return Status;
     }
 
@@ -1330,7 +1330,7 @@ MiDispatchFault(IN BOOLEAN StoreInstruction,
         if (Address >= MmSystemRangeStart)
         {
             /* Lock the PFN database */
-            LockIrql = KeAcquireQueuedSpinLock(LockQueuePfnLock);
+            LockIrql = MiAcquirePfnLock();
 
             /* Has the PTE been made valid yet? */
             if (!SuperProtoPte->u.Hard.Valid)
@@ -1381,7 +1381,7 @@ MiDispatchFault(IN BOOLEAN StoreInstruction,
             ProcessedPtes = 0;
 
             /* Lock the PFN database */
-            LockIrql = KeAcquireQueuedSpinLock(LockQueuePfnLock);
+            LockIrql = MiAcquirePfnLock();
 
             /* We only handle the valid path */
             ASSERT(SuperProtoPte->u.Hard.Valid == 1);
@@ -1518,14 +1518,14 @@ MiDispatchFault(IN BOOLEAN StoreInstruction,
             {
                 /* We had a locked PFN, so acquire the PFN lock to dereference it */
                 ASSERT(PointerProtoPte != NULL);
-                OldIrql = KeAcquireQueuedSpinLock(LockQueuePfnLock);
+                OldIrql = MiAcquirePfnLock();
 
                 /* Dereference the locked PFN */
                 MiDereferencePfnAndDropLockCount(OutPfn);
                 ASSERT(OutPfn->u3.e2.ReferenceCount >= 1);
 
                 /* And now release the lock */
-                KeReleaseQueuedSpinLock(LockQueuePfnLock, OldIrql);
+                MiReleasePfnLock(OldIrql);
             }
 
             /* Complete this as a transition fault */
@@ -1544,7 +1544,7 @@ MiDispatchFault(IN BOOLEAN StoreInstruction,
         KEVENT CurrentPageEvent;
 
         /* Lock the PFN database */
-        LockIrql = KeAcquireQueuedSpinLock(LockQueuePfnLock);
+        LockIrql = MiAcquirePfnLock();
 
         /* Resolve */
         Status = MiResolveTransitionFault(StoreInstruction, Address, PointerPte, Process, LockIrql, &InPageBlock);
@@ -1560,7 +1560,7 @@ MiDispatchFault(IN BOOLEAN StoreInstruction,
         }
 
         /* And now release the lock and leave*/
-        KeReleaseQueuedSpinLock(LockQueuePfnLock, LockIrql);
+        MiReleasePfnLock(LockIrql);
 
         if (InPageBlock != NULL)
         {
@@ -1583,13 +1583,13 @@ MiDispatchFault(IN BOOLEAN StoreInstruction,
     if (TempPte.u.Soft.PageFileHigh != 0)
     {
         /* Lock the PFN database */
-        LockIrql = KeAcquireQueuedSpinLock(LockQueuePfnLock);
+        LockIrql = MiAcquirePfnLock();
 
         /* Resolve */
         Status = MiResolvePageFileFault(StoreInstruction, Address, PointerPte, Process, &LockIrql);
 
         /* And now release the lock and leave*/
-        KeReleaseQueuedSpinLock(LockQueuePfnLock, LockIrql);
+        MiReleasePfnLock(LockIrql);
 
         ASSERT(OldIrql == KeGetCurrentIrql());
         ASSERT(OldIrql <= APC_LEVEL);
@@ -1777,7 +1777,7 @@ MmArmAccessFault(IN BOOLEAN StoreInstruction,
             if (!IsSessionAddress)
             {
                 /* Check if the PTE is still valid under PFN lock */
-                OldIrql = KeAcquireQueuedSpinLock(LockQueuePfnLock);
+                OldIrql = MiAcquirePfnLock();
                 TempPte = *PointerPte;
                 if (TempPte.u.Hard.Valid)
                 {
@@ -1800,7 +1800,7 @@ MmArmAccessFault(IN BOOLEAN StoreInstruction,
                 }
 
                 /* Release PFN lock and return all good */
-                KeReleaseQueuedSpinLock(LockQueuePfnLock, OldIrql);
+                MiReleasePfnLock(OldIrql);
                 return STATUS_SUCCESS;
             }
         }
@@ -2147,7 +2147,7 @@ UserFault:
                 PFN_NUMBER PageFrameIndex, OldPageFrameIndex;
                 PMMPFN Pfn1;
 
-                LockIrql = KeAcquireQueuedSpinLock(LockQueuePfnLock);
+                LockIrql = MiAcquirePfnLock();
 
                 ASSERT(MmAvailablePages > 0);
 
@@ -2172,7 +2172,7 @@ UserFault:
 
                 MI_WRITE_VALID_PTE(PointerPte, TempPte);
 
-                KeReleaseQueuedSpinLock(LockQueuePfnLock, LockIrql);
+                MiReleasePfnLock(LockIrql);
 
                 /* Return the status */
                 MiUnlockProcessWorkingSet(CurrentProcess, CurrentThread);
@@ -2282,7 +2282,7 @@ UserFault:
             }
 
             /* Lock the PFN database since we're going to grab a page */
-            OldIrql = KeAcquireQueuedSpinLock(LockQueuePfnLock);
+            OldIrql = MiAcquirePfnLock();
 
             /* Make sure we have enough pages */
             ASSERT(MmAvailablePages >= 32);
@@ -2299,20 +2299,20 @@ UserFault:
                 ASSERT(PageFrameIndex);
 
                 /* Release the lock since we need to do some zeroing */
-                KeReleaseQueuedSpinLock(LockQueuePfnLock, OldIrql);
+                MiReleasePfnLock(OldIrql);
 
                 /* Zero out the page, since it's for user-mode */
                 MiZeroPfn(PageFrameIndex);
 
                 /* Grab the lock again so we can initialize the PFN entry */
-                OldIrql = KeAcquireQueuedSpinLock(LockQueuePfnLock);
+                OldIrql = MiAcquirePfnLock();
             }
 
             /* Initialize the PFN entry now */
             MiInitializePfn(PageFrameIndex, PointerPte, 1);
 
             /* And we're done with the lock */
-            KeReleaseQueuedSpinLock(LockQueuePfnLock, OldIrql);
+            MiReleasePfnLock(OldIrql);
 
             /* Increment the count of pages in the process */
             CurrentProcess->NumberOfPrivatePages++;
index 8fc607c..0373fff 100644 (file)
@@ -144,7 +144,7 @@ MiUnlinkFreeOrZeroedPage(IN PMMPFN Entry)
     PMMPFN Pfn1;
 
     /* Make sure the PFN lock is held */
-    ASSERT(KeGetCurrentIrql() == DISPATCH_LEVEL);
+    MI_ASSERT_PFN_LOCK_HELD();
 
     /* Make sure the PFN entry isn't in-use */
     ASSERT(Entry->u3.e1.WriteInProgress == 0);
@@ -267,7 +267,7 @@ MiUnlinkPageFromList(IN PMMPFN Pfn)
     PFN_NUMBER OldFlink, OldBlink;
 
     /* Make sure the PFN lock is held */
-    ASSERT(KeGetCurrentIrql() == DISPATCH_LEVEL);
+    MI_ASSERT_PFN_LOCK_HELD();
 
     /* ARM3 should only call this for dead pages */
     ASSERT(Pfn->u3.e2.ReferenceCount == 0);
@@ -371,7 +371,7 @@ MiRemovePageByColor(IN PFN_NUMBER PageIndex,
     PMMCOLOR_TABLES ColorTable;
 
     /* Make sure PFN lock is held */
-    ASSERT(KeGetCurrentIrql() == DISPATCH_LEVEL);
+    MI_ASSERT_PFN_LOCK_HELD();
     ASSERT(Color < MmSecondaryColors);
 
     /* Get the PFN entry */
@@ -478,7 +478,7 @@ MiRemoveAnyPage(IN ULONG Color)
     PMMPFN Pfn1;
 
     /* Make sure PFN lock is held and we have pages */
-    ASSERT(KeGetCurrentIrql() == DISPATCH_LEVEL);
+    MI_ASSERT_PFN_LOCK_HELD();
     ASSERT(MmAvailablePages != 0);
     ASSERT(Color < MmSecondaryColors);
 
@@ -535,7 +535,7 @@ MiRemoveZeroPage(IN ULONG Color)
     BOOLEAN Zero = FALSE;
 
     /* Make sure PFN lock is held and we have pages */
-    ASSERT(KeGetCurrentIrql() == DISPATCH_LEVEL);
+    MI_ASSERT_PFN_LOCK_HELD();
     ASSERT(MmAvailablePages != 0);
     ASSERT(Color < MmSecondaryColors);
 
@@ -723,7 +723,7 @@ MiInsertStandbyListAtFront(IN PFN_NUMBER PageFrameIndex)
 
     /* Make sure the lock is held */
     DPRINT("Inserting page: %lx into standby list !\n", PageFrameIndex);
-    ASSERT(KeGetCurrentIrql() == DISPATCH_LEVEL);
+    MI_ASSERT_PFN_LOCK_HELD();
 
     /* Make sure the PFN is valid */
     ASSERT((PageFrameIndex != 0) &&
@@ -788,7 +788,7 @@ MiInsertPageInList(IN PMMPFNLIST ListHead,
     ASSERT(ListHead != &MmFreePageListHead);
 
     /* Make sure the lock is held */
-    ASSERT(KeGetCurrentIrql() == DISPATCH_LEVEL);
+    MI_ASSERT_PFN_LOCK_HELD();
 
     /* Make sure the PFN is valid */
     ASSERT((PageFrameIndex) &&
@@ -973,7 +973,7 @@ MiInitializePfn(IN PFN_NUMBER PageFrameIndex,
     PMMPFN Pfn1;
     NTSTATUS Status;
     PMMPTE PointerPtePte;
-    ASSERT(KeGetCurrentIrql() == DISPATCH_LEVEL);
+    MI_ASSERT_PFN_LOCK_HELD();
 
     /* Setup the PTE */
     Pfn1 = MI_PFN_ELEMENT(PageFrameIndex);
@@ -1040,7 +1040,7 @@ MiInitializePfnAndMakePteValid(IN PFN_NUMBER PageFrameIndex,
     PMMPFN Pfn1;
     NTSTATUS Status;
     PMMPTE PointerPtePte;
-    ASSERT(KeGetCurrentIrql() == DISPATCH_LEVEL);
+    MI_ASSERT_PFN_LOCK_HELD();
 
     /* PTE must be invalid */
     ASSERT(PointerPte->u.Hard.Valid == 0);
@@ -1102,13 +1102,13 @@ MiInitializeAndChargePfn(OUT PPFN_NUMBER PageFrameIndex,
     TempPde = SessionAllocation ? ValidKernelPdeLocal : ValidKernelPde;
 
     /* Lock the PFN database */
-    OldIrql = KeAcquireQueuedSpinLock(LockQueuePfnLock);
+    OldIrql = MiAcquirePfnLock();
 
     /* Make sure nobody is racing us */
     if (PointerPde->u.Hard.Valid == 1)
     {
         /* Return special error if that was the case */
-        KeReleaseQueuedSpinLock(LockQueuePfnLock, OldIrql);
+        MiReleasePfnLock(OldIrql);
         return STATUS_RETRY;
     }
 
@@ -1124,7 +1124,7 @@ MiInitializeAndChargePfn(OUT PPFN_NUMBER PageFrameIndex,
     ASSERT(MI_PFN_ELEMENT(*PageFrameIndex)->u1.WsIndex == 0);
 
     /* Release the lock and return success */
-    KeReleaseQueuedSpinLock(LockQueuePfnLock, OldIrql);
+    MiReleasePfnLock(OldIrql);
     return STATUS_SUCCESS;
 }
 
@@ -1186,7 +1186,7 @@ MiDecrementShareCount(IN PMMPFN Pfn1,
         Pfn1->u3.e1.PageLocation = TransitionPage;
 
         /* PFN lock must be held */
-        ASSERT(KeGetCurrentIrql() == DISPATCH_LEVEL);
+        MI_ASSERT_PFN_LOCK_HELD();
 
         if (Pfn1->u3.e2.ReferenceCount == 1)
         {
@@ -1223,7 +1223,7 @@ MiDecrementReferenceCount(IN PMMPFN Pfn1,
                           IN PFN_NUMBER PageFrameIndex)
 {
     /* PFN lock must be held */
-    ASSERT(KeGetCurrentIrql() == DISPATCH_LEVEL);
+    MI_ASSERT_PFN_LOCK_HELD();
 
     /* Sanity checks on the page */
     if (PageFrameIndex > MmHighestPhysicalPage ||
index ce72c16..b47ee26 100644 (file)
@@ -536,7 +536,7 @@ MiAllocatePoolPages(IN POOL_TYPE PoolType,
             //
             // Lock the PFN database and loop pages
             //
-            OldIrql = KeAcquireQueuedSpinLock(LockQueuePfnLock);
+            OldIrql = MiAcquirePfnLock();
             do
             {
                 //
@@ -577,7 +577,7 @@ MiAllocatePoolPages(IN POOL_TYPE PoolType,
             //
             // Release the PFN database lock
             //
-            KeReleaseQueuedSpinLock(LockQueuePfnLock, OldIrql);
+            MiReleasePfnLock(OldIrql);
 
             //
             // These pages are now available, clear their availablity bits
index e415a6e..7522e35 100644 (file)
@@ -203,7 +203,7 @@ MmDeleteKernelStack(IN PVOID StackBase,
                                 MmLargeStackSize : KERNEL_STACK_SIZE);
 
     /* Acquire the PFN lock */
-    OldIrql = KeAcquireQueuedSpinLock(LockQueuePfnLock);
+    OldIrql = MiAcquirePfnLock();
 
     //
     // Loop them
@@ -245,7 +245,7 @@ MmDeleteKernelStack(IN PVOID StackBase,
     ASSERT(PointerPte->u.Hard.Valid == 0);
 
     /* Release the PFN lock */
-    KeReleaseQueuedSpinLock(LockQueuePfnLock, OldIrql);
+    MiReleasePfnLock(OldIrql);
 
     //
     // Release the PTEs
@@ -330,7 +330,7 @@ MmCreateKernelStack(IN BOOLEAN GuiStack,
     //
     // Acquire the PFN DB lock
     //
-    OldIrql = KeAcquireQueuedSpinLock(LockQueuePfnLock);
+    OldIrql = MiAcquirePfnLock();
 
     //
     // Loop each stack page
@@ -359,7 +359,7 @@ MmCreateKernelStack(IN BOOLEAN GuiStack,
     //
     // Release the PFN lock
     //
-    KeReleaseQueuedSpinLock(LockQueuePfnLock, OldIrql);
+    MiReleasePfnLock(OldIrql);
 
     //
     // Return the stack address
@@ -421,7 +421,7 @@ MmGrowKernelStackEx(IN PVOID StackPointer,
     //
     // Acquire the PFN DB lock
     //
-    OldIrql = KeAcquireQueuedSpinLock(LockQueuePfnLock);
+    OldIrql = MiAcquirePfnLock();
 
     //
     // Loop each stack page
@@ -447,7 +447,7 @@ MmGrowKernelStackEx(IN PVOID StackPointer,
     //
     // Release the PFN lock
     //
-    KeReleaseQueuedSpinLock(LockQueuePfnLock, OldIrql);
+    MiReleasePfnLock(OldIrql);
 
     //
     // Set the new limit
@@ -918,7 +918,7 @@ MmInitializeProcessAddressSpace(IN PEPROCESS Process,
     Process->VadRoot.BalancedRoot.u1.Parent = &Process->VadRoot.BalancedRoot;
 
     /* Lock PFN database */
-    OldIrql = KeAcquireQueuedSpinLock(LockQueuePfnLock);
+    OldIrql = MiAcquirePfnLock();
 
     /* Setup the PFN for the PDE base of this process */
 #ifdef _M_AMD64
@@ -957,7 +957,7 @@ MmInitializeProcessAddressSpace(IN PEPROCESS Process,
     ASSERT(Process->PhysicalVadRoot == NULL);
 
     /* Release PFN lock */
-    KeReleaseQueuedSpinLock(LockQueuePfnLock, OldIrql);
+    MiReleasePfnLock(OldIrql);
 
     /* Check if there's a Section Object */
     if (SectionObject)
@@ -1087,7 +1087,7 @@ MmCreateProcessAddressSpace(IN ULONG MinWs,
     KeInitializeSpinLock(&Process->HyperSpaceLock);
 
     /* Lock PFN database */
-    OldIrql = KeAcquireQueuedSpinLock(LockQueuePfnLock);
+    OldIrql = MiAcquirePfnLock();
 
     /* Get a zero page for the PDE, if possible */
     Color = MI_GET_NEXT_PROCESS_COLOR(Process);
@@ -1099,9 +1099,9 @@ MmCreateProcessAddressSpace(IN ULONG MinWs,
         PdeIndex = MiRemoveAnyPage(Color);
 
         /* Zero it outside the PFN lock */
-        KeReleaseQueuedSpinLock(LockQueuePfnLock, OldIrql);
+        MiReleasePfnLock(OldIrql);
         MiZeroPhysicalPage(PdeIndex);
-        OldIrql = KeAcquireQueuedSpinLock(LockQueuePfnLock);
+        OldIrql = MiAcquirePfnLock();
     }
 
     /* Get a zero page for hyperspace, if possible */
@@ -1114,9 +1114,9 @@ MmCreateProcessAddressSpace(IN ULONG MinWs,
         HyperIndex = MiRemoveAnyPage(Color);
 
         /* Zero it outside the PFN lock */
-        KeReleaseQueuedSpinLock(LockQueuePfnLock, OldIrql);
+        MiReleasePfnLock(OldIrql);
         MiZeroPhysicalPage(HyperIndex);
-        OldIrql = KeAcquireQueuedSpinLock(LockQueuePfnLock);
+        OldIrql = MiAcquirePfnLock();
     }
 
     /* Get a zero page for the woring set list, if possible */
@@ -1129,13 +1129,13 @@ MmCreateProcessAddressSpace(IN ULONG MinWs,
         WsListIndex = MiRemoveAnyPage(Color);
 
         /* Zero it outside the PFN lock */
-        KeReleaseQueuedSpinLock(LockQueuePfnLock, OldIrql);
+        MiReleasePfnLock(OldIrql);
         MiZeroPhysicalPage(WsListIndex);
     }
     else
     {
         /* Release the PFN lock */
-        KeReleaseQueuedSpinLock(LockQueuePfnLock, OldIrql);
+        MiReleasePfnLock(OldIrql);
     }
 
     /* Switch to phase 1 initialization */
@@ -1334,7 +1334,7 @@ MmDeleteProcessAddressSpace2(IN PEPROCESS Process)
     //ASSERT(Process->CommitCharge == 0);
 
     /* Acquire the PFN lock */
-    OldIrql = KeAcquireQueuedSpinLock(LockQueuePfnLock);
+    OldIrql = MiAcquirePfnLock();
 
     /* Check for fully initialized process */
     if (Process->AddressSpaceInitialized == 2)
@@ -1378,7 +1378,7 @@ MmDeleteProcessAddressSpace2(IN PEPROCESS Process)
     }
 
     /* Release the PFN lock */
-    KeReleaseQueuedSpinLock(LockQueuePfnLock, OldIrql);
+    MiReleasePfnLock(OldIrql);
 
     /* Drop a reference on the session */
     if (Process->Session) MiReleaseProcessReferenceToSessionDataPage(Process->Session);
index 6b5aadd..c9b5daf 100644 (file)
@@ -499,7 +499,7 @@ MiFillSystemPageDirectory(IN PVOID Base,
     while (PointerPde <= LastPde)
     {
         /* Lock the PFN database */
-        OldIrql = KeAcquireQueuedSpinLock(LockQueuePfnLock);
+        OldIrql = MiAcquirePfnLock();
 
         /* Check if we don't already have this PDE mapped */
         if (SystemMapPde->u.Hard.Valid == 0)
@@ -533,7 +533,7 @@ MiFillSystemPageDirectory(IN PVOID Base,
         }
 
         /* Release the lock and keep going with the next PDE */
-        KeReleaseQueuedSpinLock(LockQueuePfnLock, OldIrql);
+        MiReleasePfnLock(OldIrql);
         SystemMapPde++;
         PointerPde++;
     }
@@ -550,7 +550,7 @@ MiCheckPurgeAndUpMapCount(IN PCONTROL_AREA ControlArea,
     ASSERT(FailIfSystemViews == FALSE);
 
     /* Lock the PFN database */
-    OldIrql = KeAcquireQueuedSpinLock(LockQueuePfnLock);
+    OldIrql = MiAcquirePfnLock();
 
     /* State not yet supported */
     ASSERT(ControlArea->u.Flags.BeingPurged == 0);
@@ -561,7 +561,7 @@ MiCheckPurgeAndUpMapCount(IN PCONTROL_AREA ControlArea,
     ASSERT(ControlArea->NumberOfSectionReferences != 0);
 
     /* Release the PFN lock and return success */
-    KeReleaseQueuedSpinLock(LockQueuePfnLock, OldIrql);
+    MiReleasePfnLock(OldIrql);
     return STATUS_SUCCESS;
 }
 
@@ -633,7 +633,7 @@ MiSegmentDelete(IN PSEGMENT Segment)
     LastPte = PointerPte + Segment->NonExtendedPtes;
 
     /* Lock the PFN database */
-    OldIrql = KeAcquireQueuedSpinLock(LockQueuePfnLock);
+    OldIrql = MiAcquirePfnLock();
 
     /* Check if the master PTE is invalid */
     PteForProto = MiAddressToPte(PointerPte);
@@ -716,7 +716,7 @@ MiSegmentDelete(IN PSEGMENT Segment)
     }
 
     /* Release the PFN lock */
-    KeReleaseQueuedSpinLock(LockQueuePfnLock, OldIrql);
+    MiReleasePfnLock(OldIrql);
 
     /* Free the structures */
     ExFreePool(ControlArea);
@@ -729,7 +729,7 @@ MiCheckControlArea(IN PCONTROL_AREA ControlArea,
                    IN KIRQL OldIrql)
 {
     BOOLEAN DeleteSegment = FALSE;
-    ASSERT(KeGetCurrentIrql() == DISPATCH_LEVEL);
+    MI_ASSERT_PFN_LOCK_HELD();
 
     /* Check if this is the last reference or view */
     if (!(ControlArea->NumberOfMappedViews) &&
@@ -747,7 +747,7 @@ MiCheckControlArea(IN PCONTROL_AREA ControlArea,
     }
 
     /* Release the PFN lock */
-    KeReleaseQueuedSpinLock(LockQueuePfnLock, OldIrql);
+    MiReleasePfnLock(OldIrql);
 
     /* Delete the segment if needed */
     if (DeleteSegment)
@@ -765,7 +765,7 @@ MiDereferenceControlArea(IN PCONTROL_AREA ControlArea)
     KIRQL OldIrql;
 
     /* Lock the PFN database */
-    OldIrql = KeAcquireQueuedSpinLock(LockQueuePfnLock);
+    OldIrql = MiAcquirePfnLock();
 
     /* Drop reference counts */
     ControlArea->NumberOfMappedViews--;
@@ -802,7 +802,7 @@ MiRemoveMappedView(IN PEPROCESS CurrentProcess,
     MiUnlockProcessWorkingSetUnsafe(CurrentProcess, CurrentThread);
 
     /* Lock the PFN database */
-    OldIrql = KeAcquireQueuedSpinLock(LockQueuePfnLock);
+    OldIrql = MiAcquirePfnLock();
 
     /* Remove references */
     ControlArea->NumberOfMappedViews--;
@@ -993,7 +993,7 @@ _WARN("MiSessionCommitPageTables halfplemented for amd64")
             ASSERT(MmAvailablePages >= 32);
 
             /* Acquire the PFN lock and grab a zero page */
-            OldIrql = KeAcquireQueuedSpinLock(LockQueuePfnLock);
+            OldIrql = MiAcquirePfnLock();
             MI_SET_USAGE(MI_USAGE_PAGE_TABLE);
             MI_SET_PROCESS2(PsGetCurrentProcess()->ImageFileName);
             Color = (++MmSessionSpace->Color) & MmSecondaryColorMask;
@@ -1011,7 +1011,7 @@ _WARN("MiSessionCommitPageTables halfplemented for amd64")
                                            MmSessionSpace->SessionPageDirectoryIndex);
 
             /* And now release the lock */
-            KeReleaseQueuedSpinLock(LockQueuePfnLock, OldIrql);
+            MiReleasePfnLock(OldIrql);
 
             /* Get the PFN entry and make sure there's no event for it */
             Pfn1 = MI_PFN_ELEMENT(PageFrameNumber);
@@ -1145,11 +1145,11 @@ MiSetControlAreaSymbolsLoaded(IN PCONTROL_AREA ControlArea)
 
     ASSERT(KeGetCurrentIrql() <= APC_LEVEL);
 
-    OldIrql = KeAcquireQueuedSpinLock(LockQueuePfnLock);
+    OldIrql = MiAcquirePfnLock();
     ControlArea->u.Flags.DebugSymbolsLoaded |= 1;
 
     ASSERT(OldIrql <= APC_LEVEL);
-    KeReleaseQueuedSpinLock(LockQueuePfnLock, OldIrql);
+    MiReleasePfnLock(OldIrql);
     ASSERT(KeGetCurrentIrql() <= APC_LEVEL);
 }
 
@@ -1976,7 +1976,7 @@ MiFlushTbAndCapture(IN PMMVAD FoundVad,
                               PointerPte,
                               ProtectionMask,
                               PreviousPte.u.Hard.PageFrameNumber);
-    OldIrql = KeAcquireQueuedSpinLock(LockQueuePfnLock);
+    OldIrql = MiAcquirePfnLock();
 
     //
     // We don't support I/O mappings in this path yet
@@ -2050,7 +2050,7 @@ MiFlushTbAndCapture(IN PMMVAD FoundVad,
     //
     // Release the PFN lock, we are done
     //
-    KeReleaseQueuedSpinLock(LockQueuePfnLock, OldIrql);
+    MiReleasePfnLock(OldIrql);
 }
 
 //
@@ -2257,7 +2257,7 @@ MiRemoveMappedPtes(IN PVOID BaseAddress,
             PointerPde = MiPteToPde(PointerPte);
 
             /* Lock the PFN database and make sure this isn't a mapped file */
-            OldIrql = KeAcquireQueuedSpinLock(LockQueuePfnLock);
+            OldIrql = MiAcquirePfnLock();
             ASSERT(((Pfn1->u3.e1.PrototypePte) && (Pfn1->OriginalPte.u.Soft.Prototype)) == 0);
 
             /* Mark the page as modified accordingly */
@@ -2287,7 +2287,7 @@ MiRemoveMappedPtes(IN PVOID BaseAddress,
             MiDecrementShareCount(Pfn1, PFN_FROM_PTE(&PteContents));
 
             /* Release the PFN lock */
-            KeReleaseQueuedSpinLock(LockQueuePfnLock, OldIrql);
+            MiReleasePfnLock(OldIrql);
         }
         else
         {
@@ -2317,7 +2317,7 @@ MiRemoveMappedPtes(IN PVOID BaseAddress,
     KeFlushCurrentTb();
 
     /* Acquire the PFN lock */
-    OldIrql = KeAcquireQueuedSpinLock(LockQueuePfnLock);
+    OldIrql = MiAcquirePfnLock();
 
     /* Decrement the accounting counters */
     ControlArea->NumberOfUserReferences--;
@@ -2514,7 +2514,7 @@ MmCreateArm3Section(OUT PVOID *SectionObject,
         }
 
         /* Lock the PFN database while we play with the section pointers */
-        OldIrql = KeAcquireQueuedSpinLock(LockQueuePfnLock);
+        OldIrql = MiAcquirePfnLock();
 
         /* Image-file backed sections are not yet supported */
         ASSERT((AllocationAttributes & SEC_IMAGE) == 0);
@@ -2530,7 +2530,7 @@ MmCreateArm3Section(OUT PVOID *SectionObject,
         File->SectionObjectPointer->DataSectionObject = ControlArea;
 
         /* We can release the PFN lock now */
-        KeReleaseQueuedSpinLock(LockQueuePfnLock, OldIrql);
+        MiReleasePfnLock(OldIrql);
 
         /* We don't support previously-mapped file */
         ASSERT(NewSegment == NULL);
@@ -2548,7 +2548,7 @@ MmCreateArm3Section(OUT PVOID *SectionObject,
         if (!NT_SUCCESS(Status))
         {
             /* Lock the PFN database while we play with the section pointers */
-            OldIrql = KeAcquireQueuedSpinLock(LockQueuePfnLock);
+            OldIrql = MiAcquirePfnLock();
 
             /* Reset the waiting-for-deletion event */
             ASSERT(ControlArea->WaitingForDeletion == NULL);
@@ -2566,7 +2566,7 @@ MmCreateArm3Section(OUT PVOID *SectionObject,
             ControlArea->u.Flags.BeingCreated = FALSE;
 
             /* We can release the PFN lock now */
-            KeReleaseQueuedSpinLock(LockQueuePfnLock, OldIrql);
+            MiReleasePfnLock(OldIrql);
 
             /* Check if we locked and set the IRP */
             if (FileLock)
@@ -2630,7 +2630,7 @@ MmCreateArm3Section(OUT PVOID *SectionObject,
         ASSERT(File != NULL);
 
         /* Acquire the PFN lock while we set control area flags */
-        OldIrql = KeAcquireQueuedSpinLock(LockQueuePfnLock);
+        OldIrql = MiAcquirePfnLock();
 
         /* We don't support this race condition yet, so assume no waiters */
         ASSERT(ControlArea->WaitingForDeletion == NULL);
@@ -2642,7 +2642,7 @@ MmCreateArm3Section(OUT PVOID *SectionObject,
 
         /* Take off the being created flag, and then release the lock */
         ControlArea->u.Flags.BeingCreated = FALSE;
-        KeReleaseQueuedSpinLock(LockQueuePfnLock, OldIrql);
+        MiReleasePfnLock(OldIrql);
     }
 
     /* Check if we locked the file earlier */
@@ -2725,7 +2725,7 @@ MmCreateArm3Section(OUT PVOID *SectionObject,
         if (UserRefIncremented)
         {
             /* Acquire the PFN lock while we change counters */
-            OldIrql = KeAcquireQueuedSpinLock(LockQueuePfnLock);
+            OldIrql = MiAcquirePfnLock();
 
             /* Decrement the accounting counters */
             ControlArea->NumberOfSectionReferences--;
@@ -2795,13 +2795,13 @@ MmCreateArm3Section(OUT PVOID *SectionObject,
     if (ControlArea->u.Flags.BeingCreated == 1)
     {
         /* Acquire the PFN lock while we set control area flags */
-        OldIrql = KeAcquireQueuedSpinLock(LockQueuePfnLock);
+        OldIrql = MiAcquirePfnLock();
 
         /* Take off the being created flag, and then release the lock */
         ControlArea->u.Flags.BeingCreated = 0;
         NewSection->u.Flags.BeingCreated = 0;
 
-        KeReleaseQueuedSpinLock(LockQueuePfnLock, OldIrql);
+        MiReleasePfnLock(OldIrql);
     }
 
     /* Migrate the attribute into a flag */
@@ -3258,7 +3258,7 @@ MiDeleteARM3Section(PVOID ObjectBody)
     }
 
     /* Lock the PFN database */
-    OldIrql = KeAcquireQueuedSpinLock(LockQueuePfnLock);
+    OldIrql = MiAcquirePfnLock();
 
     ASSERT(SectionObject->Segment);
     ASSERT(SectionObject->Segment->ControlArea);
index 2404a88..8760623 100644 (file)
@@ -246,7 +246,7 @@ MiReleaseProcessReferenceToSessionDataPage(IN PMM_SESSION_SPACE SessionGlobal)
     }
 
     /* Loop every data page and drop a reference count */
-    OldIrql = KeAcquireQueuedSpinLock(LockQueuePfnLock);
+    OldIrql = MiAcquirePfnLock();
     for (i = 0; i < MiSessionDataPages; i++)
     {
         /* Sanity check that the page is correct, then decrement it */
@@ -257,7 +257,7 @@ MiReleaseProcessReferenceToSessionDataPage(IN PMM_SESSION_SPACE SessionGlobal)
     }
 
     /* Done playing with pages, release the lock */
-    KeReleaseQueuedSpinLock(LockQueuePfnLock, OldIrql);
+    MiReleasePfnLock(OldIrql);
 
     /* Decrement the number of data pages */
     InterlockedDecrement(&MmSessionDataPages);
@@ -505,7 +505,7 @@ MiSessionInitializeWorkingSetList(VOID)
     /* Initialize the working set lock, and lock the PFN database */
     ExInitializePushLock(&SessionGlobal->Vm.WorkingSetMutex);
     //MmLockPageableSectionByHandle(ExPageLockHandle);
-    OldIrql = KeAcquireQueuedSpinLock(LockQueuePfnLock);
+    OldIrql = MiAcquirePfnLock();
 
     /* Check if we need a page table */
     if (AllocatedPageTable != FALSE)
@@ -520,9 +520,9 @@ MiSessionInitializeWorkingSetList(VOID)
             PageFrameIndex = MiRemoveAnyPage(Color);
 
             /* Zero it outside the PFN lock */
-            KeReleaseQueuedSpinLock(LockQueuePfnLock, OldIrql);
+            MiReleasePfnLock(OldIrql);
             MiZeroPhysicalPage(PageFrameIndex);
-            OldIrql = KeAcquireQueuedSpinLock(LockQueuePfnLock);
+            OldIrql = MiAcquirePfnLock();
         }
 
         /* Write a valid PDE for it */
@@ -552,9 +552,9 @@ MiSessionInitializeWorkingSetList(VOID)
         PageFrameIndex = MiRemoveAnyPage(Color);
 
         /* Zero it outside the PFN lock */
-        KeReleaseQueuedSpinLock(LockQueuePfnLock, OldIrql);
+        MiReleasePfnLock(OldIrql);
         MiZeroPhysicalPage(PageFrameIndex);
-        OldIrql = KeAcquireQueuedSpinLock(LockQueuePfnLock);
+        OldIrql = MiAcquirePfnLock();
     }
 
     /* Write a valid PTE for it */
@@ -566,7 +566,7 @@ MiSessionInitializeWorkingSetList(VOID)
     MiInitializePfnAndMakePteValid(PageFrameIndex, PointerPte, TempPte);
 
     /* Now we can release the PFN database lock */
-    KeReleaseQueuedSpinLock(LockQueuePfnLock, OldIrql);
+    MiReleasePfnLock(OldIrql);
 
     /* Fill out the working set structure */
     MmSessionSpace->Vm.Flags.SessionSpace = 1;
@@ -674,7 +674,7 @@ MiSessionCreateInternal(OUT PULONG SessionId)
     ASSERT(SessionPte != NULL);
 
     /* Acquire the PFN lock while we set everything up */
-    OldIrql = KeAcquireQueuedSpinLock(LockQueuePfnLock);
+    OldIrql = MiAcquirePfnLock();
 
     /* Loop the global PTEs */
     TempPte = ValidKernelPte;
@@ -690,9 +690,9 @@ MiSessionCreateInternal(OUT PULONG SessionId)
             DataPage[i] = MiRemoveAnyPage(Color);
 
             /* Zero it outside the PFN lock */
-            KeReleaseQueuedSpinLock(LockQueuePfnLock, OldIrql);
+            MiReleasePfnLock(OldIrql);
             MiZeroPhysicalPage(DataPage[i]);
-            OldIrql = KeAcquireQueuedSpinLock(LockQueuePfnLock);
+            OldIrql = MiAcquirePfnLock();
         }
 
         /* Fill the PTE out */
@@ -713,9 +713,9 @@ MiSessionCreateInternal(OUT PULONG SessionId)
         SessionPageDirIndex = MiRemoveAnyPage(Color);
 
         /* Zero it outside the PFN lock */
-        KeReleaseQueuedSpinLock(LockQueuePfnLock, OldIrql);
+        MiReleasePfnLock(OldIrql);
         MiZeroPhysicalPage(SessionPageDirIndex);
-        OldIrql = KeAcquireQueuedSpinLock(LockQueuePfnLock);
+        OldIrql = MiAcquirePfnLock();
     }
 
     /* Fill the PTE out */
@@ -755,9 +755,9 @@ MiSessionCreateInternal(OUT PULONG SessionId)
             TagPage[i] = MiRemoveAnyPage(Color);
 
             /* Zero it outside the PFN lock */
-            KeReleaseQueuedSpinLock(LockQueuePfnLock, OldIrql);
+            MiReleasePfnLock(OldIrql);
             MiZeroPhysicalPage(TagPage[i]);
-            OldIrql = KeAcquireQueuedSpinLock(LockQueuePfnLock);
+            OldIrql = MiAcquirePfnLock();
         }
 
         /* Fill the PTE out */
@@ -768,7 +768,7 @@ MiSessionCreateInternal(OUT PULONG SessionId)
     }
 
     /* PTEs have been setup, release the PFN lock */
-    KeReleaseQueuedSpinLock(LockQueuePfnLock, OldIrql);
+    MiReleasePfnLock(OldIrql);
 
     /* Fill out the session space structure now */
     MmSessionSpace->GlobalVirtualAddress = SessionGlobal;
index bb0a5f8..6d40315 100644 (file)
@@ -206,7 +206,7 @@ MmExpandSpecialPool(VOID)
     ULONG i;
     PMMPTE PointerPte;
 
-    ASSERT(KeGetCurrentIrql() == DISPATCH_LEVEL);
+    MI_ASSERT_PFN_LOCK_HELD();
 
     if (MiSpecialPoolExtraCount == 0)
         return STATUS_INSUFFICIENT_RESOURCES;
@@ -292,13 +292,13 @@ MmAllocateSpecialPool(SIZE_T NumberOfBytes, ULONG Tag, POOL_TYPE PoolType, ULONG
     }
 
     /* Lock PFN database */
-    Irql = KeAcquireQueuedSpinLock(LockQueuePfnLock);
+    Irql = MiAcquirePfnLock();
 
     /* Reject allocation in case amount of available pages is too small */
     if (MmAvailablePages < 0x100)
     {
         /* Release the PFN database lock */
-        KeReleaseQueuedSpinLock(LockQueuePfnLock, Irql);
+        MiReleasePfnLock(Irql);
         DPRINT1("Special pool: MmAvailablePages 0x%x is too small\n", MmAvailablePages);
         return NULL;
     }
@@ -311,7 +311,7 @@ MmAllocateSpecialPool(SIZE_T NumberOfBytes, ULONG Tag, POOL_TYPE PoolType, ULONG
         {
             /* No reserves left, reject this allocation */
             static int once;
-            KeReleaseQueuedSpinLock(LockQueuePfnLock, Irql);
+            MiReleasePfnLock(Irql);
             if (!once++) DPRINT1("Special pool: No PTEs left!\n");
             return NULL;
         }
@@ -344,7 +344,7 @@ MmAllocateSpecialPool(SIZE_T NumberOfBytes, ULONG Tag, POOL_TYPE PoolType, ULONG
     MiInitializePfnAndMakePteValid(PageFrameNumber, PointerPte, TempPte);
 
     /* Release the PFN database lock */
-    KeReleaseQueuedSpinLock(LockQueuePfnLock, Irql);
+    MiReleasePfnLock(Irql);
 
     /* Increase page counter */
     PagesInUse = InterlockedIncrementUL(&MmSpecialPagesInUse);
@@ -601,7 +601,7 @@ MmFreeSpecialPool(PVOID P)
         InterlockedDecrementUL(&MiSpecialPagesNonPaged);
 
         /* Lock PFN database */
-        Irql = KeAcquireQueuedSpinLock(LockQueuePfnLock);
+        Irql = MiAcquirePfnLock();
 
         /* Delete this PFN */
         MI_SET_PFN_DELETED(Pfn);
@@ -624,7 +624,7 @@ MmFreeSpecialPool(PVOID P)
         InterlockedDecrementUL(&MiSpecialPagesPagable);
 
         /* Lock PFN database */
-        Irql = KeAcquireQueuedSpinLock(LockQueuePfnLock);
+        Irql = MiAcquirePfnLock();
     }
 
     /* Mark next PTE as invalid */
@@ -641,7 +641,7 @@ MmFreeSpecialPool(PVOID P)
     MiSpecialPoolLastPte = PointerPte;
 
     /* Release the PFN database lock */
-    KeReleaseQueuedSpinLock(LockQueuePfnLock, Irql);
+    MiReleasePfnLock(Irql);
 
     /* Update page counter */
     InterlockedDecrementUL(&MmSpecialPagesInUse);
index 0b929f7..4715511 100644 (file)
@@ -176,7 +176,7 @@ MiLoadImageSection(IN OUT PVOID *SectionPtr,
     DPRINT1("Loading: %wZ at %p with %lx pages\n", FileName, DriverBase, PteCount);
 
     /* Lock the PFN database */
-    OldIrql = KeAcquireQueuedSpinLock(LockQueuePfnLock);
+    OldIrql = MiAcquirePfnLock();
 
     /* Loop the new driver PTEs */
     TempPte = ValidKernelPte;
@@ -213,7 +213,7 @@ MiLoadImageSection(IN OUT PVOID *SectionPtr,
     }
 
     /* Release the PFN lock */
-    KeReleaseQueuedSpinLock(LockQueuePfnLock, OldIrql);
+    MiReleasePfnLock(OldIrql);
 
     /* Copy the image */
     RtlCopyMemory(DriverBase, Base, PteCount << PAGE_SHIFT);
index 8f0591d..0e5fe77 100644 (file)
@@ -267,7 +267,7 @@ MiMakeSystemAddressValidPfn(IN PVOID VirtualAddress,
     while (!MmIsAddressValid(VirtualAddress))
     {
         /* Release the PFN database */
-        KeReleaseQueuedSpinLock(LockQueuePfnLock, OldIrql);
+        MiReleasePfnLock(OldIrql);
 
         /* Fault it in */
         Status = MmAccessFault(FALSE, VirtualAddress, KernelMode, NULL);
@@ -285,7 +285,7 @@ MiMakeSystemAddressValidPfn(IN PVOID VirtualAddress,
         LockChange = TRUE;
 
         /* Lock the PFN database */
-        OldIrql = KeAcquireQueuedSpinLock(LockQueuePfnLock);
+        OldIrql = MiAcquirePfnLock();
     }
 
     /* Let caller know what the lock state is */
@@ -337,7 +337,7 @@ MiDeleteSystemPageableVm(IN PMMPTE PointerPte,
                 Pfn2 = MiGetPfnEntry(PageTableIndex);
 
                 /* Lock the PFN database */
-                OldIrql = KeAcquireQueuedSpinLock(LockQueuePfnLock);
+                OldIrql = MiAcquirePfnLock();
 
                 /* Delete it the page */
                 MI_SET_PFN_DELETED(Pfn1);
@@ -347,7 +347,7 @@ MiDeleteSystemPageableVm(IN PMMPTE PointerPte,
                 MiDecrementShareCount(Pfn2, PageTableIndex);
 
                 /* Release the PFN database */
-                KeReleaseQueuedSpinLock(LockQueuePfnLock, OldIrql);
+                MiReleasePfnLock(OldIrql);
 
                 /* Destroy the PTE */
                 MI_ERASE_PTE(PointerPte);
@@ -399,7 +399,7 @@ MiDeletePte(IN PMMPTE PointerPte,
     PMMPDE PointerPde;
 
     /* PFN lock must be held */
-    ASSERT(KeGetCurrentIrql() == DISPATCH_LEVEL);
+    MI_ASSERT_PFN_LOCK_HELD();
 
     /* Capture the PTE */
     TempPte = *PointerPte;
@@ -626,7 +626,7 @@ MiDeleteVirtualAddresses(IN ULONG_PTR Va,
         }
 
         /* Lock the PFN Database while we delete the PTEs */
-        OldIrql = KeAcquireQueuedSpinLock(LockQueuePfnLock);
+        OldIrql = MiAcquirePfnLock();
         do
         {
             /* Capture the PDE and make sure it exists */
@@ -708,7 +708,7 @@ MiDeleteVirtualAddresses(IN ULONG_PTR Va,
         }
 
         /* Release the lock and get out if we're done */
-        KeReleaseQueuedSpinLock(LockQueuePfnLock, OldIrql);
+        MiReleasePfnLock(OldIrql);
         if (Va > EndingAddress) return;
 
         /* Otherwise, we exited because we hit a new PDE boundary, so start over */
@@ -1379,7 +1379,7 @@ MiGetPageProtection(IN PMMPTE PointerPte)
         {
             /* The PTE is valid, so we might need to get the protection from
                the PFN. Lock the PFN database */
-            OldIrql = KeAcquireQueuedSpinLock(LockQueuePfnLock);
+            OldIrql = MiAcquirePfnLock();
 
             /* Check if the PDE is still valid */
             if (MiAddressToPte(PointerPte)->u.Hard.Valid == 0)
@@ -1407,7 +1407,7 @@ MiGetPageProtection(IN PMMPTE PointerPte)
             }
 
             /* Release the PFN database */
-            KeReleaseQueuedSpinLock(LockQueuePfnLock, OldIrql);
+            MiReleasePfnLock(OldIrql);
         }
 
         /* Lock the working set again */
@@ -2301,7 +2301,7 @@ MiProtectVirtualMemory(IN PEPROCESS Process,
                 if ((NewAccessProtection & PAGE_NOACCESS) ||
                     (NewAccessProtection & PAGE_GUARD))
                 {
-                    KIRQL OldIrql = KeAcquireQueuedSpinLock(LockQueuePfnLock);
+                    KIRQL OldIrql = MiAcquirePfnLock();
 
                     /* Mark the PTE as transition and change its protection */
                     PteContents.u.Hard.Valid = 0;
@@ -2318,7 +2318,7 @@ MiProtectVirtualMemory(IN PEPROCESS Process,
                     KeInvalidateTlbEntry(MiPteToAddress(PointerPte));
 
                     /* We are done for this PTE */
-                    KeReleaseQueuedSpinLock(LockQueuePfnLock, OldIrql);
+                    MiReleasePfnLock(OldIrql);
                 }
                 else
                 {
@@ -2459,7 +2459,7 @@ MiProcessValidPteList(IN PMMPTE *ValidPteList,
     //
     // Acquire the PFN lock and loop all the PTEs in the list
     //
-    OldIrql = KeAcquireQueuedSpinLock(LockQueuePfnLock);
+    OldIrql = MiAcquirePfnLock();
     for (i = 0; i != Count; i++)
     {
         //
@@ -2494,7 +2494,7 @@ MiProcessValidPteList(IN PMMPTE *ValidPteList,
     // and then release the PFN lock
     //
     KeFlushCurrentTb();
-    KeReleaseQueuedSpinLock(LockQueuePfnLock, OldIrql);
+    MiReleasePfnLock(OldIrql);
 }
 
 ULONG
index 4b0b9cb..e2b96ca 100644 (file)
@@ -67,7 +67,7 @@ MmZeroPageThread(VOID)
                                  FALSE,
                                  NULL,
                                  NULL);
-        OldIrql = KeAcquireQueuedSpinLock(LockQueuePfnLock);
+        OldIrql = MiAcquirePfnLock();
         MmZeroingPageThreadActive = TRUE;
 
         while (TRUE)
@@ -75,7 +75,7 @@ MmZeroPageThread(VOID)
             if (!MmFreePageListHead.Total)
             {
                 MmZeroingPageThreadActive = FALSE;
-                KeReleaseQueuedSpinLock(LockQueuePfnLock, OldIrql);
+                MiReleasePfnLock(OldIrql);
                 break;
             }
 
@@ -97,14 +97,14 @@ MmZeroPageThread(VOID)
             }
 
             Pfn1->u1.Flink = LIST_HEAD;
-            KeReleaseQueuedSpinLock(LockQueuePfnLock, OldIrql);
+            MiReleasePfnLock(OldIrql);
 
             ZeroAddress = MiMapPagesInZeroSpace(Pfn1, 1);
             ASSERT(ZeroAddress);
             RtlZeroMemory(ZeroAddress, PAGE_SIZE);
             MiUnmapPagesInZeroSpace(ZeroAddress, 1);
 
-            OldIrql = KeAcquireQueuedSpinLock(LockQueuePfnLock);
+            OldIrql = MiAcquirePfnLock();
 
             MiInsertPageInList(&MmZeroedPageListHead, PageIndex);
         }
index 964d488..864302b 100644 (file)
@@ -165,7 +165,7 @@ MiGetPteForProcess(
         TmplPte.u.Flush.Owner = (Address < MmHighestUserAddress) ? 1 : 0;
 
         /* Lock the PFN database */
-        OldIrql = KeAcquireQueuedSpinLock(LockQueuePfnLock);
+        OldIrql = MiAcquirePfnLock();
 
         /* Get the PXE */
         Pte = MiAddressToPxe(Address);
@@ -192,7 +192,7 @@ MiGetPteForProcess(
         }
 
         /* Unlock PFN database */
-        KeReleaseQueuedSpinLock(LockQueuePfnLock, OldIrql);
+        MiReleasePfnLock(OldIrql);
     }
     else
     {
@@ -610,7 +610,7 @@ MmCreateProcessAddressSpace(IN ULONG MinWs,
     KeInitializeSpinLock(&Process->HyperSpaceLock);
 
     /* Lock PFN database */
-    OldIrql = KeAcquireQueuedSpinLock(LockQueuePfnLock);
+    OldIrql = MiAcquirePfnLock();
 
     /* Get a page for the table base and one for hyper space. The PFNs for
        these pages will be initialized in MmInitializeProcessAddressSpace,
@@ -622,7 +622,7 @@ MmCreateProcessAddressSpace(IN ULONG MinWs,
     WorkingSetPfn = MiRemoveAnyPage(MI_GET_NEXT_PROCESS_COLOR(Process));
 
     /* Release PFN lock */
-    KeReleaseQueuedSpinLock(LockQueuePfnLock, OldIrql);
+    MiReleasePfnLock(OldIrql);
 
     /* Zero pages */ /// FIXME:
     MiZeroPhysicalPage(HyperPfn);
index e4b108a..324f3d8 100644 (file)
@@ -357,7 +357,7 @@ MiBalancerThread(PVOID Unused)
                 PEPROCESS Process = PsGetCurrentProcess();
 
                 /* Acquire PFN lock */
-                KIRQL OldIrql = KeAcquireQueuedSpinLock(LockQueuePfnLock);
+                KIRQL OldIrql = MiAcquirePfnLock();
                 PMMPDE pointerPde;
                 for (Address = (ULONG_PTR)MI_LOWEST_VAD_ADDRESS;
                         Address < (ULONG_PTR)MM_HIGHEST_VAD_ADDRESS;
@@ -372,7 +372,7 @@ MiBalancerThread(PVOID Unused)
                     }
                 }
                 /* Release lock */
-                KeReleaseQueuedSpinLock(LockQueuePfnLock, OldIrql);
+                MiReleasePfnLock(OldIrql);
             }
 #endif
             do
@@ -410,7 +410,7 @@ BOOLEAN MmRosNotifyAvailablePage(PFN_NUMBER Page)
     PMMPFN Pfn1;
 
     /* Make sure the PFN lock is held */
-    ASSERT(KeGetCurrentIrql() == DISPATCH_LEVEL);
+    MI_ASSERT_PFN_LOCK_HELD();
 
     if (!MiMinimumAvailablePages)
     {
index 9cff79c..93d9bbd 100644 (file)
@@ -66,9 +66,9 @@ MmGetLRUFirstUserPage(VOID)
     KIRQL OldIrql;
 
     /* Find the first user page */
-    OldIrql = KeAcquireQueuedSpinLock(LockQueuePfnLock);
+    OldIrql = MiAcquirePfnLock();
     Position = RtlFindSetBits(&MiUserPfnBitMap, 1, 0);
-    KeReleaseQueuedSpinLock(LockQueuePfnLock, OldIrql);
+    MiReleasePfnLock(OldIrql);
     if (Position == 0xFFFFFFFF) return 0;
 
     /* Return it */
@@ -87,9 +87,9 @@ MmInsertLRULastUserPage(PFN_NUMBER Pfn)
     ASSERT(Pfn != 0);
     ASSERT_IS_ROS_PFN(MiGetPfnEntry(Pfn));
     ASSERT(!RtlCheckBit(&MiUserPfnBitMap, (ULONG)Pfn));
-    OldIrql = KeAcquireQueuedSpinLock(LockQueuePfnLock);
+    OldIrql = MiAcquirePfnLock();
     RtlSetBit(&MiUserPfnBitMap, (ULONG)Pfn);
-    KeReleaseQueuedSpinLock(LockQueuePfnLock, OldIrql);
+    MiReleasePfnLock(OldIrql);
 }
 
 PFN_NUMBER
@@ -100,9 +100,9 @@ MmGetLRUNextUserPage(PFN_NUMBER PreviousPfn)
     KIRQL OldIrql;
 
     /* Find the next user page */
-    OldIrql = KeAcquireQueuedSpinLock(LockQueuePfnLock);
+    OldIrql = MiAcquirePfnLock();
     Position = RtlFindSetBits(&MiUserPfnBitMap, 1, (ULONG)PreviousPfn + 1);
-    KeReleaseQueuedSpinLock(LockQueuePfnLock, OldIrql);
+    MiReleasePfnLock(OldIrql);
     if (Position == 0xFFFFFFFF) return 0;
 
     /* Return it */
@@ -121,9 +121,9 @@ MmRemoveLRUUserPage(PFN_NUMBER Page)
     ASSERT(Page != 0);
     ASSERT_IS_ROS_PFN(MiGetPfnEntry(Page));
     ASSERT(RtlCheckBit(&MiUserPfnBitMap, (ULONG)Page));
-    OldIrql = KeAcquireQueuedSpinLock(LockQueuePfnLock);
+    OldIrql = MiAcquirePfnLock();
     RtlClearBit(&MiUserPfnBitMap, (ULONG)Page);
-    KeReleaseQueuedSpinLock(LockQueuePfnLock, OldIrql);
+    MiReleasePfnLock(OldIrql);
 }
 
 BOOLEAN
@@ -217,7 +217,7 @@ MiAllocatePagesForMdl(IN PHYSICAL_ADDRESS LowAddress,
     //
     // Lock the PFN database
     //
-    OldIrql = KeAcquireQueuedSpinLock(LockQueuePfnLock);
+    OldIrql = MiAcquirePfnLock();
 
     //
     // Are we looking for any pages, without discriminating?
@@ -332,7 +332,7 @@ MiAllocatePagesForMdl(IN PHYSICAL_ADDRESS LowAddress,
     //
     // Now release the PFN count
     //
-    KeReleaseQueuedSpinLock(LockQueuePfnLock, OldIrql);
+    MiReleasePfnLock(OldIrql);
 
     //
     // We might've found less pages, but not more ;-)
@@ -395,7 +395,7 @@ MmSetRmapListHeadPage(PFN_NUMBER Pfn, PMM_RMAP_ENTRY ListHead)
     KIRQL oldIrql;
     PMMPFN Pfn1;
 
-    oldIrql = KeAcquireQueuedSpinLock(LockQueuePfnLock);
+    oldIrql = MiAcquirePfnLock();
     Pfn1 = MiGetPfnEntry(Pfn);
     ASSERT(Pfn1);
     ASSERT_IS_ROS_PFN(Pfn1);
@@ -419,7 +419,7 @@ MmSetRmapListHeadPage(PFN_NUMBER Pfn, PMM_RMAP_ENTRY ListHead)
         /* ReactOS semantics will now release the page, which will make it free and enter a colored list */
     }
 
-    KeReleaseQueuedSpinLock(LockQueuePfnLock, oldIrql);
+    MiReleasePfnLock(oldIrql);
 }
 
 PMM_RMAP_ENTRY
@@ -431,7 +431,7 @@ MmGetRmapListHeadPage(PFN_NUMBER Pfn)
     PMMPFN Pfn1;
 
     /* Lock PFN database */
-    oldIrql = KeAcquireQueuedSpinLock(LockQueuePfnLock);
+    oldIrql = MiAcquirePfnLock();
 
     /* Get the entry */
     Pfn1 = MiGetPfnEntry(Pfn);
@@ -445,7 +445,7 @@ MmGetRmapListHeadPage(PFN_NUMBER Pfn)
     ASSERT(MiIsPfnInUse(Pfn1) == TRUE);
 
     /* Release PFN database and return rmap list head */
-    KeReleaseQueuedSpinLock(LockQueuePfnLock, oldIrql);
+    MiReleasePfnLock(oldIrql);
     return ListHead;
 }
 
@@ -460,9 +460,9 @@ MmSetSavedSwapEntryPage(PFN_NUMBER Pfn,  SWAPENTRY SwapEntry)
     ASSERT(Pfn1);
     ASSERT_IS_ROS_PFN(Pfn1);
 
-    oldIrql = KeAcquireQueuedSpinLock(LockQueuePfnLock);
+    oldIrql = MiAcquirePfnLock();
     Pfn1->u1.SwapEntry = SwapEntry;
-    KeReleaseQueuedSpinLock(LockQueuePfnLock, oldIrql);
+    MiReleasePfnLock(oldIrql);
 }
 
 SWAPENTRY
@@ -477,9 +477,9 @@ MmGetSavedSwapEntryPage(PFN_NUMBER Pfn)
     ASSERT(Pfn1);
     ASSERT_IS_ROS_PFN(Pfn1);
 
-    oldIrql = KeAcquireQueuedSpinLock(LockQueuePfnLock);
+    oldIrql = MiAcquirePfnLock();
     SwapEntry = Pfn1->u1.SwapEntry;
-    KeReleaseQueuedSpinLock(LockQueuePfnLock, oldIrql);
+    MiReleasePfnLock(oldIrql);
 
     return(SwapEntry);
 }
@@ -492,7 +492,7 @@ MmReferencePage(PFN_NUMBER Pfn)
 
     DPRINT("MmReferencePage(PysicalAddress %x)\n", Pfn << PAGE_SHIFT);
 
-    ASSERT(KeGetCurrentIrql() == DISPATCH_LEVEL);
+    MI_ASSERT_PFN_LOCK_HELD();
     ASSERT(Pfn != 0);
     ASSERT(Pfn <= MmHighestPhysicalPage);
 
@@ -514,14 +514,14 @@ MmGetReferenceCountPage(PFN_NUMBER Pfn)
 
     DPRINT("MmGetReferenceCountPage(PhysicalAddress %x)\n", Pfn << PAGE_SHIFT);
 
-    oldIrql = KeAcquireQueuedSpinLock(LockQueuePfnLock);
+    oldIrql = MiAcquirePfnLock();
     Pfn1 = MiGetPfnEntry(Pfn);
     ASSERT(Pfn1);
     ASSERT_IS_ROS_PFN(Pfn1);
 
     RCount = Pfn1->u3.e2.ReferenceCount;
 
-    KeReleaseQueuedSpinLock(LockQueuePfnLock, oldIrql);
+    MiReleasePfnLock(oldIrql);
     return(RCount);
 }
 
@@ -540,7 +540,7 @@ MmDereferencePage(PFN_NUMBER Pfn)
     KIRQL OldIrql;
     DPRINT("MmDereferencePage(PhysicalAddress %x)\n", Pfn << PAGE_SHIFT);
 
-    OldIrql = KeAcquireQueuedSpinLock(LockQueuePfnLock);
+    OldIrql = MiAcquirePfnLock();
 
     Pfn1 = MiGetPfnEntry(Pfn);
     ASSERT(Pfn1);
@@ -561,7 +561,7 @@ MmDereferencePage(PFN_NUMBER Pfn)
         MiInsertPageInFreeList(Pfn);
     }
 
-    KeReleaseQueuedSpinLock(LockQueuePfnLock, OldIrql);
+    MiReleasePfnLock(OldIrql);
 }
 
 PFN_NUMBER
@@ -572,7 +572,7 @@ MmAllocPage(ULONG Type)
     PMMPFN Pfn1;
     KIRQL OldIrql;
 
-    OldIrql = KeAcquireQueuedSpinLock(LockQueuePfnLock);
+    OldIrql = MiAcquirePfnLock();
 
     PfnOffset = MiRemoveZeroPage(MI_GET_NEXT_COLOR());
     if (!PfnOffset)
@@ -592,7 +592,7 @@ MmAllocPage(ULONG Type)
     Pfn1->u1.SwapEntry = 0;
     Pfn1->RmapListHead = NULL;
 
-    KeReleaseQueuedSpinLock(LockQueuePfnLock, OldIrql);
+    MiReleasePfnLock(OldIrql);
     return PfnOffset;
 }
 
index 12dcc6f..1dc4d61 100644 (file)
@@ -332,12 +332,12 @@ MmFreeMemoryArea(
                 if (MiQueryPageTableReferences((PVOID)Address) == 0)
                 {
                     /* No PTE relies on this PDE. Release it */
-                    KIRQL OldIrql = KeAcquireQueuedSpinLock(LockQueuePfnLock);
+                    KIRQL OldIrql = MiAcquirePfnLock();
                     PMMPDE PointerPde = MiAddressToPde(Address);
                     ASSERT(PointerPde->u.Hard.Valid == 1);
                     MiDeletePte(PointerPde, MiPdeToPte(PointerPde), Process, NULL);
                     ASSERT(PointerPde->u.Hard.Valid == 0);
-                    KeReleaseQueuedSpinLock(LockQueuePfnLock, OldIrql);
+                    MiReleasePfnLock(OldIrql);
                 }
             }
 #endif
@@ -594,7 +594,7 @@ MmDeleteProcessAddressSpace(PEPROCESS Process)
         KeAttachProcess(&Process->Pcb);
 
         /* Acquire PFN lock */
-        OldIrql = KeAcquireQueuedSpinLock(LockQueuePfnLock);
+        OldIrql = MiAcquirePfnLock();
 
         for (Address = MI_LOWEST_VAD_ADDRESS;
                 Address < MM_HIGHEST_VAD_ADDRESS;
@@ -619,7 +619,7 @@ MmDeleteProcessAddressSpace(PEPROCESS Process)
         }
 
         /* Release lock */
-        KeReleaseQueuedSpinLock(LockQueuePfnLock, OldIrql);
+        MiReleasePfnLock(OldIrql);
 
         /* Detach */
         KeDetachProcess();
index 1b679fd..66fa6d2 100644 (file)
@@ -1982,9 +1982,9 @@ MmPageOutSectionView(PMMSUPPORT AddressSpace,
     }
     else
     {
-        OldIrql = KeAcquireQueuedSpinLock(LockQueuePfnLock);
+        OldIrql = MiAcquirePfnLock();
         MmReferencePage(Page);
-        KeReleaseQueuedSpinLock(LockQueuePfnLock, OldIrql);
+        MiReleasePfnLock(OldIrql);
     }
 
     MmDeleteAllRmaps(Page, (PVOID)&Context, MmPageOutDeleteMapping);