mirror of
https://github.com/asterinas/asterinas.git
synced 2025-06-23 17:33:23 +00:00
Allow specifying orderings when loading/storing AtomicCpuSet
s
This commit is contained in:
@ -3,7 +3,7 @@
|
||||
#![warn(unused)]
|
||||
|
||||
use alloc::{boxed::Box, sync::Arc};
|
||||
use core::fmt;
|
||||
use core::{fmt, sync::atomic::Ordering};
|
||||
|
||||
use ostd::{
|
||||
arch::read_tsc as sched_clock,
|
||||
@ -263,7 +263,7 @@ impl ClassScheduler {
|
||||
}
|
||||
debug_assert!(flags == EnqueueFlags::Spawn);
|
||||
let guard = disable_local();
|
||||
let affinity = thread.atomic_cpu_affinity().load();
|
||||
let affinity = thread.atomic_cpu_affinity().load(Ordering::Relaxed);
|
||||
let mut selected = guard.current_cpu();
|
||||
let mut minimum_load = u32::MAX;
|
||||
let last_chosen = match self.last_chosen_cpu.get() {
|
||||
|
@ -1,6 +1,6 @@
|
||||
// SPDX-License-Identifier: MPL-2.0
|
||||
|
||||
use core::{cmp, mem};
|
||||
use core::{cmp, mem, sync::atomic::Ordering};
|
||||
|
||||
use ostd::cpu::{num_cpus, CpuId, CpuSet};
|
||||
|
||||
@ -14,9 +14,9 @@ pub fn sys_sched_getaffinity(
|
||||
ctx: &Context,
|
||||
) -> Result<SyscallReturn> {
|
||||
let cpu_set = match tid {
|
||||
0 => ctx.thread.atomic_cpu_affinity().load(),
|
||||
0 => ctx.thread.atomic_cpu_affinity().load(Ordering::Relaxed),
|
||||
_ => match thread_table::get_thread(tid) {
|
||||
Some(thread) => thread.atomic_cpu_affinity().load(),
|
||||
Some(thread) => thread.atomic_cpu_affinity().load(Ordering::Relaxed),
|
||||
None => return Err(Error::with_message(Errno::ESRCH, "thread does not exist")),
|
||||
},
|
||||
};
|
||||
@ -39,10 +39,15 @@ pub fn sys_sched_setaffinity(
|
||||
let user_cpu_set = read_cpu_set_from(ctx.user_space(), cpuset_size, cpu_set_ptr)?;
|
||||
|
||||
match tid {
|
||||
0 => ctx.thread.atomic_cpu_affinity().store(&user_cpu_set),
|
||||
0 => ctx
|
||||
.thread
|
||||
.atomic_cpu_affinity()
|
||||
.store(&user_cpu_set, Ordering::Relaxed),
|
||||
_ => match thread_table::get_thread(tid) {
|
||||
Some(thread) => {
|
||||
thread.atomic_cpu_affinity().store(&user_cpu_set);
|
||||
thread
|
||||
.atomic_cpu_affinity()
|
||||
.store(&user_cpu_set, Ordering::Relaxed);
|
||||
}
|
||||
None => return Err(Error::with_message(Errno::ESRCH, "thread does not exist")),
|
||||
},
|
||||
|
Reference in New Issue
Block a user