mirror of
https://github.com/Mathewnd/Astral.git
synced 2026-10-27 12:48:22 +00:00
fix interrupt disabled bug
This commit is contained in:
@@ -189,13 +189,14 @@ long interrupt_raiseipl(long ipl) {
|
||||
bool interrupt_set(bool status) {
|
||||
arch_interrupt_disable();
|
||||
bool old = current_cpu()->intstatus;
|
||||
current_cpu()->intstatus = status;
|
||||
|
||||
if (status) {
|
||||
if (current_cpu()->isrqueue)
|
||||
DOPENDING_SAVE();
|
||||
arch_interrupt_enable();
|
||||
if (status && current_cpu()->isrqueue) {
|
||||
DOPENDING_SAVE();
|
||||
}
|
||||
|
||||
current_cpu()->intstatus = status;
|
||||
if (status)
|
||||
arch_interrupt_enable();
|
||||
|
||||
return old;
|
||||
}
|
||||
|
||||
@@ -117,10 +117,7 @@ __attribute__((no_caller_saved_registers)) void sched_userspacecheck(context_t *
|
||||
if (&args < (checkargs_t *)current_cpu()->schedulerstack && &args >= (checkargs_t *)((uintptr_t)current_cpu()->schedulerstack - SCHEDULER_STACK_SIZE)) {
|
||||
arch_context_saveandcall(checktrampoline, current_thread()->kernelstacktop, &args);
|
||||
} else {
|
||||
if (userspacecheck(&args)) {
|
||||
// need context switch
|
||||
arch_context_switch(context);
|
||||
}
|
||||
userspacecheck(&args);
|
||||
}
|
||||
|
||||
current_cpu()->intstatus = intstatus;
|
||||
|
||||
Reference in New Issue
Block a user