Author: tkreuzer
Date: Wed Oct 8 00:30:50 2014
New Revision: 64586
URL:
http://svn.reactos.org/svn/reactos?rev=64586&view=rev
Log:
[NTOSKRNL]
Move acquisition of PFN lock into MmAllocPage and MmDereferencePage
Modified:
trunk/reactos/ntoskrnl/mm/balance.c
trunk/reactos/ntoskrnl/mm/freelist.c
Modified: trunk/reactos/ntoskrnl/mm/balance.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/mm/balance.c?rev=…
==============================================================================
--- trunk/reactos/ntoskrnl/mm/balance.c [iso-8859-1] (original)
+++ trunk/reactos/ntoskrnl/mm/balance.c [iso-8859-1] Wed Oct 8 00:30:50 2014
@@ -98,7 +98,6 @@
{
PMM_ALLOCATION_REQUEST Request;
PLIST_ENTRY Entry;
- KIRQL OldIrql;
if (Page == 0)
{
@@ -112,9 +111,7 @@
(void)InterlockedDecrementUL(&MiMemoryConsumers[Consumer].PagesUsed);
if ((Entry = ExInterlockedRemoveHeadList(&AllocationListHead,
&AllocationListLock)) == NULL)
{
- OldIrql = KeAcquireQueuedSpinLock(LockQueuePfnLock);
MmDereferencePage(Page);
- KeReleaseQueuedSpinLock(LockQueuePfnLock, OldIrql);
}
else
{
@@ -126,9 +123,7 @@
}
else
{
- OldIrql = KeAcquireQueuedSpinLock(LockQueuePfnLock);
MmDereferencePage(Page);
- KeReleaseQueuedSpinLock(LockQueuePfnLock, OldIrql);
}
return(STATUS_SUCCESS);
@@ -259,7 +254,6 @@
{
ULONG PagesUsed;
PFN_NUMBER Page;
- KIRQL OldIrql;
/*
* Make sure we don't exceed our individual target.
@@ -276,9 +270,7 @@
*/
if ((Consumer == MC_SYSTEM) || MiIsBalancerThread())
{
- OldIrql = KeAcquireQueuedSpinLock(LockQueuePfnLock);
Page = MmAllocPage(Consumer);
- KeReleaseQueuedSpinLock(LockQueuePfnLock, OldIrql);
if (Page == 0)
{
KeBugCheck(NO_PAGES_AVAILABLE);
@@ -337,9 +329,7 @@
/*
* Actually allocate the page.
*/
- OldIrql = KeAcquireQueuedSpinLock(LockQueuePfnLock);
Page = MmAllocPage(Consumer);
- KeReleaseQueuedSpinLock(LockQueuePfnLock, OldIrql);
if (Page == 0)
{
KeBugCheck(NO_PAGES_AVAILABLE);
Modified: trunk/reactos/ntoskrnl/mm/freelist.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/mm/freelist.c?rev…
==============================================================================
--- trunk/reactos/ntoskrnl/mm/freelist.c [iso-8859-1] (original)
+++ trunk/reactos/ntoskrnl/mm/freelist.c [iso-8859-1] Wed Oct 8 00:30:50 2014
@@ -532,7 +532,10 @@
MmDereferencePage(PFN_NUMBER Pfn)
{
PMMPFN Pfn1;
+ KIRQL OldIrql;
DPRINT("MmDereferencePage(PhysicalAddress %x)\n", Pfn <<
PAGE_SHIFT);
+
+ OldIrql = KeAcquireQueuedSpinLock(LockQueuePfnLock);
Pfn1 = MiGetPfnEntry(Pfn);
ASSERT(Pfn1);
@@ -552,6 +555,8 @@
DPRINT("Legacy free: %lx\n", Pfn);
MiInsertPageInFreeList(Pfn);
}
+
+ KeReleaseQueuedSpinLock(LockQueuePfnLock, OldIrql);
}
PFN_NUMBER
@@ -560,13 +565,14 @@
{
PFN_NUMBER PfnOffset;
PMMPFN Pfn1;
+ KIRQL OldIrql;
+
+ OldIrql = KeAcquireQueuedSpinLock(LockQueuePfnLock);
PfnOffset = MiRemoveZeroPage(MI_GET_NEXT_COLOR());
-
if (!PfnOffset)
{
- DPRINT1("MmAllocPage(): Out of memory\n");
- return 0;
+ KeBugCheck(NO_PAGES_AVAILABLE);
}
DPRINT("Legacy allocate: %lx\n", PfnOffset);
@@ -581,6 +587,7 @@
Pfn1->u1.SwapEntry = 0;
Pfn1->RmapListHead = NULL;
+ KeReleaseQueuedSpinLock(LockQueuePfnLock, OldIrql);
return PfnOffset;
}