summaryrefslogtreecommitdiff
path: root/Kernel/Arch/x86/x86_64/Processor.cpp
diff options
context:
space:
mode:
authorGunnar Beutner <gbeutner@serenityos.org>2021-06-29 02:56:07 +0200
committerAndreas Kling <kling@serenityos.org>2021-06-29 20:03:36 +0200
commitdf9e73de25637c88413b045bf21cd0fec7f72a68 (patch)
tree9057911ad2a71f2c792864a12ef549207b494f87 /Kernel/Arch/x86/x86_64/Processor.cpp
parent811f9d562d87ef7c9d8891c2564f149d805e4f38 (diff)
downloadserenity-df9e73de25637c88413b045bf21cd0fec7f72a68.zip
Kernel: Add x86_64 support for fork()
Diffstat (limited to 'Kernel/Arch/x86/x86_64/Processor.cpp')
-rw-r--r--Kernel/Arch/x86/x86_64/Processor.cpp19
1 files changed, 2 insertions, 17 deletions
diff --git a/Kernel/Arch/x86/x86_64/Processor.cpp b/Kernel/Arch/x86/x86_64/Processor.cpp
index ccf46873b3..acb409b8b8 100644
--- a/Kernel/Arch/x86/x86_64/Processor.cpp
+++ b/Kernel/Arch/x86/x86_64/Processor.cpp
@@ -16,7 +16,6 @@
namespace Kernel {
extern "C" void thread_context_first_enter(void);
-extern "C" void do_assume_context(Thread* thread, u32 flags);
extern "C" void exit_kernel_thread(void);
// clang-format off
@@ -50,6 +49,8 @@ asm(
" movq %rax, %rsp \n" // move stack pointer to what Processor::init_context set up for us
" movq %r12, %rdi \n" // to_thread
" movq %r12, %rsi \n" // from_thread
+" pushq %r12 \n" // to_thread (for thread_context_first_enter)
+" pushq %r12 \n" // from_thread (for thread_context_first_enter)
" movabs $thread_context_first_enter, %r12 \n" // should be same as regs.rip
" pushq %r12 \n"
" jmp enter_thread_context \n"
@@ -238,22 +239,6 @@ void Processor::switch_context(Thread*& from_thread, Thread*& to_thread)
Processor::current().restore_in_critical(to_thread->saved_critical());
}
-void Processor::assume_context(Thread& thread, FlatPtr flags)
-{
- dbgln_if(CONTEXT_SWITCH_DEBUG, "Assume context for thread {} {}", VirtualAddress(&thread), thread);
-
- VERIFY_INTERRUPTS_DISABLED();
- Scheduler::prepare_after_exec();
- // in_critical() should be 2 here. The critical section in Process::exec
- // and then the scheduler lock
- VERIFY(Processor::current().in_critical() == 2);
-
- (void)flags;
- TODO();
-
- VERIFY_NOT_REACHED();
-}
-
UNMAP_AFTER_INIT void Processor::initialize_context_switching(Thread& initial_thread)
{
VERIFY(initial_thread.process().is_kernel_process());