From 2d746512376fa94e8a0de47c5fb8b40bbef0f7be Mon Sep 17 00:00:00 2001 From: Koen Zandberg Date: Tue, 21 Jul 2020 11:27:08 +0200 Subject: [PATCH] sched: Clear context_switch_request after potential idle sleep An interrupt serviced during the idle sleep can re-request a context switch while the scheduler is already going to switch contexts after the idle sleep. Thi sched_context_switch_request should thus be cleared after the idle sleep and not before where it could be modified during the idle sleep and get out of sync. --- core/sched.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/core/sched.c b/core/sched.c index 011171861c..fcfc0173e6 100644 --- a/core/sched.c +++ b/core/sched.c @@ -99,7 +99,6 @@ static void _unschedule(thread_t *active_thread) int __attribute__((used)) sched_run(void) { - sched_context_switch_request = 0; thread_t *active_thread = (thread_t *)sched_active_thread; if (!IS_USED(MODULE_CORE_IDLE_THREAD)) { @@ -115,6 +114,8 @@ int __attribute__((used)) sched_run(void) } } + sched_context_switch_request = 0; + int nextrq = bitarithm_lsb(runqueue_bitcache); thread_t *next_thread = container_of(sched_runqueues[nextrq].next->next, thread_t, rq_entry);