Fix potential preempt guard deadlock

This commit is contained in:
Jeremy Soller
2026-01-20 13:58:31 -07:00
parent 7d42e8d966
commit 81a49d211b
+5 -1
View File
@@ -166,7 +166,11 @@ pub fn switch(token: &mut CleanLockToken) -> SwitchResult {
let prev_context_guard = unsafe { prev_context_lock.write_arc() };
if !prev_context_guard.is_preemptable() {
return SwitchResult::AllContextsIdle;
// Unset global lock
arch::CONTEXT_SWITCH_LOCK.store(false, Ordering::SeqCst);
// Pretend to have finished switching, so CPU is not idled
return SwitchResult::Switched;
}
let idle_context = percpu.switch_internals.idle_context();