diff --git a/reactos/ntoskrnl/mm/ARM3/i386/init.c b/reactos/ntoskrnl/mm/ARM3/i386/init.c index 41b15734fb2..47321eaab6e 100644 --- a/reactos/ntoskrnl/mm/ARM3/i386/init.c +++ b/reactos/ntoskrnl/mm/ARM3/i386/init.c @@ -29,6 +29,9 @@ PMEMORY_ALLOCATION_DESCRIPTOR MxFreeDescriptor; MEMORY_ALLOCATION_DESCRIPTOR MxOldFreeDescriptor; +MMPTE ValidKernelPde = {.u.Hard.Valid = 1, .u.Hard.Write = 1, .u.Hard.Dirty = 1, .u.Hard.Accessed = 1}; +MMPTE ValidKernelPte = {.u.Hard.Valid = 1, .u.Hard.Write = 1, .u.Hard.Dirty = 1, .u.Hard.Accessed = 1}; + /* PRIVATE FUNCTIONS **********************************************************/ PFN_NUMBER @@ -70,7 +73,7 @@ MiInitMachineDependent(IN PLOADER_PARAMETER_BLOCK LoaderBlock) ULONG FreePages = 0; PFN_NUMBER PageFrameIndex, PoolPages; PMMPTE StartPde, EndPde, PointerPte, LastPte; - MMPTE TempPde = HyperTemplatePte, TempPte = HyperTemplatePte; + MMPTE TempPde, TempPte; PVOID NonPagedPoolExpansionVa; ULONG OldCount, L2Associativity; PFN_NUMBER FreePage, FreePageCount, PagesLeft, BasePage, PageCount; @@ -97,11 +100,18 @@ MiInitMachineDependent(IN PLOADER_PARAMETER_BLOCK LoaderBlock) if (MmLargeStackSize < KERNEL_STACK_SIZE) MmLargeStackSize = KERNEL_STACK_SIZE; } - // - // The large kernel stack is cutomizable, but use default value for now - // - MmLargeStackSize = KERNEL_LARGE_STACK_SIZE; - + /* Check for global bit */ + if (KeFeatureBits & KF_GLOBAL_PAGE) + { + /* Set it on the template PTE and PDE */ + ValidKernelPte.u.Hard.Global = TRUE; + ValidKernelPde.u.Hard.Global = TRUE; + } + + /* Now templates are ready */ + TempPte = ValidKernelPte; + TempPde = ValidKernelPde; + // // Set CR3 for the system process // diff --git a/reactos/ntoskrnl/mm/i386/page.c b/reactos/ntoskrnl/mm/i386/page.c index 5d5966f0c1f..cb075b0f2fc 100644 --- a/reactos/ntoskrnl/mm/i386/page.c +++ b/reactos/ntoskrnl/mm/i386/page.c @@ -1012,12 +1012,6 @@ MmInitGlobalKernelPageDirectory(VOID) DPRINT("MmInitGlobalKernelPageDirectory()\n"); - // - // Setup template - // - HyperTemplatePte.u.Long = (PA_PRESENT | PA_READWRITE | PA_DIRTY | PA_ACCESSED); - if (Ke386GlobalPagesEnabled) HyperTemplatePte.u.Long |= PA_GLOBAL; - for (i = ADDR_TO_PDE_OFFSET(MmSystemRangeStart); i < 1024; i++) { if (i != ADDR_TO_PDE_OFFSET(PAGETABLE_MAP) &&