Fix deadlock while acquiring lock on local runqueue

This commit is contained in:
jellllly420
2024-08-28 22:12:23 +08:00
committed by Tate, Hongliang Tian
parent 21a1041d27
commit 59b7a9397f

View File

@ -3,7 +3,6 @@
use ostd::{ use ostd::{
cpu::{num_cpus, CpuSet, PinCurrentCpu}, cpu::{num_cpus, CpuSet, PinCurrentCpu},
task::{ task::{
disable_preempt,
scheduler::{inject_scheduler, EnqueueFlags, LocalRunQueue, Scheduler, UpdateFlags}, scheduler::{inject_scheduler, EnqueueFlags, LocalRunQueue, Scheduler, UpdateFlags},
AtomicCpuId, Priority, Task, AtomicCpuId, Priority, Task,
}, },
@ -46,8 +45,8 @@ impl<T: PreemptSchedInfo> PreemptScheduler<T> {
return cpu_id; return cpu_id;
} }
let preempt_guard = disable_preempt(); let irq_guard = disable_local();
let mut selected = preempt_guard.current_cpu(); let mut selected = irq_guard.current_cpu();
let mut minimum_load = usize::MAX; let mut minimum_load = usize::MAX;
for candidate in runnable.cpu_affinity().iter() { for candidate in runnable.cpu_affinity().iter() {