From c68d040484c89ba121ebdb88ab44b47c7a65999c Mon Sep 17 00:00:00 2001 From: apio Date: Sun, 30 Oct 2022 19:10:46 +0100 Subject: [PATCH] Scheduler: Make sure we are in the kernel's address space when resuming a blocked process --- kernel/src/thread/Task.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/kernel/src/thread/Task.cpp b/kernel/src/thread/Task.cpp index 89da8788..8f6bd230 100644 --- a/kernel/src/thread/Task.cpp +++ b/kernel/src/thread/Task.cpp @@ -74,11 +74,7 @@ bool Task::has_died() void Task::resume_read() { - VMM::switch_back_to_kernel_address_space(); - VMM::apply_address_space(); - VMM::switch_to_previous_user_address_space(); regs.rax = files[blocking_read_info.fd].read(blocking_read_info.size, blocking_read_info.buf); - VMM::apply_address_space(); } bool Task::is_read_still_blocking() @@ -88,6 +84,9 @@ bool Task::is_read_still_blocking() void Task::resume() { + VMM::switch_back_to_kernel_address_space(); + VMM::apply_address_space(); + VMM::switch_to_previous_user_address_space(); switch (block_reason) { case BlockReason::None: ASSERT(false); @@ -96,6 +95,7 @@ void Task::resume() default: ASSERT(false); } + VMM::apply_address_space(); block_reason = BlockReason::None; state = Running; }