From 2eea074473adc7ce210a970e0232c07082eaf995 Mon Sep 17 00:00:00 2001 From: Bananymous Date: Sat, 10 Jan 2026 01:13:48 +0200 Subject: [PATCH] Kernel: Remove unnecessary page table loads loading a page table is slow as it invalidates the whole tlb --- kernel/kernel/Scheduler.cpp | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/kernel/kernel/Scheduler.cpp b/kernel/kernel/Scheduler.cpp index 8d83215d..b52606d3 100644 --- a/kernel/kernel/Scheduler.cpp +++ b/kernel/kernel/Scheduler.cpp @@ -223,7 +223,8 @@ namespace Kernel { case Thread::State::Terminated: remove_node_from_most_loaded(m_current); - PageTable::kernel().load(); + if (&PageTable::current() != &PageTable::kernel()) + PageTable::kernel().load(); delete m_current->thread; delete m_current; m_thread_count--; @@ -255,7 +256,8 @@ namespace Kernel if (m_current->thread->state() != Thread::State::Terminated) break; remove_node_from_most_loaded(m_current); - PageTable::kernel().load(); + if (&PageTable::current() != &PageTable::kernel()) + PageTable::kernel().load(); delete m_current->thread; delete m_current; m_thread_count--; @@ -263,7 +265,8 @@ namespace Kernel if (m_current == nullptr) { - PageTable::kernel().load(); + if (&PageTable::current() != &PageTable::kernel()) + PageTable::kernel().load(); *interrupt_stack = m_idle_thread->interrupt_stack(); *interrupt_registers = m_idle_thread->interrupt_registers(); m_idle_thread->m_state = Thread::State::Executing; @@ -276,7 +279,8 @@ namespace Kernel auto* thread = m_current->thread; auto& page_table = thread->has_process() ? thread->process().page_table() : PageTable::kernel(); - page_table.load(); + if (&PageTable::current() != &page_table) + page_table.load(); if (thread->state() == Thread::State::NotStarted) {