Initialize system PTEs with arch-specific list terminator
All checks were successful
Builds / ExectOS (amd64, debug) (push) Successful in 36s
Builds / ExectOS (amd64, release) (push) Successful in 35s
Builds / ExectOS (i686, release) (push) Successful in 33s
Builds / ExectOS (i686, debug) (push) Successful in 36s

This commit is contained in:
2026-01-03 21:11:29 +01:00
parent 329143b4f6
commit 5e5b4a8392
6 changed files with 20 additions and 7 deletions

View File

@@ -19,6 +19,7 @@ namespace MM
{ {
private: private:
STATIC MMPTE FirstSystemFreePte[MaximumPtePoolTypes]; STATIC MMPTE FirstSystemFreePte[MaximumPtePoolTypes];
STATIC ULONG_PTR ListTerminator;
STATIC PMMPTE SystemPteBase; STATIC PMMPTE SystemPteBase;
STATIC PMMPTE SystemPtesEnd[MaximumPtePoolTypes]; STATIC PMMPTE SystemPtesEnd[MaximumPtePoolTypes];
STATIC PMMPTE SystemPtesStart[MaximumPtePoolTypes]; STATIC PMMPTE SystemPtesStart[MaximumPtePoolTypes];
@@ -31,7 +32,7 @@ namespace MM
STATIC XTAPI PMMPTE GetSystemPteBaseAddress(VOID); STATIC XTAPI PMMPTE GetSystemPteBaseAddress(VOID);
STATIC XTAPI PMMPTE GetValidPte(VOID); STATIC XTAPI PMMPTE GetValidPte(VOID);
STATIC XTAPI VOID InitializePageTable(VOID); STATIC XTAPI VOID InitializePageTable(VOID);
STATIC XTAPI VOID InitializePteTemplate(VOID); STATIC XTAPI VOID InitializeSystemPte(VOID);
STATIC XTAPI VOID InitializeSystemPteSpace(VOID); STATIC XTAPI VOID InitializeSystemPteSpace(VOID);
STATIC XTAPI VOID MapP5E(PVOID StartAddress, STATIC XTAPI VOID MapP5E(PVOID StartAddress,
PVOID EndAddress, PVOID EndAddress,

View File

@@ -19,6 +19,7 @@ namespace MM
{ {
private: private:
STATIC MMPTE FirstSystemFreePte[MaximumPtePoolTypes]; STATIC MMPTE FirstSystemFreePte[MaximumPtePoolTypes];
STATIC ULONG_PTR ListTerminator;
STATIC PMMPTE SystemPteBase; STATIC PMMPTE SystemPteBase;
STATIC PMMPTE SystemPtesEnd[MaximumPtePoolTypes]; STATIC PMMPTE SystemPtesEnd[MaximumPtePoolTypes];
STATIC PMMPTE SystemPtesStart[MaximumPtePoolTypes]; STATIC PMMPTE SystemPtesStart[MaximumPtePoolTypes];
@@ -31,7 +32,7 @@ namespace MM
STATIC XTAPI PMMPTE GetSystemPteBaseAddress(VOID); STATIC XTAPI PMMPTE GetSystemPteBaseAddress(VOID);
STATIC XTAPI PMMPTE GetValidPte(VOID); STATIC XTAPI PMMPTE GetValidPte(VOID);
STATIC XTAPI VOID InitializePageTable(VOID); STATIC XTAPI VOID InitializePageTable(VOID);
STATIC XTAPI VOID InitializePteTemplate(VOID); STATIC XTAPI VOID InitializeSystemPte(VOID);
STATIC XTAPI VOID InitializeSystemPteSpace(VOID); STATIC XTAPI VOID InitializeSystemPteSpace(VOID);
STATIC XTAPI VOID MapPDE(PVOID StartAddress, STATIC XTAPI VOID MapPDE(PVOID StartAddress,
PVOID EndAddress, PVOID EndAddress,

View File

@@ -154,7 +154,7 @@ MM::Pte::InitializePageTable(VOID)
} }
/** /**
* Initializes the PTE template. * Initializes the system's PTE.
* *
* @return This routine does not return any value. * @return This routine does not return any value.
* *
@@ -162,9 +162,13 @@ MM::Pte::InitializePageTable(VOID)
*/ */
XTAPI XTAPI
VOID VOID
MM::Pte::InitializePteTemplate(VOID) MM::Pte::InitializeSystemPte(VOID)
{ {
/* Initialize the PTE template */
ValidPte = {MM_PTE_VALID|MM_PTE_EXECUTE_READWRITE|MM_PTE_DIRTY|MM_PTE_ACCESSED}; ValidPte = {MM_PTE_VALID|MM_PTE_EXECUTE_READWRITE|MM_PTE_DIRTY|MM_PTE_ACCESSED};
/* Initialize the system's PTE list terminator */
ListTerminator = MM::Paging::GetPteListTerminator();
} }
/** /**

View File

@@ -97,6 +97,9 @@ MMPFNLIST MM::Pfn::ZeroedPagesList = {0, ZeroedPageList, MAXULONG_PTR, MAXULONG_
/* Array of lists for available System PTEs, separated by pool type */ /* Array of lists for available System PTEs, separated by pool type */
MMPTE MM::Pte::FirstSystemFreePte[MaximumPtePoolTypes]; MMPTE MM::Pte::FirstSystemFreePte[MaximumPtePoolTypes];
/* PTE list terminator */
ULONG_PTR MM::Pte::ListTerminator;
/* Virtual base address of the System PTE space */ /* Virtual base address of the System PTE space */
PMMPTE MM::Pte::SystemPteBase; PMMPTE MM::Pte::SystemPteBase;

View File

@@ -113,7 +113,7 @@ MM::Pte::InitializePageTable(VOID)
} }
/** /**
* Initializes the PTE template. * Initializes the system's PTE.
* *
* @return This routine does not return any value. * @return This routine does not return any value.
* *
@@ -121,9 +121,13 @@ MM::Pte::InitializePageTable(VOID)
*/ */
XTAPI XTAPI
VOID VOID
MM::Pte::InitializePteTemplate(VOID) MM::Pte::InitializeSystemPte(VOID)
{ {
/* Initialize the PTE template */
ValidPte = {{MM_PTE_VALID|MM_PTE_EXECUTE_READWRITE|MM_PTE_DIRTY|MM_PTE_ACCESSED}}; ValidPte = {{MM_PTE_VALID|MM_PTE_EXECUTE_READWRITE|MM_PTE_DIRTY|MM_PTE_ACCESSED}};
/* Initialize the system's PTE list terminator */
ListTerminator = MM::Paging::GetPteListTerminator();
} }
/** /**

View File

@@ -64,7 +64,7 @@ MM::Manager::InitializeMemoryManager(VOID)
InitializeMemoryLayout(); InitializeMemoryLayout();
/* Initialize PTE template */ /* Initialize PTE template */
MM::Pte::InitializePteTemplate(); MM::Pte::InitializeSystemPte();
/* Initialize page table */ /* Initialize page table */
MM::Pte::InitializePageTable(); MM::Pte::InitializePageTable();