[NTOS]: Build paged pool demand-zero PTE with MI_MAKE_SOFTWARE_PTE macro.
authorSir Richard <sir_richard@svn.reactos.org>
Fri, 4 Jun 2010 20:18:27 +0000 (20:18 +0000)
committerSir Richard <sir_richard@svn.reactos.org>
Fri, 4 Jun 2010 20:18:27 +0000 (20:18 +0000)
[NTOS]: Handle paged pool demand-zero fault fulfillment with MI_MAKE_HARDWARE_PTE macro.
[NTOS]: Use MiRemoveAnyPage instead of MmAllocPage, in paged pool demand-zero fault fulfillment.
These changes affect code paths that are not currently in-use.

svn path=/trunk/; revision=47575

reactos/ntoskrnl/mm/ARM3/pagfault.c
reactos/ntoskrnl/mm/ARM3/pool.c

index ceff13b..362a7d5 100644 (file)
@@ -105,11 +105,12 @@ MiResolveDemandZeroFault(IN PVOID Address,
     OldIrql = KeAcquireQueuedSpinLock(LockQueuePfnLock);
     ASSERT(PointerPte->u.Hard.Valid == 0);
     
     OldIrql = KeAcquireQueuedSpinLock(LockQueuePfnLock);
     ASSERT(PointerPte->u.Hard.Valid == 0);
     
-    //
-    // Get a page
-    //
-    PageFrameNumber = MmAllocPage(MC_PPOOL);
-    DPRINT("New pool page: %lx\n", PageFrameNumber);
+    /* Get a page */
+    PageFrameNumber = MiRemoveAnyPage(0);
+    DPRINT1("New pool page: %lx\n", PageFrameNumber);
+    
+    /* Initialize it */
+    MiInitializePfn(PageFrameNumber, PointerPte, TRUE);
     
     //
     // Release PFN lock
     
     //
     // Release PFN lock
@@ -124,11 +125,8 @@ MiResolveDemandZeroFault(IN PVOID Address,
     /* Shouldn't see faults for user PTEs yet */
     ASSERT(PointerPte > MiHighestUserPte);
     
     /* Shouldn't see faults for user PTEs yet */
     ASSERT(PointerPte > MiHighestUserPte);
     
-    //
-    // Build the PTE
-    //
-    TempPte = ValidKernelPte;
-    TempPte.u.Hard.PageFrameNumber = PageFrameNumber;
+    /* Build the PTE */
+    MI_MAKE_HARDWARE_PTE(&TempPte, PointerPte, PointerPte->u.Soft.Protection, PageFrameNumber);
     ASSERT(TempPte.u.Hard.Valid == 1);
     ASSERT(PointerPte->u.Hard.Valid == 0);
     *PointerPte = TempPte;
     ASSERT(TempPte.u.Hard.Valid == 1);
     ASSERT(PointerPte->u.Hard.Valid == 0);
     *PointerPte = TempPte;
@@ -137,7 +135,7 @@ MiResolveDemandZeroFault(IN PVOID Address,
     //
     // It's all good now
     //
     //
     // It's all good now
     //
-    DPRINT("Paged pool page has now been paged in\n");
+    DPRINT1("Paged pool page has now been paged in\n");
     return STATUS_PAGE_FAULT_DEMAND_ZERO;
 }
 
     return STATUS_PAGE_FAULT_DEMAND_ZERO;
 }
 
index 915e407..28cbe2e 100644 (file)
@@ -417,11 +417,9 @@ MiAllocatePoolPages(IN POOL_TYPE PoolType,
         //
         KeFlushEntireTb(TRUE, TRUE);
         
         //
         KeFlushEntireTb(TRUE, TRUE);
         
-        //
-        // Setup a demand-zero writable PTE
-        //
-        TempPte.u.Long = 0;
-        MI_MAKE_WRITE_PAGE(&TempPte);
+        /* Setup a demand-zero writable PTE */
+        DPRINT1("Setting up demand zero\n");
+        MI_MAKE_SOFTWARE_PTE(&TempPte, MM_READWRITE);
         
         //
         // Find the first and last PTE, then loop them all
         
         //
         // Find the first and last PTE, then loop them all