mirror of
https://github.com/asterinas/asterinas.git
synced 2025-06-29 04:13:24 +00:00
Use better names and avoid duplication
This commit is contained in:
committed by
Tate, Hongliang Tian
parent
96a153dfc5
commit
9d5350c2ee
@ -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.
|
||||||
|
Reference in New Issue
Block a user