Author: cgutman Date: Tue Nov 29 18:03:09 2011 New Revision: 54539
URL: http://svn.reactos.org/svn/reactos?rev=54539&view=rev Log: [NTOSKRNL] - Revert part of r54530 - Try to rebalance RosMm's pages if we're low on memory in ARM3 - ROS runs with 48 MB RAM again (but setup is very slow due to horrendous paging caused by cache pollution)
Modified: trunk/reactos/ntoskrnl/mm/ARM3/pfnlist.c trunk/reactos/ntoskrnl/mm/balance.c
Modified: trunk/reactos/ntoskrnl/mm/ARM3/pfnlist.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/mm/ARM3/pfnlist.c?... ============================================================================== --- trunk/reactos/ntoskrnl/mm/ARM3/pfnlist.c [iso-8859-1] (original) +++ trunk/reactos/ntoskrnl/mm/ARM3/pfnlist.c [iso-8859-1] Tue Nov 29 18:03:09 2011 @@ -848,16 +848,22 @@
/* Make an empty software PTE */ MI_MAKE_SOFTWARE_PTE(&TempPte, MM_READWRITE); + + /* Check if we're running low on pages */ + if (MmAvailablePages < 128) + { + DPRINT1("Warning, running low on memory: %d pages left\n", MmAvailablePages); + + //MiEnsureAvailablePageOrWait(NULL, OldIrql); + + /* Call RosMm and see if it can release any pages for us */ + MmRebalanceMemoryConsumers(); + + DPRINT1("Rebalance complete: %d pages left\n", MmAvailablePages); + }
/* Lock the PFN database */ OldIrql = KeAcquireQueuedSpinLock(LockQueuePfnLock); - - /* Check if we're running low on pages */ - if (MmAvailablePages < 128) - { - DPRINT1("Warning, running low on memory: %d pages left\n", MmAvailablePages); - //MiEnsureAvailablePageOrWait(NULL, OldIrql); - }
/* Grab a page */ ASSERT_LIST_INVARIANT(&MmFreePageListHead);
Modified: trunk/reactos/ntoskrnl/mm/balance.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/mm/balance.c?rev=5... ============================================================================== --- trunk/reactos/ntoskrnl/mm/balance.c [iso-8859-1] (original) +++ trunk/reactos/ntoskrnl/mm/balance.c [iso-8859-1] Tue Nov 29 18:03:09 2011 @@ -122,6 +122,7 @@ Entry = RemoveHeadList(&AllocationListHead); Request = CONTAINING_RECORD(Entry, MM_ALLOCATION_REQUEST, ListEntry); KeReleaseSpinLock(&AllocationListLock, OldIrql); + if(Consumer == MC_USER) MmRemoveLRUUserPage(Page); MiZeroPhysicalPage(Page); Request->Page = Page; KeSetEvent(&Request->Event, IO_NO_INCREMENT, FALSE); @@ -310,6 +311,7 @@ KeBugCheck(NO_PAGES_AVAILABLE); }
+ if(Consumer == MC_USER) MmInsertLRULastUserPage(Page); *AllocatedPage = Page; (void)InterlockedDecrementUL(&MiPagesRequired);