if (PointerPde->u.Hard.Valid == 0)
{
/* This seems to be making the assumption that one PDE is one page long */
- ASSERT(PAGE_SIZE == (PD_COUNT * (sizeof(MMPTE) * PDE_COUNT)));
+ C_ASSERT(PAGE_SIZE == (PD_COUNT * (sizeof(MMPTE) * PDE_COUNT)));
//
// Copy it from our double-mapped system page directory
{
PFN_NUMBER PageFrameNumber;
MMPTE TempPte;
- DPRINT("ARM3 Demand Zero Page Fault Handler for address: %p in process: %p\n",
+ DPRINT1("ARM3 Demand Zero Page Fault Handler for address: %p in process: %p\n",
Address,
Process);
OldIrql = KeAcquireQueuedSpinLock(LockQueuePfnLock);
ASSERT(PointerPte->u.Hard.Valid == 0);
- //
- // Get a page
- //
- PageFrameNumber = MmAllocPage(MC_PPOOL);
+ /* Get a page */
+ PageFrameNumber = MiRemoveAnyPage(0);
DPRINT("New pool page: %lx\n", PageFrameNumber);
+ /* Initialize it */
+ MiInitializePfn(PageFrameNumber, PointerPte, TRUE);
+
//
// Release PFN lock
//
/* 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;
//
// 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