From 7c10a93d484dd543934b0c4553c5a75eff00b3a5 Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Tue, 14 May 2019 15:36:24 +0200 Subject: [PATCH] Kernel: Make allocate_kernel_region() commit the region automatically. This means that kernel regions will eagerly get physical pages allocated. It would be nice to zero-fill these on demand instead, but that would require a bunch of MemoryManager changes. --- Kernel/Thread.cpp | 10 +++------- Kernel/VM/MemoryManager.cpp | 2 ++ 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/Kernel/Thread.cpp b/Kernel/Thread.cpp index 0e857087ae..9cd4d7e720 100644 --- a/Kernel/Thread.cpp +++ b/Kernel/Thread.cpp @@ -49,8 +49,6 @@ Thread::Thread(Process& process) } 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)); - m_kernel_stack_region->commit(); - m_tss.ss0 = 0x10; m_tss.esp0 = m_kernel_stack_region->laddr().offset(default_kernel_stack_size).get() & 0xfffffff8u; } @@ -352,13 +350,11 @@ ShouldUnblockThread Thread::dispatch_signal(byte signal) #endif if (!m_signal_stack_user_region) { - m_signal_stack_user_region = m_process.allocate_region(LinearAddress(), default_userspace_stack_size, "Signal stack (user)"); + m_signal_stack_user_region = m_process.allocate_region(LinearAddress(), default_userspace_stack_size, String::format("User Signal Stack (Thread %d)", m_tid)); ASSERT(m_signal_stack_user_region); } - if (!m_kernel_stack_for_signal_handler_region) { - m_kernel_stack_for_signal_handler_region = MM.allocate_kernel_region(default_kernel_stack_size, String::format("Kernel Stack (Thread %d)", m_tid)); - m_kernel_stack_for_signal_handler_region->commit(); - } + if (!m_kernel_stack_for_signal_handler_region) + m_kernel_stack_for_signal_handler_region = MM.allocate_kernel_region(default_kernel_stack_size, String::format("Kernel Signal Stack (Thread %d)", m_tid)); m_tss.ss = 0x23; m_tss.esp = m_signal_stack_user_region->laddr().offset(default_userspace_stack_size).get(); m_tss.ss0 = 0x10; diff --git a/Kernel/VM/MemoryManager.cpp b/Kernel/VM/MemoryManager.cpp index 8a59090704..11042961cf 100644 --- a/Kernel/VM/MemoryManager.cpp +++ b/Kernel/VM/MemoryManager.cpp @@ -407,6 +407,8 @@ RetainPtr MemoryManager::allocate_kernel_region(size_t size, String&& na auto region = adopt(*new Region(laddr, size, move(name), true, true, false)); MM.map_region_at_address(*m_kernel_page_directory, *region, laddr, false); + // FIXME: It would be cool if these could zero-fill on demand instead. + region->commit(); return region; }