[NTOSKRNL]
authorCameron Gutman <aicommander@gmail.com>
Tue, 1 Jun 2010 20:06:53 +0000 (20:06 +0000)
committerCameron Gutman <aicommander@gmail.com>
Tue, 1 Jun 2010 20:06:53 +0000 (20:06 +0000)
- Revert the hack in r47514
- The ASSERT is there to make sure the PFN lock is held
- Fix the issue properly by holding the PFN lock while initializing

svn path=/trunk/; revision=47516

reactos/ntoskrnl/mm/ARM3/pfnlist.c
reactos/ntoskrnl/mm/freelist.c

index 42b090d..29777f6 100644 (file)
@@ -59,7 +59,7 @@ MiInsertInListTail(IN PMMPFNLIST ListHead,
 {
     PFN_NUMBER OldBlink, EntryIndex = MiGetPfnEntryIndex(Entry);
 
-    ASSERT(KeGetCurrentIrql() <= DISPATCH_LEVEL);
+    ASSERT(KeGetCurrentIrql() == DISPATCH_LEVEL);
     ASSERT_LIST_INVARIANT(ListHead);
 
     /* Get the back link */
index b6b9806..afdad86 100644 (file)
@@ -457,12 +457,16 @@ MmInitializePageList(VOID)
     PMEMORY_ALLOCATION_DESCRIPTOR Md;
     PLIST_ENTRY NextEntry;
     ULONG NrSystemPages = 0;
+    KIRQL OldIrql;
 
     /* This is what a used page looks like */
     RtlZeroMemory(&UsedPage, sizeof(UsedPage));
     UsedPage.u3.e1.PageLocation = ActiveAndValid;
     UsedPage.u3.e2.ReferenceCount = 1;
 
+    /* Lock PFN database */
+    OldIrql = KeAcquireQueuedSpinLock(LockQueuePfnLock);
+
     /* Loop the memory descriptors */
     for (NextEntry = KeLoaderBlock->MemoryDescriptorListHead.Flink;
          NextEntry != &KeLoaderBlock->MemoryDescriptorListHead;
@@ -518,6 +522,9 @@ MmInitializePageList(VOID)
         MmPfnDatabase[0][i] = UsedPage;
         NrSystemPages++;
     }
+
+    /* Release the PFN database lock */
+    KeReleaseQueuedSpinLock(LockQueuePfnLock, OldIrql);
     
     KeInitializeEvent(&ZeroPageThreadEvent, NotificationEvent, TRUE);
     DPRINT("Pages: %x %x\n", MmAvailablePages, NrSystemPages);