mirror of
https://github.com/asterinas/asterinas.git
synced 2025-06-21 00:06:34 +00:00
Fix incorrect types in sys_getcpu
This commit is contained in:
committed by
Jianfeng Jiang
parent
56e9824dd1
commit
63daf69e17
@ -1,27 +1,32 @@
|
||||
// SPDX-License-Identifier: MPL-2.0
|
||||
|
||||
use ostd::{cpu::PinCurrentCpu, task::disable_preempt};
|
||||
use ostd::cpu::CpuId;
|
||||
|
||||
use super::SyscallReturn;
|
||||
use crate::prelude::*;
|
||||
|
||||
pub fn sys_getcpu(cpu: Vaddr, node: Vaddr, _tcache: Vaddr, ctx: &Context) -> Result<SyscallReturn> {
|
||||
// The third argument tcache is unused after Linux 2.6.24 so we ignore it
|
||||
let preempt_guard = disable_preempt();
|
||||
let cpuid = preempt_guard.current_cpu();
|
||||
drop(preempt_guard);
|
||||
// The third argument `tcache` is unused since Linux 2.6.24, so we ignore it.
|
||||
|
||||
// The system call itself is inherently racy, so using `current_racy` here should be fine.
|
||||
let current_cpu = CpuId::current_racy().as_usize() as u32;
|
||||
// TODO: Support NUMA.
|
||||
let current_node = 0u32;
|
||||
|
||||
debug!(
|
||||
"getcpu: cpuid = {}, total_cpus = {}",
|
||||
cpuid.as_usize(),
|
||||
ostd::cpu::num_cpus()
|
||||
"[sys_getcpu]: cpu = {} (total {}), node = {}",
|
||||
current_cpu,
|
||||
ostd::cpu::num_cpus(),
|
||||
current_node,
|
||||
);
|
||||
// Since cpu and node can be NULL, we need to check them before writing
|
||||
|
||||
// `cpu` and `node` can be NULL, so we need to check before writing.
|
||||
if cpu != 0 {
|
||||
ctx.user_space()
|
||||
.write_val::<usize>(cpu, &cpuid.as_usize())?;
|
||||
ctx.user_space().write_val(cpu, ¤t_cpu)?;
|
||||
}
|
||||
if node != 0 {
|
||||
ctx.user_space().write_val::<usize>(node, &0)?; // TODO: NUMA is not supported
|
||||
ctx.user_space().write_val(node, ¤t_node)?;
|
||||
}
|
||||
|
||||
Ok(SyscallReturn::Return(0))
|
||||
}
|
||||
|
Reference in New Issue
Block a user