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
+6 -5
View File
@@ -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;
}
+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)) {
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;