Closed candiedoperation closed 3 weeks ago
Commit 3759444 prevents a triple fault by reorganizing fault code to occur after interrupts are completely initialized. Though this prevents the triple fault, the PAGE FAULT exception persists.
That took a long time! The troubleshooting steps above make sense. The Page Table setup and identity mapping stuff in commit 3759444 were really preliminary and allowed virtual memory access only up-to 1024M. However, all IO/APIC addresses are way above that range.
Commit 9aa791d fixes this issue as it introduces a bootstrap memory manager (bootmem.cpp
) and a WIP physical and virtual memory manager. Closing this issue finally (after two months) 🥳
Issue Description
On APIC Initialization, Kernel Crashes when the available memory is above 1024M
Troubleshooting
Apic::Initialize();
atinterrupt.cpp
AcpiDef::GetTableBySignature(ACPI_SIG_MADT, AcpiProvider::Xsdt, &MadtAddr);
u32 SdtEntries = ((Xsdt->Header.Length - sizeof(Xsdt->Header)) / 8);
) that dereferences the required pointers fails and causes a triple faultRsdp->XsdtAddress
usingprintf
statements inacpipvdr.cpp
indicated that the memory address of XSDT when memory < 1024M is0x3fff0030
whereas, when memory > 1024M is0x7fff0030