lists.openwall.net | lists / announce owl-users owl-dev john-users john-dev passwdqc-users yescrypt popa3d-users / oss-security kernel-hardening musl sabotage tlsify passwords / crypt-dev xvendor / Bugtraq Full-Disclosure linux-kernel linux-netdev linux-ext4 linux-hardening linux-cve-announce PHC | |
Open Source and information security mailing list archives
| ||
|
Message-ID: <aEiiQSTe-U1q0fOL@tardis.local> Date: Tue, 10 Jun 2025 14:23:13 -0700 From: Boqun Feng <boqun.feng@...il.com> To: Viresh Kumar <viresh.kumar@...aro.org> Cc: "Rafael J. Wysocki" <rafael@...nel.org>, Miguel Ojeda <ojeda@...nel.org>, Alex Gaynor <alex.gaynor@...il.com>, Gary Guo <gary@...yguo.net>, Björn Roy Baron <bjorn3_gh@...tonmail.com>, Benno Lossin <lossin@...nel.org>, Andreas Hindborg <a.hindborg@...nel.org>, Alice Ryhl <aliceryhl@...gle.com>, Trevor Gross <tmgross@...ch.edu>, Danilo Krummrich <dakr@...nel.org>, Thomas Gleixner <tglx@...utronix.de>, Peter Zijlstra <peterz@...radead.org>, Vincent Guittot <vincent.guittot@...aro.org>, Yury Norov <yury.norov@...il.com>, rust-for-linux@...r.kernel.org, linux-kernel@...r.kernel.org Subject: Re: [PATCH V3 3/3] rust: cpu: Add CpuId::current() to retrieve current CPU ID On Tue, Jun 10, 2025 at 06:51:58PM +0530, Viresh Kumar wrote: > 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@...il.com> > Signed-off-by: Viresh Kumar <viresh.kumar@...aro.org> > --- > MAINTAINERS | 1 + > rust/helpers/cpu.c | 8 ++++++++ > rust/helpers/helpers.c | 1 + > rust/kernel/cpu.rs | 10 ++++++++++ > 4 files changed, 20 insertions(+) > create mode 100644 rust/helpers/cpu.c > > diff --git a/MAINTAINERS b/MAINTAINERS > index a92290fffa16..4255186784c4 100644 > --- a/MAINTAINERS > +++ b/MAINTAINERS > @@ -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 > diff --git a/rust/helpers/cpu.c b/rust/helpers/cpu.c > new file mode 100644 > index 000000000000..824e0adb19d4 > --- /dev/null > +++ b/rust/helpers/cpu.c > @@ -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(); > +} > diff --git a/rust/helpers/helpers.c b/rust/helpers/helpers.c > index 0f1b5d115985..16fa9bca5949 100644 > --- a/rust/helpers/helpers.c > +++ b/rust/helpers/helpers.c > @@ -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" > diff --git a/rust/kernel/cpu.rs b/rust/kernel/cpu.rs > index 7549594fad7f..a946c8a9d1a2 100644 > --- a/rust/kernel/cpu.rs > +++ b/rust/kernel/cpu.rs > @@ -102,6 +102,16 @@ pub fn from_u32(id: u32) -> Option<Self> { > 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. I would also add "or the users could use a stale (yet valid) CPU ID", because there are such usages in kernel arleady, e.g. kvm_pmu_probe_armpmu() in arch/arm64/kvm/pmu-emul.c. With that, feel free to add: Reviewed-by: Boqun Feng <boqun.feng@...il.com> Regards, Boqun > + 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 { > -- > 2.31.1.272.g89b43f80a514 >
Powered by blists - more mailing lists