[NTOS:MM] Do not acquire Pfn lock in MmGetRmapListHead

All callers already hold it
This commit is contained in:
Jérôme Gardou 2021-01-25 09:24:54 +01:00
parent 727e73f253
commit f201b8af78
2 changed files with 8 additions and 11 deletions

View file

@ -426,12 +426,10 @@ PMM_RMAP_ENTRY
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);
@ -439,19 +437,14 @@ MmGetRmapListHeadPage(PFN_NUMBER 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

View file

@ -250,7 +250,11 @@ MmPageOutPhysicalAddress(PFN_NUMBER Page)
/* 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)