mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/chenhuacai/linux-loongson
synced 2025-08-28 18:10:32 +00:00
rust: cpu: Add CpuId::current() to retrieve current CPU ID
Introduce `CpuId::current()`, a constructor that wraps the C function `raw_smp_processor_id()` to retrieve the current CPU identifier without guaranteeing stability. This function should be used only when the caller can ensure that the CPU ID won't change unexpectedly due to preemption or migration. Suggested-by: Boqun Feng <boqun.feng@gmail.com> Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org> Reviewed-by: Boqun Feng <boqun.feng@gmail.com>
This commit is contained in:
parent
33db8c97b4
commit
c7f005f70d
@ -6254,6 +6254,7 @@ F: include/linux/cpuhotplug.h
|
||||
F: include/linux/smpboot.h
|
||||
F: kernel/cpu.c
|
||||
F: kernel/smpboot.*
|
||||
F: rust/helper/cpu.c
|
||||
F: rust/kernel/cpu.rs
|
||||
|
||||
CPU IDLE TIME MANAGEMENT FRAMEWORK
|
||||
|
8
rust/helpers/cpu.c
Normal file
8
rust/helpers/cpu.c
Normal file
@ -0,0 +1,8 @@
|
||||
// SPDX-License-Identifier: GPL-2.0
|
||||
|
||||
#include <linux/smp.h>
|
||||
|
||||
unsigned int rust_helper_raw_smp_processor_id(void)
|
||||
{
|
||||
return raw_smp_processor_id();
|
||||
}
|
@ -13,6 +13,7 @@
|
||||
#include "build_assert.c"
|
||||
#include "build_bug.c"
|
||||
#include "clk.c"
|
||||
#include "cpu.c"
|
||||
#include "cpufreq.c"
|
||||
#include "cpumask.c"
|
||||
#include "cred.c"
|
||||
|
@ -102,6 +102,17 @@ impl CpuId {
|
||||
pub fn as_u32(&self) -> u32 {
|
||||
self.0
|
||||
}
|
||||
|
||||
/// Returns the ID of the CPU the code is currently running on.
|
||||
///
|
||||
/// The returned value is considered unstable because it may change
|
||||
/// unexpectedly due to preemption or CPU migration. It should only be
|
||||
/// used when the context ensures that the task remains on the same CPU
|
||||
/// or the users could use a stale (yet valid) CPU ID.
|
||||
pub fn current() -> Self {
|
||||
// SAFETY: raw_smp_processor_id() always returns a valid CPU ID.
|
||||
unsafe { Self::from_u32_unchecked(bindings::raw_smp_processor_id()) }
|
||||
}
|
||||
}
|
||||
|
||||
impl From<CpuId> for u32 {
|
||||
|
Loading…
Reference in New Issue
Block a user