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