Author: sir_richard Date: Sun Mar 4 17:42:56 2012 New Revision: 55999
URL: http://svn.reactos.org/svn/reactos?rev=55999&view=rev Log: [NTOS]: Drop a reference count to the page table in MiDeleteSystemPageableVm as ARM3 now owns PDEs. This helps out yet again to free a little bit of extra RAM up.
Modified: trunk/reactos/ntoskrnl/mm/ARM3/pagfault.c trunk/reactos/ntoskrnl/mm/ARM3/virtual.c
Modified: trunk/reactos/ntoskrnl/mm/ARM3/pagfault.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/mm/ARM3/pagfault.c... ============================================================================== --- trunk/reactos/ntoskrnl/mm/ARM3/pagfault.c [iso-8859-1] (original) +++ trunk/reactos/ntoskrnl/mm/ARM3/pagfault.c [iso-8859-1] Sun Mar 4 17:42:56 2012 @@ -371,9 +371,10 @@ IN PMMPFN Pfn1) { MMPTE TempPte; - PMMPTE OriginalPte; + PMMPTE OriginalPte, PageTablePte; ULONG_PTR Protection; PFN_NUMBER PageFrameIndex; + PMMPFN Pfn2;
/* Must be called with an valid prototype PTE, with the PFN lock held */ ASSERT(KeGetCurrentIrql() == DISPATCH_LEVEL); @@ -386,7 +387,12 @@ Pfn1 = MiGetPfnEntry(PageFrameIndex); Pfn1->u3.e1.PrototypePte = 1;
- /* FIXME: Increment the share count for the page table */ + /* Increment the share count for the page table */ + // FIXME: This doesn't work because we seem to bump the sharecount to two, and MiDeletePte gets annoyed and ASSERTs. + // This could be beause MiDeletePte is now being called from strange code in Rosmm + PageTablePte = MiAddressToPte(PointerPte); + Pfn2 = MiGetPfnEntry(PageTablePte->u.Hard.PageFrameNumber); + //Pfn2->u2.ShareCount++;
/* Check where we should be getting the protection information from */ if (PointerPte->u.Soft.PageFileHigh == MI_PTE_LOOKUP_NEEDED)
Modified: trunk/reactos/ntoskrnl/mm/ARM3/virtual.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/mm/ARM3/virtual.c?... ============================================================================== --- trunk/reactos/ntoskrnl/mm/ARM3/virtual.c [iso-8859-1] (original) +++ trunk/reactos/ntoskrnl/mm/ARM3/virtual.c [iso-8859-1] Sun Mar 4 17:42:56 2012 @@ -116,8 +116,7 @@ { PFN_COUNT ActualPages = 0; PETHREAD CurrentThread = PsGetCurrentThread(); - PMMPFN Pfn1; - //PMMPFN Pfn2; + PMMPFN Pfn1, Pfn2; PFN_NUMBER PageFrameIndex, PageTableIndex; KIRQL OldIrql; ASSERT(KeGetCurrentIrql() <= APC_LEVEL); @@ -150,7 +149,7 @@
/* Get the page table entry */ PageTableIndex = Pfn1->u4.PteFrame; - //Pfn2 = MiGetPfnEntry(PageTableIndex); + Pfn2 = MiGetPfnEntry(PageTableIndex);
/* Lock the PFN database */ OldIrql = KeAcquireQueuedSpinLock(LockQueuePfnLock); @@ -160,10 +159,7 @@ MiDecrementShareCount(Pfn1, PageFrameIndex);
/* Decrement the page table too */ - DPRINT("FIXME: ARM3 should decrement the pool PDE refcount for: %p\n", PageTableIndex); - #if 0 // ARM3: Dont't trust this yet MiDecrementShareCount(Pfn2, PageTableIndex); - #endif
/* Release the PFN database */ KeReleaseQueuedSpinLock(LockQueuePfnLock, OldIrql); @@ -293,8 +289,7 @@ /* There should only be 1 shared reference count */ ASSERT(Pfn1->u2.ShareCount == 1);
- /* FIXME: Drop the reference on the page table. For now, leak it until RosMM is gone */ - //DPRINT1("Dropping a ref...\n"); + /* Drop the reference on the page table. */ MiDecrementShareCount(MiGetPfnEntry(Pfn1->u4.PteFrame), Pfn1->u4.PteFrame);
/* Mark the PFN for deletion and dereference what should be the last ref */