NTAPI
MmReleasePageMemoryConsumer(ULONG Consumer, PFN_NUMBER Page)
{
+ KIRQL OldIrql;
+
if (Page == 0)
{
DPRINT1("Tried to release page zero.\n");
(void)InterlockedDecrementUL(&MiMemoryConsumers[Consumer].PagesUsed);
+ OldIrql = MiAcquirePfnLock();
+
MmDereferencePage(Page);
+ MiReleasePfnLock(OldIrql);
+
return(STATUS_SUCCESS);
}
MmDereferencePage(PFN_NUMBER Pfn)
{
PMMPFN Pfn1;
- KIRQL OldIrql;
DPRINT("MmDereferencePage(PhysicalAddress %x)\n", Pfn << PAGE_SHIFT);
- OldIrql = MiAcquirePfnLock();
+ MI_ASSERT_PFN_LOCK_HELD();
Pfn1 = MiGetPfnEntry(Pfn);
ASSERT(Pfn1);
DPRINT("Legacy free: %lx\n", Pfn);
MiInsertPageInFreeList(Pfn);
}
-
- MiReleasePfnLock(OldIrql);
}
PFN_NUMBER