Move PFN database size tracking to memory layout
This commit is contained in:
@@ -21,7 +21,6 @@ VOID
|
||||
MM::Manager::InitializeMemoryLayout(VOID)
|
||||
{
|
||||
ULONG_PTR PagedPoolSize, PteCount;
|
||||
PFN_NUMBER PfnDatabaseSize;
|
||||
ULONG PtesPerPage;
|
||||
|
||||
/* Get the number of PTEs per page and calculate size of paged pool (at least 32MiB) */
|
||||
@@ -30,7 +29,7 @@ MM::Manager::InitializeMemoryLayout(VOID)
|
||||
PagedPoolSize = PteCount * PtesPerPage * MM_PAGE_SIZE;
|
||||
|
||||
/* Retrieve the PFN database size */
|
||||
PfnDatabaseSize = MM::Pfn::GetPfnDatabaseSize();
|
||||
MM::Pfn::GetPfnDatabaseSize(&MemoryLayout.PfnDatabaseSize);
|
||||
|
||||
/* Define the number of system PTEs */
|
||||
NumberOfSystemPtes = MM_DEFAULT_NUMBER_SYSTEM_PTES;
|
||||
@@ -43,7 +42,7 @@ MM::Manager::InitializeMemoryLayout(VOID)
|
||||
MemoryLayout.SelfMapAddress = (PVOID)MM_P5E_LA57_BASE;
|
||||
|
||||
/* Define the non-paged and paged pool regions */
|
||||
MemoryLayout.NonPagedPoolStart = (PVOID)((ULONG_PTR)MemoryLayout.PfnDatabase + PfnDatabaseSize * MM_PAGE_SIZE);
|
||||
MemoryLayout.NonPagedPoolStart = (PVOID)((ULONG_PTR)MemoryLayout.PfnDatabase + MemoryLayout.PfnDatabaseSize * MM_PAGE_SIZE);
|
||||
MemoryLayout.NonPagedPoolEnd = (PVOID)0xFFFEFFFFFFBFFFFFULL;
|
||||
MemoryLayout.PagedPoolStart = (PVOID)0xFFFEF8A000000000ULL;
|
||||
MemoryLayout.PagedPoolEnd = (PVOID)(((ULONG_PTR)MemoryLayout.PagedPoolStart + PagedPoolSize) - 1);
|
||||
@@ -60,7 +59,7 @@ MM::Manager::InitializeMemoryLayout(VOID)
|
||||
MemoryLayout.SelfMapAddress = (PVOID)MM_PXE_BASE;
|
||||
|
||||
/* Define the non-paged and paged pool regions */
|
||||
MemoryLayout.NonPagedPoolStart = (PVOID)((ULONG_PTR)MemoryLayout.PfnDatabase + PfnDatabaseSize * MM_PAGE_SIZE);
|
||||
MemoryLayout.NonPagedPoolStart = (PVOID)((ULONG_PTR)MemoryLayout.PfnDatabase + MemoryLayout.PfnDatabaseSize * MM_PAGE_SIZE);
|
||||
MemoryLayout.NonPagedPoolEnd = (PVOID)0xFFFFFFFFFFBFFFFFULL;
|
||||
MemoryLayout.PagedPoolStart = (PVOID)0xFFFFF8A000000000ULL;
|
||||
MemoryLayout.PagedPoolEnd = (PVOID)(((ULONG_PTR)MemoryLayout.PagedPoolStart + PagedPoolSize) - 1);
|
||||
|
||||
@@ -40,7 +40,7 @@ MM::Pfn::InitializePfnDatabase(VOID)
|
||||
MemoryLayout = MM::Manager::GetMemoryLayout();
|
||||
|
||||
/* Get the PFN database size and calculate the end of the PFN database virtual address space */
|
||||
PfnDatabaseEnd = (PUCHAR)MemoryLayout->PfnDatabase + (PfnDatabaseSize * MM_PAGE_SIZE) - 1;
|
||||
PfnDatabaseEnd = (PUCHAR)MemoryLayout->PfnDatabase + (MemoryLayout->PfnDatabaseSize * MM_PAGE_SIZE) - 1;
|
||||
|
||||
/* Get a template PTE for mapping the PFN database pages */
|
||||
ValidPte = MM::Pte::GetValidPte();
|
||||
@@ -88,10 +88,11 @@ MM::Pfn::InitializePfnDatabase(VOID)
|
||||
if(Descriptor == FreeDescriptor)
|
||||
{
|
||||
/* Initialize PFNs for the remaining free memory */
|
||||
ProcessMemoryDescriptor(BasePage + PfnDatabaseSize, PageCount - PfnDatabaseSize, LoaderFree);
|
||||
ProcessMemoryDescriptor(BasePage + MemoryLayout->PfnDatabaseSize,
|
||||
PageCount - MemoryLayout->PfnDatabaseSize, LoaderFree);
|
||||
|
||||
/* Initialize PFNs for the physical pages backing the PFN database */
|
||||
ProcessMemoryDescriptor(BasePage, PfnDatabaseSize, LoaderMemoryData);
|
||||
ProcessMemoryDescriptor(BasePage, MemoryLayout->PfnDatabaseSize, LoaderMemoryData);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user