Re: [PATCH v2 2/2] rust: add a wrapper for the `nr_online_nodes` C function
From: Andreas Hindborg
Date: Mon Jun 08 2026 - 07:54:08 EST
"Gary Guo" <gary@xxxxxxxxxxx> writes:
> On Fri Jun 5, 2026 at 1:54 PM BST, Andreas Hindborg wrote:
>> This function returns the number of online NUMA nodes.
>>
>> The wrapper is needed by the Rust null block driver.
>>
>> Signed-off-by: Andreas Hindborg <a.hindborg@xxxxxxxxxx>
>> ---
>> rust/kernel/lib.rs | 1 +
>> rust/kernel/numa.rs | 19 +++++++++++++++++++
>> 2 files changed, 20 insertions(+)
>>
>> diff --git a/rust/kernel/lib.rs b/rust/kernel/lib.rs
>> index b72b2fbe046d..00713b2adcac 100644
>> --- a/rust/kernel/lib.rs
>> +++ b/rust/kernel/lib.rs
>> @@ -97,6 +97,7 @@
>> #[cfg(CONFIG_NET)]
>> pub mod net;
>> pub mod num;
>> +pub mod numa;
>> pub mod of;
>> #[cfg(CONFIG_PM_OPP)]
>> pub mod opp;
>> diff --git a/rust/kernel/numa.rs b/rust/kernel/numa.rs
>> new file mode 100644
>> index 000000000000..760db072a6c1
>> --- /dev/null
>> +++ b/rust/kernel/numa.rs
>> @@ -0,0 +1,19 @@
>> +// SPDX-License-Identifier: GPL-2.0
>> +
>> +//! NUMA topology utilities.
>> +//!
>> +//! C header: [`include/linux/nodemask.h`](srctree/include/linux/nodemask.h)
>> +
>> +use crate::bindings;
>> +
>> +/// Returns the number of online NUMA nodes.
>> +#[inline]
>> +pub fn num_online_nodes() -> u32 {
>> + // NOTE: In some configurations, we can read this variable without an unsafe block.
>> + // SAFETY: When NUMA is enabled, this is a global mutable static. We do as C and just read it,
>> + // even though it might race.
>
> Can we do better and do a relaxed load instead?
Yes, that sounds reasonable.
But what are the semantics of a relaxed load when other writers are not
using atomic primitives? Does it make a difference?
Best regards,
Andreas Hindborg