[ros-diffs] [sir_richard] 55999: [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.

sir_richard at svn.reactos.org sir_richard at svn.reactos.org
Sun Mar 4 17:42:57 UTC 2012


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?rev=55999&r1=55998&r2=55999&view=diff
==============================================================================
--- 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?rev=55999&r1=55998&r2=55999&view=diff
==============================================================================
--- 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 */




More information about the Ros-diffs mailing list