interrupts: Switch page table in MainInterruptHandler()

This commit is contained in:
EnderIce2 2024-11-18 03:38:24 +02:00
parent 23301b8c1b
commit 21faaf6ea1
Signed by untrusted user who does not match committer: enderice2
GPG Key ID: EACC3AD603BAB4DD

View File

@ -325,6 +325,34 @@ namespace Interrupts
extern "C" nsa void MainInterruptHandler(void *Data)
{
class AutoSwitchPageTable
{
private:
void *Original;
public:
AutoSwitchPageTable()
{
#if defined(a86)
asmv("mov %%cr3, %0" : "=r"(Original));
#endif
if (likely(Original == KernelPageTable))
return;
#if defined(a86)
asmv("mov %0, %%cr3" : : "r"(KernelPageTable));
#endif
}
~AutoSwitchPageTable()
{
if (likely(Original == KernelPageTable))
return;
#if defined(a86)
asmv("mov %0, %%cr3" : : "r"(Original));
#endif
}
} SwitchPageTable;
CPU::TrapFrame *Frame = (CPU::TrapFrame *)Data;
// debug("IRQ%ld", Frame->InterruptNumber - 32);