From f0bda5f466fcb004600afe824ef3fde324749c2b Mon Sep 17 00:00:00 2001 From: Eggert Jung Date: Mon, 16 Feb 2026 22:49:42 +0100 Subject: [PATCH] load cr3 in dispatcher --- kernel/thread/dispatcher.cc | 3 +++ kernel/thread/thread.cc | 2 ++ 2 files changed, 5 insertions(+) diff --git a/kernel/thread/dispatcher.cc b/kernel/thread/dispatcher.cc index caa446f..b6ca7a6 100644 --- a/kernel/thread/dispatcher.cc +++ b/kernel/thread/dispatcher.cc @@ -10,11 +10,13 @@ Dispatcher::Dispatcher() : life(nullptr) {} Thread *Dispatcher::active() const { return life; } +extern four_lvl_paging_t paging_tree; void Dispatcher::go(Thread *first) { assert(active() == nullptr); setActive(first); mytss.sp0 = first->StackPointer.isr; + load_cr3((void*)&paging_tree.l4); first->go(); } @@ -24,6 +26,7 @@ void Dispatcher::dispatch(Thread *next) { if (current != next) { setActive(next); mytss.sp0 = next->StackPointer.isr; + load_cr3((void*)&paging_tree.l4); current->resume(next); } } diff --git a/kernel/thread/thread.cc b/kernel/thread/thread.cc index 72d5ad6..0d2c62f 100644 --- a/kernel/thread/thread.cc +++ b/kernel/thread/thread.cc @@ -69,6 +69,7 @@ void Thread::resume(Thread *next) { .user = 1, .address = (uintptr_t)&next->subtable>>12 }; + load_cr3((void*)&paging_tree.l4); context_switch(&next->context, &context); } @@ -88,6 +89,7 @@ void Thread::go() { .user = 1, .address = (uintptr_t)&subtable>>12 }; + load_cr3((void*)&paging_tree.l4); context_launch(&context); }