From ae0f92a0a12039331b7f24dfe1eb217b265c49e6 Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Mon, 27 Jan 2020 12:52:10 +0100 Subject: [PATCH] Kernel: Simplify kernel thread stack allocation We had two identical code paths doing this for some reason. --- Kernel/Thread.cpp | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/Kernel/Thread.cpp b/Kernel/Thread.cpp index 9ba255cb47..11c8a94d26 100644 --- a/Kernel/Thread.cpp +++ b/Kernel/Thread.cpp @@ -114,18 +114,16 @@ Thread::Thread(Process& process) m_tss.cr3 = m_process.page_directory().cr3(); + m_kernel_stack_region = MM.allocate_kernel_region(default_kernel_stack_size, String::format("Kernel Stack (Thread %d)", m_tid), Region::Access::Read | Region::Access::Write, false, true); + m_kernel_stack_region->set_stack(true); + m_kernel_stack_base = m_kernel_stack_region->vaddr().get(); + m_kernel_stack_top = m_kernel_stack_region->vaddr().offset(default_kernel_stack_size).get() & 0xfffffff8u; + if (m_process.is_ring0()) { - m_kernel_stack_region = MM.allocate_kernel_region(default_kernel_stack_size, String::format("Kernel Stack (Thread %d)", m_tid), Region::Access::Read | Region::Access::Write, false, true); - m_kernel_stack_region->set_stack(true); - m_kernel_stack_base = m_kernel_stack_region->vaddr().get(); - m_kernel_stack_top = m_kernel_stack_region->vaddr().offset(default_kernel_stack_size).get() & 0xfffffff8u; m_tss.esp = m_kernel_stack_top; } else { - // Ring3 processes need a separate stack for Ring0. - m_kernel_stack_region = MM.allocate_kernel_region(default_kernel_stack_size, String::format("Kernel Stack (Thread %d)", m_tid), Region::Access::Read | Region::Access::Write, false, true); - m_kernel_stack_region->set_stack(true); - m_kernel_stack_base = m_kernel_stack_region->vaddr().get(); - m_kernel_stack_top = m_kernel_stack_region->vaddr().offset(default_kernel_stack_size).get() & 0xfffffff8u; + // Ring 3 processes get a separate stack for ring 0. + // The ring 3 stack will be assigned by exec(). m_tss.ss0 = 0x10; m_tss.esp0 = m_kernel_stack_top; }