From bc391d6e1eecbd1b6f5a1d974467660cf087f700 Mon Sep 17 00:00:00 2001 From: Aiken Harris Date: Tue, 3 Feb 2026 22:32:10 +0100 Subject: [PATCH] Map and zero entire PFN database upfront --- xtoskrnl/mm/amd64/pfn.cc | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/xtoskrnl/mm/amd64/pfn.cc b/xtoskrnl/mm/amd64/pfn.cc index dd00670..96e718a 100644 --- a/xtoskrnl/mm/amd64/pfn.cc +++ b/xtoskrnl/mm/amd64/pfn.cc @@ -47,6 +47,10 @@ MM::Pfn::InitializePfnDatabase(VOID) /* Map the Page Directory and Page Directory Pointer tables for the PFN database */ MM::Pte::MapPPE(MemoryLayout->PfnDatabase, PfnDatabaseEnd, ValidPte); MM::Pte::MapPDE(MemoryLayout->PfnDatabase, PfnDatabaseEnd, ValidPte); + MM::Pte::MapPTE(MemoryLayout->PfnDatabase, PfnDatabaseEnd, ValidPte); + + /* Zero PFN database virtual space */ + RTL::Memory::ZeroMemory(MemoryLayout->PfnDatabase, MemoryLayout->PfnDatabaseSize * MM_PAGE_SIZE); /* Initialize the color tables */ MM::Colors::InitializeColorTables(); @@ -73,11 +77,6 @@ MM::Pfn::InitializePfnDatabase(VOID) Descriptor = &OriginalFreeDescriptor; } - /* Map PFN database entries for this range */ - MM::Pte::MapPTE(&((PMMPFN)MemoryLayout->PfnDatabase)[Descriptor->BasePage], - (PUCHAR)&((PMMPFN)MemoryLayout->PfnDatabase)[Descriptor->BasePage + Descriptor->PageCount] - 1, - ValidPte); - /* Check if the free memory block that was split is being processed */ if(Descriptor == &OriginalFreeDescriptor) {