diff --git a/reactos/ntoskrnl/mm/ARM3/pfnlist.c b/reactos/ntoskrnl/mm/ARM3/pfnlist.c index 42b090da557..29777f6990a 100644 --- a/reactos/ntoskrnl/mm/ARM3/pfnlist.c +++ b/reactos/ntoskrnl/mm/ARM3/pfnlist.c @@ -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 */ diff --git a/reactos/ntoskrnl/mm/freelist.c b/reactos/ntoskrnl/mm/freelist.c index b6b9806e4b0..afdad865dfe 100644 --- a/reactos/ntoskrnl/mm/freelist.c +++ b/reactos/ntoskrnl/mm/freelist.c @@ -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);