From 3bdd2efbc3843ab2db662e081a6c942459835f26 Mon Sep 17 00:00:00 2001 From: Sir Richard Date: Fri, 19 Feb 2010 22:43:34 +0000 Subject: [PATCH] [NTOS]: Disable support for global pages since it does not seem to work right on real hardware. Additionally, the code had been previously enabling global pages before the variable determining the support for such pages was even enabled, causing non-global pages to be used initially, followed later by global pages once the variable had been setup. To fix this mess, remove all global page support for now. Fixes booting on certain real hardware (or fixes other random memory corruptions). Thanks to Caemyr. svn path=/trunk/; revision=45627 --- reactos/ntoskrnl/include/internal/i386/ke.h | 1 - reactos/ntoskrnl/ke/i386/patpge.c | 8 ++------ reactos/ntoskrnl/mm/ARM3/i386/init.c | 3 ++- reactos/ntoskrnl/mm/i386/page.c | 17 ----------------- 4 files changed, 4 insertions(+), 25 deletions(-) diff --git a/reactos/ntoskrnl/include/internal/i386/ke.h b/reactos/ntoskrnl/include/internal/i386/ke.h index d5869b84d5a..62cc481627e 100644 --- a/reactos/ntoskrnl/include/internal/i386/ke.h +++ b/reactos/ntoskrnl/include/internal/i386/ke.h @@ -439,7 +439,6 @@ extern ULONG KeI386EFlagsOrMaskV86; extern BOOLEAN KeI386VirtualIntExtensions; extern KIDTENTRY KiIdt[MAXIMUM_IDTVECTOR]; extern KDESCRIPTOR KiIdtDescriptor; -extern ULONG Ke386GlobalPagesEnabled; extern BOOLEAN KiI386PentiumLockErrataPresent; extern ULONG KeI386NpxPresent; extern ULONG KeI386XMMIPresent; diff --git a/reactos/ntoskrnl/ke/i386/patpge.c b/reactos/ntoskrnl/ke/i386/patpge.c index ea86e1c45b3..9b6ef4b67c6 100644 --- a/reactos/ntoskrnl/ke/i386/patpge.c +++ b/reactos/ntoskrnl/ke/i386/patpge.c @@ -12,10 +12,6 @@ #define NDEBUG #include -/* GLOBALS *******************************************************************/ - -ULONG Ke386GlobalPagesEnabled; - /* FUNCTIONS *****************************************************************/ ULONG_PTR @@ -46,8 +42,8 @@ Ki386EnableGlobalPage(IN volatile ULONG_PTR Context) __writecr3(Cr3); /* Now enable PGE */ - __writecr4(Cr4 | CR4_PGE); - Ke386GlobalPagesEnabled = TRUE; + DPRINT1("Global page support detected but not yet taken advantage of\n"); + //__writecr4(Cr4 | CR4_PGE); /* Restore interrupts */ _enable(); diff --git a/reactos/ntoskrnl/mm/ARM3/i386/init.c b/reactos/ntoskrnl/mm/ARM3/i386/init.c index bf272b168ee..722b1e612e6 100644 --- a/reactos/ntoskrnl/mm/ARM3/i386/init.c +++ b/reactos/ntoskrnl/mm/ARM3/i386/init.c @@ -175,13 +175,14 @@ MiInitMachineDependent(IN PLOADER_PARAMETER_BLOCK LoaderBlock) } /* Check for global bit */ +#if 0 if (KeFeatureBits & KF_GLOBAL_PAGE) { /* Set it on the template PTE and PDE */ ValidKernelPte.u.Hard.Global = TRUE; ValidKernelPde.u.Hard.Global = TRUE; } - +#endif /* Now templates are ready */ TempPte = ValidKernelPte; TempPde = ValidKernelPde; diff --git a/reactos/ntoskrnl/mm/i386/page.c b/reactos/ntoskrnl/mm/i386/page.c index c9cdf64412e..96a97d969b0 100644 --- a/reactos/ntoskrnl/mm/i386/page.c +++ b/reactos/ntoskrnl/mm/i386/page.c @@ -284,10 +284,6 @@ MmGetPageTableForProcess(PEPROCESS Process, PVOID Address, BOOLEAN Create) KeBugCheck(MEMORY_MANAGEMENT); } Entry = PFN_TO_PTE(Pfn) | PA_PRESENT | PA_READWRITE; - if (Ke386GlobalPagesEnabled) - { - Entry |= PA_GLOBAL; - } if(0 != InterlockedCompareExchangePte(&MmGlobalKernelPageDirectory[PdeOffset], Entry, 0)) { MmReleasePageMemoryConsumer(MC_SYSTEM, Pfn); @@ -758,10 +754,6 @@ MmCreateVirtualMappingUnsafe(PEPROCESS Process, if (Address >= MmSystemRangeStart) { Attributes &= ~PA_USER; - if (Ke386GlobalPagesEnabled) - { - Attributes |= PA_GLOBAL; - } } else { @@ -907,10 +899,6 @@ MmSetPageProtect(PEPROCESS Process, PVOID Address, ULONG flProtect) if (Address >= MmSystemRangeStart) { Attributes &= ~PA_USER; - if (Ke386GlobalPagesEnabled) - { - Attributes |= PA_GLOBAL; - } } else { @@ -1017,11 +1005,6 @@ MmInitGlobalKernelPageDirectory(VOID) 0 == MmGlobalKernelPageDirectory[i] && 0 != CurrentPageDirectory[i]) { MmGlobalKernelPageDirectory[i] = CurrentPageDirectory[i]; - if (Ke386GlobalPagesEnabled) - { - MmGlobalKernelPageDirectory[i] |= PA_GLOBAL; - CurrentPageDirectory[i] |= PA_GLOBAL; - } } } }