[ros-diffs] [sir_richard] 47189: [NTOS]: Fix definition of unused MI_MAKE_SOFTWARE_PTE macro. [NTOS]: Correctly setup the PFN entries for freshly allocated paged pool pages. Fixes a problem where the page could've still had stale/garbage data. [NTOS]: Add some extra assertions in the code to catch memory corruption and detect invalid logic. [NTOS]: Fix some typos in the code (comments/whitespace). [NTOS]: Make the dreaded page fault message that breaks paged pool on some systems more verbose for future debugging.

sir_richard at svn.reactos.org sir_richard at svn.reactos.org
Thu May 13 00:47:46 CEST 2010


Author: sir_richard
Date: Thu May 13 00:47:46 2010
New Revision: 47189

URL: http://svn.reactos.org/svn/reactos?rev=47189&view=rev
Log:
[NTOS]: Fix definition of unused MI_MAKE_SOFTWARE_PTE macro.
[NTOS]: Correctly setup the PFN entries for freshly allocated paged pool pages. Fixes a problem where the page could've still had stale/garbage data.
[NTOS]: Add some extra assertions in the code to catch memory corruption and detect invalid logic.
[NTOS]: Fix some typos in the code (comments/whitespace).
[NTOS]: Make the dreaded page fault message that breaks paged pool on some systems more verbose for future debugging.

Modified:
    trunk/reactos/ntoskrnl/mm/ARM3/contmem.c
    trunk/reactos/ntoskrnl/mm/ARM3/miarm.h
    trunk/reactos/ntoskrnl/mm/ARM3/pagfault.c
    trunk/reactos/ntoskrnl/mm/ARM3/pool.c
    trunk/reactos/ntoskrnl/mm/ARM3/procsup.c

Modified: trunk/reactos/ntoskrnl/mm/ARM3/contmem.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/mm/ARM3/contmem.c?rev=47189&r1=47188&r2=47189&view=diff
==============================================================================
--- trunk/reactos/ntoskrnl/mm/ARM3/contmem.c [iso-8859-1] (original)
+++ trunk/reactos/ntoskrnl/mm/ARM3/contmem.c [iso-8859-1] Thu May 13 00:47:46 2010
@@ -491,7 +491,7 @@
     StartPfn = Pfn1;
     Pfn1->u3.e1.StartOfAllocation = 0;
     
-    /* Look the PFNs until we find the one that marks the end of the allocation */
+    /* Loop the PFNs until we find the one that marks the end of the allocation */
     do
     {
         /* Make sure these are the pages we setup in the allocation routine */
@@ -530,14 +530,14 @@
     //
     // Loop all the pages
     //
-    LastPage = PageFrameIndex + PageCount;    
+    LastPage = PageFrameIndex + PageCount;
     do
     {
         //
         // Free each one, and move on
         //
-        MmReleasePageMemoryConsumer(MC_NPPOOL, PageFrameIndex);
-    } while (++PageFrameIndex < LastPage);
+        MmReleasePageMemoryConsumer(MC_NPPOOL, PageFrameIndex++);
+    } while (PageFrameIndex < LastPage);
     
     //
     // Release the PFN lock

Modified: trunk/reactos/ntoskrnl/mm/ARM3/miarm.h
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/mm/ARM3/miarm.h?rev=47189&r1=47188&r2=47189&view=diff
==============================================================================
--- trunk/reactos/ntoskrnl/mm/ARM3/miarm.h [iso-8859-1] (original)
+++ trunk/reactos/ntoskrnl/mm/ARM3/miarm.h [iso-8859-1] Thu May 13 00:47:46 2010
@@ -117,7 +117,7 @@
 //
 // Creates a software PTE with the given protection
 //
-#define MI_MAKE_SOFTWARE_PTE(x)          ((x) << MM_PTE_SOFTWARE_PROTECTION_BITS)
+#define MI_MAKE_SOFTWARE_PTE(p, x)          ((p)->u.Long = (x << MM_PTE_SOFTWARE_PROTECTION_BITS))
 
 //
 // Special values for LoadedImports

