fix interrupt disabled bug

This commit is contained in:
Matheus
2025-08-23 16:03:10 -03:00
parent 7a890ac41d
commit c84aa086dd
2 changed files with 7 additions and 9 deletions
+5 -4
View File
@@ -189,13 +189,14 @@ long interrupt_raiseipl(long ipl) {
bool interrupt_set(bool status) { bool interrupt_set(bool status) {
arch_interrupt_disable(); arch_interrupt_disable();
bool old = current_cpu()->intstatus; bool old = current_cpu()->intstatus;
current_cpu()->intstatus = status;
if (status) { if (status && current_cpu()->isrqueue) {
if (current_cpu()->isrqueue)
DOPENDING_SAVE(); DOPENDING_SAVE();
arch_interrupt_enable();
} }
current_cpu()->intstatus = status;
if (status)
arch_interrupt_enable();
return old; return old;
} }
+1 -4
View File
@@ -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)) { 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); arch_context_saveandcall(checktrampoline, current_thread()->kernelstacktop, &args);
} else { } else {
if (userspacecheck(&args)) { userspacecheck(&args);
// need context switch
arch_context_switch(context);
}
} }
current_cpu()->intstatus = intstatus; current_cpu()->intstatus = intstatus;