1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-05-30 22:58:12 +00:00

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.
This commit is contained in:
Andreas Kling 2019-05-14 15:36:24 +02:00
parent 7198e35465
commit 7c10a93d48
2 changed files with 5 additions and 7 deletions

View file

@ -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;

View file

@ -407,6 +407,8 @@ RetainPtr<Region> 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;
}