Scheduler: Make sure we are in the kernel's address space when resuming a blocked process
This commit is contained in:
parent
a7e4f2bdd2
commit
c68d040484
@ -74,11 +74,7 @@ bool Task::has_died()
|
|||||||
|
|
||||||
void Task::resume_read()
|
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);
|
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()
|
bool Task::is_read_still_blocking()
|
||||||
@ -88,6 +84,9 @@ bool Task::is_read_still_blocking()
|
|||||||
|
|
||||||
void Task::resume()
|
void Task::resume()
|
||||||
{
|
{
|
||||||
|
VMM::switch_back_to_kernel_address_space();
|
||||||
|
VMM::apply_address_space();
|
||||||
|
VMM::switch_to_previous_user_address_space();
|
||||||
switch (block_reason)
|
switch (block_reason)
|
||||||
{
|
{
|
||||||
case BlockReason::None: ASSERT(false);
|
case BlockReason::None: ASSERT(false);
|
||||||
@ -96,6 +95,7 @@ void Task::resume()
|
|||||||
|
|
||||||
default: ASSERT(false);
|
default: ASSERT(false);
|
||||||
}
|
}
|
||||||
|
VMM::apply_address_space();
|
||||||
block_reason = BlockReason::None;
|
block_reason = BlockReason::None;
|
||||||
state = Running;
|
state = Running;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user