From ac342cea5fc48aa1489b4025e9c2a4bba60ba735 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Mon, 26 Jul 2010 23:09:17 +0000 Subject: [PATCH] =?utf8?q?[NTOSKRNL]=20=E2=97=99=20Fix=20MiInitializePageT?= =?utf8?q?able=20=E2=97=99=20Comment=20out=20some=20more=20code=20for=20am?= =?utf8?q?d64?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit svn path=/trunk/; revision=48291 --- reactos/ntoskrnl/mm/ARM3/mminit.c | 3 ++- reactos/ntoskrnl/mm/ARM3/pagfault.c | 6 ++++-- reactos/ntoskrnl/mm/amd64/init.c | 11 ++++++----- 3 files changed, 12 insertions(+), 8 deletions(-) diff --git a/reactos/ntoskrnl/mm/ARM3/mminit.c b/reactos/ntoskrnl/mm/ARM3/mminit.c index ff34e733805..9f9f1b4c974 100644 --- a/reactos/ntoskrnl/mm/ARM3/mminit.c +++ b/reactos/ntoskrnl/mm/ARM3/mminit.c @@ -1593,11 +1593,12 @@ MiBuildPagedPool(VOID) #else /* Do it this way */ // Bla = MmSystemPageDirectory[(PointerPde - (PMMPTE)PDE_BASE) / PDE_COUNT] -#endif + /* Initialize the PFN entry for it */ MiInitializePfnForOtherProcess(PageFrameIndex, PointerPde, MmSystemPageDirectory[(PointerPde - (PMMPTE)PDE_BASE) / PDE_COUNT]); +#endif // // Release the PFN database lock diff --git a/reactos/ntoskrnl/mm/ARM3/pagfault.c b/reactos/ntoskrnl/mm/ARM3/pagfault.c index 9b1de7b7702..2570d790e19 100644 --- a/reactos/ntoskrnl/mm/ARM3/pagfault.c +++ b/reactos/ntoskrnl/mm/ARM3/pagfault.c @@ -99,10 +99,11 @@ MiCheckPdeForPagedPool(IN PVOID Address) // if (PointerPde->u.Hard.Valid == 0) { -#ifndef _M_AMD64 +#ifdef _M_AMD64 + ASSERT(FALSE); +#else /* This seems to be making the assumption that one PDE is one page long */ C_ASSERT(PAGE_SIZE == (PD_COUNT * (sizeof(MMPTE) * PDE_COUNT))); -#endif // // Copy it from our double-mapped system page directory @@ -111,6 +112,7 @@ MiCheckPdeForPagedPool(IN PVOID Address) MmSystemPagePtes[((ULONG_PTR)PointerPde & (PAGE_SIZE - 1)) / sizeof(MMPTE)].u.Long); +#endif } // diff --git a/reactos/ntoskrnl/mm/amd64/init.c b/reactos/ntoskrnl/mm/amd64/init.c index eab7192edfc..29800619a97 100644 --- a/reactos/ntoskrnl/mm/amd64/init.c +++ b/reactos/ntoskrnl/mm/amd64/init.c @@ -373,19 +373,20 @@ MiInitializeSessionSpace(IN PLOADER_PARAMETER_BLOCK LoaderBlock) VOID MiInitializePageTable() { - ULONG64 PageFrameOffset; + ULONG64 PxePhysicalAddress; MMPTE TmplPte, *Pte; + PFN_NUMBER PxePfn; /* HACK: don't use freeldr debug print anymore */ //FrLdrDbgPrint = NoDbgPrint; /* Get current directory base */ - MmSystemPageDirectory[0] = ((PMMPTE)PXE_SELFMAP)->u.Hard.PageFrameNumber; - PageFrameOffset = MmSystemPageDirectory[0] << PAGE_SHIFT; - ASSERT(PageFrameOffset == __readcr3()); + PxePfn = ((PMMPTE)PXE_SELFMAP)->u.Hard.PageFrameNumber; + PxePhysicalAddress = PxePfn << PAGE_SHIFT; + ASSERT(PxePhysicalAddress == __readcr3()); /* Set directory base for the system process */ - PsGetCurrentProcess()->Pcb.DirectoryTableBase[0] = PageFrameOffset; + PsGetCurrentProcess()->Pcb.DirectoryTableBase[0] = PxePhysicalAddress; /* Enable global pages */ __writecr4(__readcr4() | CR4_PGE); -- 2.17.1