From c84aa086dda3bab134368f96bfef672c318f9f66 Mon Sep 17 00:00:00 2001 From: Matheus Date: Sat, 23 Aug 2025 16:03:10 -0300 Subject: [PATCH] fix interrupt disabled bug --- kernel-src/sys/interrupt.c | 11 ++++++----- kernel-src/sys/scheduler/scheduler.c | 5 +---- 2 files changed, 7 insertions(+), 9 deletions(-) diff --git a/kernel-src/sys/interrupt.c b/kernel-src/sys/interrupt.c index 1812a838..9367d367 100644 --- a/kernel-src/sys/interrupt.c +++ b/kernel-src/sys/interrupt.c @@ -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; } diff --git a/kernel-src/sys/scheduler/scheduler.c b/kernel-src/sys/scheduler/scheduler.c index 8b8fd8a2..a76de5bb 100644 --- a/kernel-src/sys/scheduler/scheduler.c +++ b/kernel-src/sys/scheduler/scheduler.c @@ -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;