Modified: trunk/reactos/ntoskrnl/mm/ARM3/pagfault.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/mm/ARM3/pagfault.c?rev=47189&r1=47188&r2=47189&view=diff
==============================================================================
--- trunk/reactos/ntoskrnl/mm/ARM3/pagfault.c [iso-8859-1] (original)
+++ trunk/reactos/ntoskrnl/mm/ARM3/pagfault.c [iso-8859-1] Thu May 13 00:47:46 2010
@@ -324,7 +324,7 @@
             //
             // This might happen...not sure yet
             //
-            DPRINT1("FAULT ON PAGE TABLES!\n");
+            DPRINT1("FAULT ON PAGE TABLES: %p %lx %lx!\n", Address, *PointerPte, *PointerPde);
             
             //
             // Map in the page table

Modified: trunk/reactos/ntoskrnl/mm/ARM3/pool.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/mm/ARM3/pool.c?rev=47189&r1=47188&r2=47189&view=diff
==============================================================================
--- trunk/reactos/ntoskrnl/mm/ARM3/pool.c [iso-8859-1] (original)
+++ trunk/reactos/ntoskrnl/mm/ARM3/pool.c [iso-8859-1] Thu May 13 00:47:46 2010
@@ -595,14 +595,15 @@
         //
         PageFrameNumber = MmAllocPage(MC_NPPOOL);
         
-        //
-        // Get the PFN entry for it
-        //
+        /* Get the PFN entry for it and fill it out */
         Pfn1 = MiGetPfnEntry(PageFrameNumber);
-        
-        //
-        // Write the PTE for it
-        //
+        Pfn1->u3.e2.ReferenceCount = 1;
+        Pfn1->u2.ShareCount = 1;
+        Pfn1->PteAddress = PointerPte;
+        Pfn1->u3.e1.PageLocation = ActiveAndValid;
+        Pfn1->u4.VerifierAllocation = 0;
+        
+        /* Write the PTE for it */
         TempPte.u.Hard.PageFrameNumber = PageFrameNumber;
         ASSERT(PointerPte->u.Hard.Valid == 0);
         ASSERT(TempPte.u.Hard.Valid == 1);

Modified: trunk/reactos/ntoskrnl/mm/ARM3/procsup.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/mm/ARM3/procsup.c?rev=47189&r1=47188&r2=47189&view=diff
==============================================================================
--- trunk/reactos/ntoskrnl/mm/ARM3/procsup.c [iso-8859-1] (original)
+++ trunk/reactos/ntoskrnl/mm/ARM3/procsup.c [iso-8859-1] Thu May 13 00:47:46 2010
@@ -153,7 +153,6 @@
         // Next PTE
         //
         PointerPte++;
-        ASSERT(PointerPte->u.Hard.Valid == 0);
         
         //
         // Get a page
@@ -164,6 +163,8 @@
         //
         // Write it
         //
+        ASSERT(PointerPte->u.Hard.Valid == 0);
+        ASSERT(TempPte.u.Hard.Valid == 1);
         *PointerPte = TempPte;
     }
 
@@ -243,26 +244,21 @@
     // Acquire the PFN DB lock
     //
     OldIrql = KeAcquireQueuedSpinLock(LockQueuePfnLock);
-    
+
     //
     // Loop each stack page
     //
     while (LimitPte >= NewLimitPte)
     {
-        //
-        // Sanity check
-        //
-        ASSERT(LimitPte->u.Hard.Valid == 0);
-        
         //
         // Get a page
         //
         PageFrameIndex = MmAllocPage(MC_NPPOOL);
         TempPte.u.Hard.PageFrameNumber = PageFrameIndex;
         
-        //
-        // Write it
-        //
+        /* Write the valid PTE */
+        ASSERT(LimitPte->u.Hard.Valid == 0);
+        ASSERT(TempPte.u.Hard.Valid == 1);
         *LimitPte-- = TempPte;
     }
     




More information about the Ros-diffs mailing list