Use better names and avoid duplication

This commit is contained in:
Ruihan Li
2024-10-18 19:18:52 +08:00
committed by Tate, Hongliang Tian
parent 96a153dfc5
commit 9d5350c2ee

View File

@ -140,17 +140,12 @@ pub(crate) fn park_current(has_woken: &AtomicBool) {
/// Unblocks a target task. /// Unblocks a target task.
pub(crate) fn unpark_target(runnable: Arc<Task>) { pub(crate) fn unpark_target(runnable: Arc<Task>) {
let need_preempt_info = SCHEDULER let preempt_cpu = SCHEDULER
.get() .get()
.unwrap() .unwrap()
.enqueue(runnable, EnqueueFlags::Wake); .enqueue(runnable, EnqueueFlags::Wake);
if need_preempt_info.is_some() { if let Some(preempt_cpu_id) = preempt_cpu {
let cpu_id = need_preempt_info.unwrap(); set_need_preempt(preempt_cpu_id);
let preempt_guard = disable_preempt();
// FIXME: send IPI to set remote CPU's need_preempt if needed.
if cpu_id == preempt_guard.current_cpu() {
cpu_local::set_need_preempt();
}
} }
} }
@ -164,22 +159,27 @@ pub(super) fn run_new_task(runnable: Arc<Task>) {
fifo_scheduler::init(); fifo_scheduler::init();
} }
let need_preempt_info = SCHEDULER let preempt_cpu = SCHEDULER
.get() .get()
.unwrap() .unwrap()
.enqueue(runnable, EnqueueFlags::Spawn); .enqueue(runnable, EnqueueFlags::Spawn);
if need_preempt_info.is_some() { if let Some(preempt_cpu_id) = preempt_cpu {
let cpu_id = need_preempt_info.unwrap(); set_need_preempt(preempt_cpu_id);
let preempt_guard = disable_preempt();
// FIXME: send IPI to set remote CPU's need_preempt if needed.
if cpu_id == preempt_guard.current_cpu() {
cpu_local::set_need_preempt();
}
} }
might_preempt(); might_preempt();
} }
fn set_need_preempt(cpu_id: CpuId) {
let preempt_guard = disable_preempt();
if preempt_guard.current_cpu() == cpu_id {
cpu_local::set_need_preempt();
} else {
// TODO: Send IPIs to set remote CPU's `need_preempt`
}
}
/// Dequeues the current task from its runqueue. /// Dequeues the current task from its runqueue.
/// ///
/// This should only be called if the current is to exit. /// This should only be called if the current is to exit.