Kernel: Remove unnecessary page table loads
loading a page table is slow as it invalidates the whole tlb
This commit is contained in:
parent
ed82a18e2a
commit
2eea074473
|
|
@ -223,6 +223,7 @@ namespace Kernel
|
||||||
{
|
{
|
||||||
case Thread::State::Terminated:
|
case Thread::State::Terminated:
|
||||||
remove_node_from_most_loaded(m_current);
|
remove_node_from_most_loaded(m_current);
|
||||||
|
if (&PageTable::current() != &PageTable::kernel())
|
||||||
PageTable::kernel().load();
|
PageTable::kernel().load();
|
||||||
delete m_current->thread;
|
delete m_current->thread;
|
||||||
delete m_current;
|
delete m_current;
|
||||||
|
|
@ -255,6 +256,7 @@ namespace Kernel
|
||||||
if (m_current->thread->state() != Thread::State::Terminated)
|
if (m_current->thread->state() != Thread::State::Terminated)
|
||||||
break;
|
break;
|
||||||
remove_node_from_most_loaded(m_current);
|
remove_node_from_most_loaded(m_current);
|
||||||
|
if (&PageTable::current() != &PageTable::kernel())
|
||||||
PageTable::kernel().load();
|
PageTable::kernel().load();
|
||||||
delete m_current->thread;
|
delete m_current->thread;
|
||||||
delete m_current;
|
delete m_current;
|
||||||
|
|
@ -263,6 +265,7 @@ namespace Kernel
|
||||||
|
|
||||||
if (m_current == nullptr)
|
if (m_current == nullptr)
|
||||||
{
|
{
|
||||||
|
if (&PageTable::current() != &PageTable::kernel())
|
||||||
PageTable::kernel().load();
|
PageTable::kernel().load();
|
||||||
*interrupt_stack = m_idle_thread->interrupt_stack();
|
*interrupt_stack = m_idle_thread->interrupt_stack();
|
||||||
*interrupt_registers = m_idle_thread->interrupt_registers();
|
*interrupt_registers = m_idle_thread->interrupt_registers();
|
||||||
|
|
@ -276,6 +279,7 @@ namespace Kernel
|
||||||
auto* thread = m_current->thread;
|
auto* thread = m_current->thread;
|
||||||
|
|
||||||
auto& page_table = thread->has_process() ? thread->process().page_table() : PageTable::kernel();
|
auto& page_table = thread->has_process() ? thread->process().page_table() : PageTable::kernel();
|
||||||
|
if (&PageTable::current() != &page_table)
|
||||||
page_table.load();
|
page_table.load();
|
||||||
|
|
||||||
if (thread->state() == Thread::State::NotStarted)
|
if (thread->state() == Thread::State::NotStarted)
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue