mirror of
https://github.com/asterinas/asterinas.git
synced 2025-06-24 09:53:24 +00:00
Remove cpu_affinity field from OSTD Task struct
This commit is contained in:
committed by
Tate, Hongliang Tian
parent
8927031426
commit
9cc63149f1
@ -2,7 +2,7 @@
|
||||
|
||||
#![allow(dead_code)]
|
||||
|
||||
use ostd::{task::Task, user::UserSpace};
|
||||
use ostd::{cpu::CpuSet, task::Task, user::UserSpace};
|
||||
|
||||
use super::{thread_table, PosixThread};
|
||||
use crate::{
|
||||
@ -113,11 +113,13 @@ impl PosixThreadBuilder {
|
||||
|
||||
let status = ThreadStatus::Init;
|
||||
let priority = Priority::default();
|
||||
let cpu_affinity = CpuSet::new_full();
|
||||
let thread = Arc::new(Thread::new(
|
||||
weak_task.clone(),
|
||||
posix_thread,
|
||||
status,
|
||||
priority,
|
||||
cpu_affinity,
|
||||
));
|
||||
|
||||
thread_table::add_thread(tid, thread.clone());
|
||||
|
@ -2,6 +2,7 @@
|
||||
|
||||
use ostd::{
|
||||
cpu::{num_cpus, CpuSet, PinCurrentCpu},
|
||||
sync::PreemptDisabled,
|
||||
task::{
|
||||
scheduler::{inject_scheduler, EnqueueFlags, LocalRunQueue, Scheduler, UpdateFlags},
|
||||
AtomicCpuId, Task,
|
||||
@ -259,8 +260,11 @@ impl PreemptSchedInfo for Task {
|
||||
&self.schedule_info().cpu
|
||||
}
|
||||
|
||||
fn cpu_affinity(&self) -> &CpuSet {
|
||||
&self.schedule_info().cpu_affinity
|
||||
fn cpu_affinity(&self) -> SpinLockGuard<CpuSet, PreemptDisabled> {
|
||||
self.data()
|
||||
.downcast_ref::<Arc<Thread>>()
|
||||
.unwrap()
|
||||
.lock_cpu_affinity()
|
||||
}
|
||||
}
|
||||
|
||||
@ -272,7 +276,7 @@ trait PreemptSchedInfo {
|
||||
|
||||
fn cpu(&self) -> &AtomicCpuId;
|
||||
|
||||
fn cpu_affinity(&self) -> &CpuSet;
|
||||
fn cpu_affinity(&self) -> SpinLockGuard<CpuSet, PreemptDisabled>;
|
||||
|
||||
fn is_real_time(&self) -> bool {
|
||||
self.priority() < Self::REAL_TIME_TASK_PRIORITY
|
||||
|
@ -55,19 +55,17 @@ pub fn create_new_kernel_task(mut thread_options: ThreadOptions) -> Arc<Task> {
|
||||
let kernel_thread = KernelThread;
|
||||
let status = ThreadStatus::Init;
|
||||
let priority = thread_options.priority;
|
||||
let cpu_affinity = thread_options.cpu_affinity;
|
||||
Arc::new(Thread::new(
|
||||
weak_task.clone(),
|
||||
kernel_thread,
|
||||
status,
|
||||
priority,
|
||||
cpu_affinity,
|
||||
))
|
||||
};
|
||||
|
||||
TaskOptions::new(thread_fn)
|
||||
.data(thread)
|
||||
.cpu_affinity(thread_options.cpu_affinity)
|
||||
.build()
|
||||
.unwrap()
|
||||
TaskOptions::new(thread_fn).data(thread).build().unwrap()
|
||||
})
|
||||
}
|
||||
|
||||
|
@ -4,7 +4,7 @@
|
||||
|
||||
use core::sync::atomic::Ordering;
|
||||
|
||||
use ostd::task::Task;
|
||||
use ostd::{cpu::CpuSet, sync::PreemptDisabled, task::Task};
|
||||
|
||||
use self::status::{AtomicThreadStatus, ThreadStatus};
|
||||
use crate::{
|
||||
@ -33,6 +33,8 @@ pub struct Thread {
|
||||
status: AtomicThreadStatus,
|
||||
/// Thread priority
|
||||
priority: AtomicPriority,
|
||||
/// Thread cpu affinity
|
||||
cpu_affinity: SpinLock<CpuSet>,
|
||||
}
|
||||
|
||||
impl Thread {
|
||||
@ -42,12 +44,14 @@ impl Thread {
|
||||
data: impl Send + Sync + Any,
|
||||
status: ThreadStatus,
|
||||
priority: Priority,
|
||||
cpu_affinity: CpuSet,
|
||||
) -> Self {
|
||||
Thread {
|
||||
task,
|
||||
data: Box::new(data),
|
||||
status: AtomicThreadStatus::new(status),
|
||||
priority: AtomicPriority::new(priority),
|
||||
cpu_affinity: SpinLock::new(cpu_affinity),
|
||||
}
|
||||
}
|
||||
|
||||
@ -111,6 +115,16 @@ impl Thread {
|
||||
self.priority.store(new_priority, Ordering::Relaxed)
|
||||
}
|
||||
|
||||
/// Acquires the lock of cpu affinity.
|
||||
pub fn lock_cpu_affinity(&self) -> SpinLockGuard<CpuSet, PreemptDisabled> {
|
||||
self.cpu_affinity.lock()
|
||||
}
|
||||
|
||||
/// Updates the cpu affinity with the new value.
|
||||
pub fn set_cpu_affinity(&self, new_cpu_affinity: CpuSet) {
|
||||
*self.cpu_affinity.lock() = new_cpu_affinity;
|
||||
}
|
||||
|
||||
pub fn yield_now() {
|
||||
Task::yield_now()
|
||||
}
|
||||
|
Reference in New Issue
Block a user