NTAPI
MmGetRmapListHeadPage(PFN_NUMBER Pfn)
{
- KIRQL oldIrql;
- PMM_RMAP_ENTRY ListHead;
PMMPFN Pfn1;
- /* Lock PFN database */
- oldIrql = MiAcquirePfnLock();
+ /* PFN database must be locked */
+ MI_ASSERT_PFN_LOCK_HELD();
/* Get the entry */
Pfn1 = MiGetPfnEntry(Pfn);
if (!MI_IS_ROS_PFN(Pfn1))
{
- MiReleasePfnLock(oldIrql);
return NULL;
}
- /* Get the list head */
- ListHead = Pfn1->RmapListHead;
-
/* Should not have an RMAP for a non-active page */
ASSERT(MiIsPfnInUse(Pfn1) == TRUE);
- /* Release PFN database and return rmap list head */
- MiReleasePfnLock(oldIrql);
- return ListHead;
+ /* Get the list head */
+ return Pfn1->RmapListHead;
}
VOID
/* We can finally let this page go */
MmDeleteRmap(Page, Process, Address);
+#if DBG
+ OldIrql = MiAcquirePfnLock();
ASSERT(MmGetRmapListHeadPage(Page) == NULL);
+ MiReleasePfnLock(OldIrql);
+#endif
MmReleasePageMemoryConsumer(MC_USER, Page);
if (Address < MmSystemRangeStart)