diff --git a/kernel/src/sched/priority_scheduler.rs b/kernel/src/sched/priority_scheduler.rs index cb73664c2..b3e61317f 100644 --- a/kernel/src/sched/priority_scheduler.rs +++ b/kernel/src/sched/priority_scheduler.rs @@ -88,16 +88,16 @@ impl, U: Sync + Send + CommonSch { fn enqueue(&self, task: Arc, flags: EnqueueFlags) -> Option { let entity = PreemptSchedEntity::new(task); - let mut still_in_rq = false; - let target_cpu = { - let mut cpu_id = self.select_cpu(&entity); - if let Err(task_cpu_id) = entity.task.cpu().set_if_is_none(cpu_id) { - debug_assert!(flags != EnqueueFlags::Spawn); - still_in_rq = true; - cpu_id = task_cpu_id; - } - cpu_id + let (still_in_rq, target_cpu) = { + let selected_cpu_id = self.select_cpu(&entity); + + if let Err(task_cpu_id) = entity.task.cpu().set_if_is_none(selected_cpu_id) { + debug_assert!(flags != EnqueueFlags::Spawn); + (true, task_cpu_id) + } else { + (false, selected_cpu_id) + } }; let mut rq = self.rq[target_cpu.as_usize()].disable_irq().lock(); diff --git a/ostd/src/task/scheduler/fifo_scheduler.rs b/ostd/src/task/scheduler/fifo_scheduler.rs index 78e0c45da..77aae536a 100644 --- a/ostd/src/task/scheduler/fifo_scheduler.rs +++ b/ostd/src/task/scheduler/fifo_scheduler.rs @@ -41,16 +41,15 @@ impl FifoScheduler { impl Scheduler for FifoScheduler { fn enqueue(&self, runnable: Arc, flags: EnqueueFlags) -> Option { - let mut still_in_rq = false; - let target_cpu = { - let mut cpu_id = self.select_cpu(); - if let Err(task_cpu_id) = runnable.cpu().set_if_is_none(cpu_id) { - debug_assert!(flags != EnqueueFlags::Spawn); - still_in_rq = true; - cpu_id = task_cpu_id; - } + let (still_in_rq, target_cpu) = { + let selected_cpu_id = self.select_cpu(); - cpu_id + if let Err(task_cpu_id) = runnable.cpu().set_if_is_none(selected_cpu_id) { + debug_assert!(flags != EnqueueFlags::Spawn); + (true, task_cpu_id) + } else { + (false, selected_cpu_id) + } }; let mut rq = self.rq[target_cpu.as_usize()].disable_irq().lock();