* [PATCH v3 4/4] rust: make `build_assert` module the home of related macros
[not found] <20260319121653.2975748-1-gary@kernel.org>
@ 2026-03-19 12:16 ` Gary Guo
2026-03-19 14:14 ` Danilo Krummrich
` (4 more replies)
0 siblings, 5 replies; 12+ messages in thread
From: Gary Guo @ 2026-03-19 12:16 UTC (permalink / raw)
To: Miguel Ojeda, Boqun Feng, Gary Guo, Björn Roy Baron,
Benno Lossin, Andreas Hindborg, Alice Ryhl, Trevor Gross,
Danilo Krummrich, Alexandre Courbot, David Airlie, Simona Vetter,
Abdiel Janulgue, Daniel Almeida, Robin Murphy, FUJITA Tomonori,
Yury Norov, Will Deacon, Peter Zijlstra, Mark Rutland,
Ingo Molnar, Waiman Long, Tamir Duberstein
Cc: Yury Norov, rust-for-linux, nouveau, dri-devel, linux-kernel,
driver-core, netdev
From: Gary Guo <gary@garyguo.net>
Given the macro scoping rules, all macros are rendered 3 times, in the
module, in the top-level of kernel crate, and in the prelude.
Add `#[doc(no_inline)]` to the prelude so it just shows up as re-export.
Add `#[doc(hidden)]` to the macro definition and `#[doc(inline)]` to the
re-export inside `build_assert` module so the top-level items are hidden.
Signed-off-by: Gary Guo <gary@garyguo.net>
---
drivers/gpu/nova-core/bitfield.rs | 4 ++--
drivers/gpu/nova-core/num.rs | 2 +-
rust/kernel/build_assert.rs | 19 ++++++++++++-------
rust/kernel/dma.rs | 5 +++--
rust/kernel/io/register.rs | 19 ++++++++++++-------
rust/kernel/io/resource.rs | 2 +-
rust/kernel/ioctl.rs | 2 +-
rust/kernel/net/phy/reg.rs | 8 +++++---
rust/kernel/num/bounded.rs | 2 +-
rust/kernel/prelude.rs | 3 ++-
rust/kernel/sync/atomic/internal.rs | 9 ++++++---
rust/kernel/sync/atomic/predefine.rs | 2 +-
rust/kernel/sync/locked_by.rs | 2 +-
rust/kernel/sync/refcount.rs | 8 +++++---
rust/kernel/xarray.rs | 10 ++++++++--
15 files changed, 61 insertions(+), 36 deletions(-)
diff --git a/drivers/gpu/nova-core/bitfield.rs b/drivers/gpu/nova-core/bitfield.rs
index 16e143658c51..c3e1235ad7fb 100644
--- a/drivers/gpu/nova-core/bitfield.rs
+++ b/drivers/gpu/nova-core/bitfield.rs
@@ -170,7 +170,7 @@ impl $name {
(@check_field_bounds $hi:tt:$lo:tt $field:ident as bool) => {
#[allow(clippy::eq_op)]
const _: () = {
- ::kernel::build_assert!(
+ ::kernel::build_assert::build_assert!(
$hi == $lo,
concat!("boolean field `", stringify!($field), "` covers more than one bit")
);
@@ -181,7 +181,7 @@ impl $name {
(@check_field_bounds $hi:tt:$lo:tt $field:ident as $type:tt) => {
#[allow(clippy::eq_op)]
const _: () = {
- ::kernel::build_assert!(
+ ::kernel::build_assert::build_assert!(
$hi >= $lo,
concat!("field `", stringify!($field), "`'s MSB is smaller than its LSB")
);
diff --git a/drivers/gpu/nova-core/num.rs b/drivers/gpu/nova-core/num.rs
index c952a834e662..329169b21b28 100644
--- a/drivers/gpu/nova-core/num.rs
+++ b/drivers/gpu/nova-core/num.rs
@@ -49,7 +49,7 @@ macro_rules! impl_safe_as {
#[allow(unused)]
#[inline(always)]
pub(crate) const fn [<$from _as_ $into>](value: $from) -> $into {
- kernel::static_assert!(size_of::<$into>() >= size_of::<$from>());
+ ::kernel::build_assert::static_assert!(size_of::<$into>() >= size_of::<$from>());
value as $into
}
diff --git a/rust/kernel/build_assert.rs b/rust/kernel/build_assert.rs
index 726d0b76ca2b..11ac83e515ac 100644
--- a/rust/kernel/build_assert.rs
+++ b/rust/kernel/build_assert.rs
@@ -61,15 +61,16 @@
//! undefined symbols and linker errors, it is not developer friendly to debug, so it is recommended
//! to avoid it and prefer other two assertions where possible.
+#[doc(inline)]
pub use crate::{
- build_assert,
+ build_assert_macro as build_assert,
build_error,
const_assert,
static_assert, //
};
#[doc(hidden)]
-pub use build_error::build_error;
+pub use build_error::build_error as build_error_fn;
/// Static assert (i.e. compile-time assert).
///
@@ -105,6 +106,7 @@
/// static_assert!(f(40) == 42, "f(x) must add 2 to the given input.");
/// ```
#[macro_export]
+#[doc(hidden)]
macro_rules! static_assert {
($condition:expr $(,$arg:literal)?) => {
const _: () = ::core::assert!($condition $(,$arg)?);
@@ -133,6 +135,7 @@ macro_rules! static_assert {
/// }
/// ```
#[macro_export]
+#[doc(hidden)]
macro_rules! const_assert {
($condition:expr $(,$arg:literal)?) => {
const { ::core::assert!($condition $(,$arg)?) };
@@ -157,12 +160,13 @@ macro_rules! const_assert {
/// // foo(usize::MAX); // Fails to compile.
/// ```
#[macro_export]
+#[doc(hidden)]
macro_rules! build_error {
() => {{
- $crate::build_assert::build_error("")
+ $crate::build_assert::build_error_fn("")
}};
($msg:expr) => {{
- $crate::build_assert::build_error($msg)
+ $crate::build_assert::build_error_fn($msg)
}};
}
@@ -200,15 +204,16 @@ macro_rules! build_error {
/// const _: () = const_bar(2);
/// ```
#[macro_export]
-macro_rules! build_assert {
+#[doc(hidden)]
+macro_rules! build_assert_macro {
($cond:expr $(,)?) => {{
if !$cond {
- $crate::build_assert::build_error(concat!("assertion failed: ", stringify!($cond)));
+ $crate::build_assert::build_error_fn(concat!("assertion failed: ", stringify!($cond)));
}
}};
($cond:expr, $msg:expr) => {{
if !$cond {
- $crate::build_assert::build_error($msg);
+ $crate::build_assert::build_error_fn($msg);
}
}};
}
diff --git a/rust/kernel/dma.rs b/rust/kernel/dma.rs
index a396f8435739..f209fb334c85 100644
--- a/rust/kernel/dma.rs
+++ b/rust/kernel/dma.rs
@@ -5,12 +5,13 @@
//! C header: [`include/linux/dma-mapping.h`](srctree/include/linux/dma-mapping.h)
use crate::{
- bindings, build_assert, device,
+ bindings,
+ device,
device::{Bound, Core},
error::{to_result, Result},
prelude::*,
sync::aref::ARef,
- transmute::{AsBytes, FromBytes},
+ transmute::{AsBytes, FromBytes}, //
};
use core::ptr::NonNull;
diff --git a/rust/kernel/io/register.rs b/rust/kernel/io/register.rs
index abc49926abfe..2133d3e62fd5 100644
--- a/rust/kernel/io/register.rs
+++ b/rust/kernel/io/register.rs
@@ -108,9 +108,10 @@
use core::marker::PhantomData;
-use crate::io::IoLoc;
-
-use kernel::build_assert;
+use crate::{
+ build_assert::build_assert,
+ io::IoLoc, //
+};
/// Trait implemented by all registers.
pub trait Register: Sized {
@@ -872,7 +873,7 @@ macro_rules! register {
@reg $(#[$attr:meta])* $vis:vis $name:ident ($storage:ty)
[ $size:expr, stride = $stride:expr ] @ $offset:literal { $($fields:tt)* }
) => {
- ::kernel::static_assert!(::core::mem::size_of::<$storage>() <= $stride);
+ $crate::build_assert::static_assert!(::core::mem::size_of::<$storage>() <= $stride);
$crate::register!(@bitfield $(#[$attr])* $vis struct $name($storage) { $($fields)* });
$crate::register!(@io_base $name($storage) @ $offset);
@@ -895,7 +896,9 @@ macro_rules! register {
@reg $(#[$attr:meta])* $vis:vis $name:ident ($storage:ty) => $alias:ident [ $idx:expr ]
{ $($fields:tt)* }
) => {
- ::kernel::static_assert!($idx < <$alias as $crate::io::register::RegisterArray>::SIZE);
+ $crate::build_assert::static_assert!(
+ $idx < <$alias as $crate::io::register::RegisterArray>::SIZE
+ );
$crate::register!(@bitfield $(#[$attr])* $vis struct $name($storage) { $($fields)* });
$crate::register!(
@@ -912,7 +915,7 @@ macro_rules! register {
[ $size:expr, stride = $stride:expr ]
@ $base:ident + $offset:literal { $($fields:tt)* }
) => {
- ::kernel::static_assert!(::core::mem::size_of::<$storage>() <= $stride);
+ $crate::build_assert::static_assert!(::core::mem::size_of::<$storage>() <= $stride);
$crate::register!(@bitfield $(#[$attr])* $vis struct $name($storage) { $($fields)* });
$crate::register!(@io_base $name($storage) @ $offset);
@@ -938,7 +941,9 @@ macro_rules! register {
@reg $(#[$attr:meta])* $vis:vis $name:ident ($storage:ty)
=> $base:ident + $alias:ident [ $idx:expr ] { $($fields:tt)* }
) => {
- ::kernel::static_assert!($idx < <$alias as $crate::io::register::RegisterArray>::SIZE);
+ $crate::build_assert::static_assert!(
+ $idx < <$alias as $crate::io::register::RegisterArray>::SIZE
+ );
$crate::register!(@bitfield $(#[$attr])* $vis struct $name($storage) { $($fields)* });
$crate::register!(
diff --git a/rust/kernel/io/resource.rs b/rust/kernel/io/resource.rs
index b7ac9faf141d..17b0c174cfc5 100644
--- a/rust/kernel/io/resource.rs
+++ b/rust/kernel/io/resource.rs
@@ -229,7 +229,7 @@ impl Flags {
// Always inline to optimize out error path of `build_assert`.
#[inline(always)]
const fn new(value: u32) -> Self {
- crate::build_assert!(value as u64 <= c_ulong::MAX as u64);
+ build_assert!(value as u64 <= c_ulong::MAX as u64);
Flags(value as c_ulong)
}
}
diff --git a/rust/kernel/ioctl.rs b/rust/kernel/ioctl.rs
index 2fc7662339e5..5bb5b48cf949 100644
--- a/rust/kernel/ioctl.rs
+++ b/rust/kernel/ioctl.rs
@@ -6,7 +6,7 @@
#![expect(non_snake_case)]
-use crate::build_assert;
+use crate::build_assert::build_assert;
/// Build an ioctl number, analogous to the C macro of the same name.
#[inline(always)]
diff --git a/rust/kernel/net/phy/reg.rs b/rust/kernel/net/phy/reg.rs
index a7db0064cb7d..80e22c264ea8 100644
--- a/rust/kernel/net/phy/reg.rs
+++ b/rust/kernel/net/phy/reg.rs
@@ -9,9 +9,11 @@
//! defined in IEEE 802.3.
use super::Device;
-use crate::build_assert;
-use crate::error::*;
-use crate::uapi;
+use crate::{
+ build_assert::build_assert,
+ error::*,
+ uapi, //
+};
mod private {
/// Marker that a trait cannot be implemented outside of this crate
diff --git a/rust/kernel/num/bounded.rs b/rust/kernel/num/bounded.rs
index f9f90d6ec482..dafe77782d79 100644
--- a/rust/kernel/num/bounded.rs
+++ b/rust/kernel/num/bounded.rs
@@ -364,7 +364,7 @@ pub fn try_new(value: T) -> Option<Self> {
// Always inline to optimize out error path of `build_assert`.
#[inline(always)]
pub fn from_expr(expr: T) -> Self {
- crate::build_assert!(
+ crate::build_assert::build_assert!(
fits_within(expr, N),
"Requested value larger than maximal representable value."
);
diff --git a/rust/kernel/prelude.rs b/rust/kernel/prelude.rs
index 6a54597fa0a2..baf8f6a94ea1 100644
--- a/rust/kernel/prelude.rs
+++ b/rust/kernel/prelude.rs
@@ -29,7 +29,8 @@
pub use pin_init::{init, pin_data, pin_init, pinned_drop, InPlaceWrite, Init, PinInit, Zeroable};
-pub use super::{
+#[doc(no_inline)]
+pub use crate::build_assert::{
build_assert,
build_error,
const_assert,
diff --git a/rust/kernel/sync/atomic/internal.rs b/rust/kernel/sync/atomic/internal.rs
index ad810c2172ec..9c8a7a203abd 100644
--- a/rust/kernel/sync/atomic/internal.rs
+++ b/rust/kernel/sync/atomic/internal.rs
@@ -4,8 +4,11 @@
//!
//! Provides 1:1 mapping to the C atomic operations.
-use crate::bindings;
-use crate::macros::paste;
+use crate::{
+ bindings,
+ build_assert::static_assert,
+ macros::paste, //
+};
use core::cell::UnsafeCell;
use ffi::c_void;
@@ -46,7 +49,7 @@ pub trait AtomicImpl: Sized + Copy + private::Sealed {
// In the future when a CONFIG_ARCH_SUPPORTS_ATOMIC_RMW=n architecture plans to support Rust, the
// load/store helpers that guarantee atomicity against RmW operations (usually via a lock) need to
// be added.
-crate::static_assert!(
+static_assert!(
cfg!(CONFIG_ARCH_SUPPORTS_ATOMIC_RMW),
"The current implementation of atomic i8/i16/ptr relies on the architecure being \
ARCH_SUPPORTS_ATOMIC_RMW"
diff --git a/rust/kernel/sync/atomic/predefine.rs b/rust/kernel/sync/atomic/predefine.rs
index 1d53834fcb12..2c92de040f03 100644
--- a/rust/kernel/sync/atomic/predefine.rs
+++ b/rust/kernel/sync/atomic/predefine.rs
@@ -2,7 +2,7 @@
//! Pre-defined atomic types
-use crate::static_assert;
+use crate::prelude::*;
use core::mem::{align_of, size_of};
use ffi::c_void;
diff --git a/rust/kernel/sync/locked_by.rs b/rust/kernel/sync/locked_by.rs
index 61f100a45b35..fb4a1430b3b4 100644
--- a/rust/kernel/sync/locked_by.rs
+++ b/rust/kernel/sync/locked_by.rs
@@ -3,7 +3,7 @@
//! A wrapper for data protected by a lock that does not wrap it.
use super::{lock::Backend, lock::Lock};
-use crate::build_assert;
+use crate::build_assert::build_assert;
use core::{cell::UnsafeCell, mem::size_of, ptr};
/// Allows access to some data to be serialised by a lock that does not wrap it.
diff --git a/rust/kernel/sync/refcount.rs b/rust/kernel/sync/refcount.rs
index 6c7ae8b05a0b..23a5d201f343 100644
--- a/rust/kernel/sync/refcount.rs
+++ b/rust/kernel/sync/refcount.rs
@@ -4,9 +4,11 @@
//!
//! C header: [`include/linux/refcount.h`](srctree/include/linux/refcount.h)
-use crate::build_assert;
-use crate::sync::atomic::Atomic;
-use crate::types::Opaque;
+use crate::{
+ build_assert::build_assert,
+ sync::atomic::Atomic,
+ types::Opaque, //
+};
/// Atomic reference counter.
///
diff --git a/rust/kernel/xarray.rs b/rust/kernel/xarray.rs
index a49d6db28845..8fc4eab02642 100644
--- a/rust/kernel/xarray.rs
+++ b/rust/kernel/xarray.rs
@@ -5,10 +5,16 @@
//! C header: [`include/linux/xarray.h`](srctree/include/linux/xarray.h)
use crate::{
- alloc, bindings, build_assert,
+ alloc,
+ bindings,
+ build_assert::build_assert,
error::{Error, Result},
ffi::c_void,
- types::{ForeignOwnable, NotThreadSafe, Opaque},
+ types::{
+ ForeignOwnable,
+ NotThreadSafe,
+ Opaque, //
+ }, //
};
use core::{iter, marker::PhantomData, pin::Pin, ptr::NonNull};
use pin_init::{pin_data, pin_init, pinned_drop, PinInit};
--
2.51.2
^ permalink raw reply related [flat|nested] 12+ messages in thread
* Re: [PATCH v3 4/4] rust: make `build_assert` module the home of related macros
2026-03-19 12:16 ` [PATCH v3 4/4] rust: make `build_assert` module the home of related macros Gary Guo
@ 2026-03-19 14:14 ` Danilo Krummrich
2026-03-19 14:33 ` Alice Ryhl
` (3 subsequent siblings)
4 siblings, 0 replies; 12+ messages in thread
From: Danilo Krummrich @ 2026-03-19 14:14 UTC (permalink / raw)
To: Gary Guo, Miguel Ojeda
Cc: Boqun Feng, Björn Roy Baron, Benno Lossin, Andreas Hindborg,
Alice Ryhl, Trevor Gross, Alexandre Courbot, David Airlie,
Simona Vetter, Abdiel Janulgue, Daniel Almeida, Robin Murphy,
FUJITA Tomonori, Yury Norov, Will Deacon, Peter Zijlstra,
Mark Rutland, Ingo Molnar, Waiman Long, Tamir Duberstein,
Yury Norov, rust-for-linux, nouveau, dri-devel, linux-kernel,
driver-core, netdev
On 3/19/26 1:16 PM, Gary Guo wrote:
> drivers/gpu/nova-core/bitfield.rs | 4 ++--
> drivers/gpu/nova-core/num.rs | 2 +-
> rust/kernel/dma.rs | 5 +++--
> rust/kernel/io/register.rs | 19 ++++++++++++-------
> rust/kernel/io/resource.rs | 2 +-
Acked-by: Danilo Krummrich <dakr@kernel.org>
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH v3 4/4] rust: make `build_assert` module the home of related macros
2026-03-19 12:16 ` [PATCH v3 4/4] rust: make `build_assert` module the home of related macros Gary Guo
2026-03-19 14:14 ` Danilo Krummrich
@ 2026-03-19 14:33 ` Alice Ryhl
2026-03-21 13:05 ` Alexandre Courbot
` (2 subsequent siblings)
4 siblings, 0 replies; 12+ messages in thread
From: Alice Ryhl @ 2026-03-19 14:33 UTC (permalink / raw)
To: Gary Guo
Cc: Miguel Ojeda, Boqun Feng, Björn Roy Baron, Benno Lossin,
Andreas Hindborg, Trevor Gross, Danilo Krummrich,
Alexandre Courbot, David Airlie, Simona Vetter, Abdiel Janulgue,
Daniel Almeida, Robin Murphy, FUJITA Tomonori, Yury Norov,
Will Deacon, Peter Zijlstra, Mark Rutland, Ingo Molnar,
Waiman Long, Tamir Duberstein, Yury Norov, rust-for-linux,
nouveau, dri-devel, linux-kernel, driver-core, netdev
On Thu, Mar 19, 2026 at 12:16:48PM +0000, Gary Guo wrote:
> From: Gary Guo <gary@garyguo.net>
>
> Given the macro scoping rules, all macros are rendered 3 times, in the
> module, in the top-level of kernel crate, and in the prelude.
>
> Add `#[doc(no_inline)]` to the prelude so it just shows up as re-export.
> Add `#[doc(hidden)]` to the macro definition and `#[doc(inline)]` to the
> re-export inside `build_assert` module so the top-level items are hidden.
>
> Signed-off-by: Gary Guo <gary@garyguo.net>
Reviewed-by: Alice Ryhl <aliceryhl@google.com>
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH v3 4/4] rust: make `build_assert` module the home of related macros
2026-03-19 12:16 ` [PATCH v3 4/4] rust: make `build_assert` module the home of related macros Gary Guo
2026-03-19 14:14 ` Danilo Krummrich
2026-03-19 14:33 ` Alice Ryhl
@ 2026-03-21 13:05 ` Alexandre Courbot
2026-03-21 13:32 ` Gary Guo
2026-03-22 23:36 ` Miguel Ojeda
2026-03-23 0:15 ` Tamir Duberstein
4 siblings, 1 reply; 12+ messages in thread
From: Alexandre Courbot @ 2026-03-21 13:05 UTC (permalink / raw)
To: Gary Guo
Cc: Gary Guo, Miguel Ojeda, Boqun Feng, Björn Roy Baron,
Benno Lossin, Andreas Hindborg, Alice Ryhl, Trevor Gross,
Danilo Krummrich, David Airlie, Simona Vetter, Abdiel Janulgue,
Daniel Almeida, Robin Murphy, FUJITA Tomonori, Yury Norov,
Will Deacon, Peter Zijlstra, Mark Rutland, Ingo Molnar,
Waiman Long, Tamir Duberstein, Yury Norov, rust-for-linux,
nouveau, dri-devel, linux-kernel, driver-core, netdev
On Thu Mar 19, 2026 at 9:16 PM JST, Gary Guo wrote:
> From: Gary Guo <gary@garyguo.net>
>
> Given the macro scoping rules, all macros are rendered 3 times, in the
> module, in the top-level of kernel crate, and in the prelude.
>
> Add `#[doc(no_inline)]` to the prelude so it just shows up as re-export.
> Add `#[doc(hidden)]` to the macro definition and `#[doc(inline)]` to the
> re-export inside `build_assert` module so the top-level items are hidden.
>
> Signed-off-by: Gary Guo <gary@garyguo.net>
> ---
> drivers/gpu/nova-core/bitfield.rs | 4 ++--
> drivers/gpu/nova-core/num.rs | 2 +-
> rust/kernel/build_assert.rs | 19 ++++++++++++-------
> rust/kernel/dma.rs | 5 +++--
> rust/kernel/io/register.rs | 19 ++++++++++++-------
> rust/kernel/io/resource.rs | 2 +-
> rust/kernel/ioctl.rs | 2 +-
> rust/kernel/net/phy/reg.rs | 8 +++++---
> rust/kernel/num/bounded.rs | 2 +-
> rust/kernel/prelude.rs | 3 ++-
> rust/kernel/sync/atomic/internal.rs | 9 ++++++---
> rust/kernel/sync/atomic/predefine.rs | 2 +-
> rust/kernel/sync/locked_by.rs | 2 +-
> rust/kernel/sync/refcount.rs | 8 +++++---
> rust/kernel/xarray.rs | 10 ++++++++--
> 15 files changed, 61 insertions(+), 36 deletions(-)
>
> diff --git a/drivers/gpu/nova-core/bitfield.rs b/drivers/gpu/nova-core/bitfield.rs
> index 16e143658c51..c3e1235ad7fb 100644
> --- a/drivers/gpu/nova-core/bitfield.rs
> +++ b/drivers/gpu/nova-core/bitfield.rs
> @@ -170,7 +170,7 @@ impl $name {
> (@check_field_bounds $hi:tt:$lo:tt $field:ident as bool) => {
> #[allow(clippy::eq_op)]
> const _: () = {
> - ::kernel::build_assert!(
> + ::kernel::build_assert::build_assert!(
Given that the `build_assert` module now hosts 3 different assert
macros, have we considered renaming it to just `assert`? Otherwise the
naming implies that it is more connected to the `build_assert` macro
than the others, which doesn't seem to be true.
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH v3 4/4] rust: make `build_assert` module the home of related macros
2026-03-21 13:05 ` Alexandre Courbot
@ 2026-03-21 13:32 ` Gary Guo
2026-03-21 13:41 ` Miguel Ojeda
0 siblings, 1 reply; 12+ messages in thread
From: Gary Guo @ 2026-03-21 13:32 UTC (permalink / raw)
To: Alexandre Courbot, Gary Guo
Cc: Gary Guo, Miguel Ojeda, Boqun Feng, Björn Roy Baron,
Benno Lossin, Andreas Hindborg, Alice Ryhl, Trevor Gross,
Danilo Krummrich, David Airlie, Simona Vetter, Abdiel Janulgue,
Daniel Almeida, Robin Murphy, FUJITA Tomonori, Yury Norov,
Will Deacon, Peter Zijlstra, Mark Rutland, Ingo Molnar,
Waiman Long, Tamir Duberstein, Yury Norov, rust-for-linux,
nouveau, dri-devel, linux-kernel, driver-core, netdev
On Sat Mar 21, 2026 at 1:05 PM GMT, Alexandre Courbot wrote:
> On Thu Mar 19, 2026 at 9:16 PM JST, Gary Guo wrote:
>> From: Gary Guo <gary@garyguo.net>
>>
>> Given the macro scoping rules, all macros are rendered 3 times, in the
>> module, in the top-level of kernel crate, and in the prelude.
>>
>> Add `#[doc(no_inline)]` to the prelude so it just shows up as re-export.
>> Add `#[doc(hidden)]` to the macro definition and `#[doc(inline)]` to the
>> re-export inside `build_assert` module so the top-level items are hidden.
>>
>> Signed-off-by: Gary Guo <gary@garyguo.net>
>> ---
>> drivers/gpu/nova-core/bitfield.rs | 4 ++--
>> drivers/gpu/nova-core/num.rs | 2 +-
>> rust/kernel/build_assert.rs | 19 ++++++++++++-------
>> rust/kernel/dma.rs | 5 +++--
>> rust/kernel/io/register.rs | 19 ++++++++++++-------
>> rust/kernel/io/resource.rs | 2 +-
>> rust/kernel/ioctl.rs | 2 +-
>> rust/kernel/net/phy/reg.rs | 8 +++++---
>> rust/kernel/num/bounded.rs | 2 +-
>> rust/kernel/prelude.rs | 3 ++-
>> rust/kernel/sync/atomic/internal.rs | 9 ++++++---
>> rust/kernel/sync/atomic/predefine.rs | 2 +-
>> rust/kernel/sync/locked_by.rs | 2 +-
>> rust/kernel/sync/refcount.rs | 8 +++++---
>> rust/kernel/xarray.rs | 10 ++++++++--
>> 15 files changed, 61 insertions(+), 36 deletions(-)
>>
>> diff --git a/drivers/gpu/nova-core/bitfield.rs b/drivers/gpu/nova-core/bitfield.rs
>> index 16e143658c51..c3e1235ad7fb 100644
>> --- a/drivers/gpu/nova-core/bitfield.rs
>> +++ b/drivers/gpu/nova-core/bitfield.rs
>> @@ -170,7 +170,7 @@ impl $name {
>> (@check_field_bounds $hi:tt:$lo:tt $field:ident as bool) => {
>> #[allow(clippy::eq_op)]
>> const _: () = {
>> - ::kernel::build_assert!(
>> + ::kernel::build_assert::build_assert!(
>
> Given that the `build_assert` module now hosts 3 different assert
> macros, have we considered renaming it to just `assert`? Otherwise the
> naming implies that it is more connected to the `build_assert` macro
> than the others, which doesn't seem to be true.
I personally view them all as variants of BUILD_BUG_ON, hence the name is
`build_assert`. I thought about `assert`, but to me that feels like it's going
to host runtime assertions.
I won't be surprised if we're going to have `assert` module in the future to
host families of
assert!()
warn_on!()
unsafe { assume!() }
ensure!()
etc..
Best,
Gary
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH v3 4/4] rust: make `build_assert` module the home of related macros
2026-03-21 13:32 ` Gary Guo
@ 2026-03-21 13:41 ` Miguel Ojeda
0 siblings, 0 replies; 12+ messages in thread
From: Miguel Ojeda @ 2026-03-21 13:41 UTC (permalink / raw)
To: Gary Guo
Cc: Alexandre Courbot, Gary Guo, Miguel Ojeda, Boqun Feng,
Björn Roy Baron, Benno Lossin, Andreas Hindborg, Alice Ryhl,
Trevor Gross, Danilo Krummrich, David Airlie, Simona Vetter,
Abdiel Janulgue, Daniel Almeida, Robin Murphy, FUJITA Tomonori,
Yury Norov, Will Deacon, Peter Zijlstra, Mark Rutland,
Ingo Molnar, Waiman Long, Tamir Duberstein, Yury Norov,
rust-for-linux, nouveau, dri-devel, linux-kernel, driver-core,
netdev
On Sat, Mar 21, 2026 at 2:32 PM Gary Guo <gary@garyguo.net> wrote:
>
> I personally view them all as variants of BUILD_BUG_ON, hence the name is
> `build_assert`. I thought about `assert`, but to me that feels like it's going
> to host runtime assertions.
>
> I won't be surprised if we're going to have `assert` module in the future to
> host families of
>
> assert!()
> warn_on!()
> unsafe { assume!() }
> ensure!()
>
> etc..
We also have now `unsafe_precondition_assert` in the `safety` module
which is essentially a `debug_assert` at least for now, which could
potentially be moved too.
Most of these (both build time and runtime ones) should be in the
prelude anyway, so they should be easy to reorganize.
Cheers,
Miguel
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH v3 4/4] rust: make `build_assert` module the home of related macros
2026-03-19 12:16 ` [PATCH v3 4/4] rust: make `build_assert` module the home of related macros Gary Guo
` (2 preceding siblings ...)
2026-03-21 13:05 ` Alexandre Courbot
@ 2026-03-22 23:36 ` Miguel Ojeda
2026-03-23 1:08 ` Alexandre Courbot
2026-03-26 12:09 ` FUJITA Tomonori
2026-03-23 0:15 ` Tamir Duberstein
4 siblings, 2 replies; 12+ messages in thread
From: Miguel Ojeda @ 2026-03-22 23:36 UTC (permalink / raw)
To: Gary Guo, FUJITA Tomonori, Alexandre Courbot, Boqun Feng,
Tamir Duberstein, Andreas Hindborg
Cc: Miguel Ojeda, Boqun Feng, Björn Roy Baron, Benno Lossin,
Alice Ryhl, Trevor Gross, Danilo Krummrich, David Airlie,
Simona Vetter, Abdiel Janulgue, Daniel Almeida, Robin Murphy,
Yury Norov, Will Deacon, Peter Zijlstra, Mark Rutland,
Ingo Molnar, Waiman Long, Yury Norov, rust-for-linux, nouveau,
dri-devel, linux-kernel, driver-core, netdev
On Thu, Mar 19, 2026 at 1:17 PM Gary Guo <gary@kernel.org> wrote:
>
> rust/kernel/net/phy/reg.rs | 8 +++++---
Tomonori: are you OK with these changes?
> rust/kernel/num/bounded.rs | 2 +-
Alexandre: are you OK with these changes?
> rust/kernel/sync/atomic/internal.rs | 9 ++++++---
> rust/kernel/sync/atomic/predefine.rs | 2 +-
> rust/kernel/sync/locked_by.rs | 2 +-
> rust/kernel/sync/refcount.rs | 8 +++++---
Boqun: are you OK with these changes?
> rust/kernel/xarray.rs | 10 ++++++++--
Tamir, Andreas: are you OK with these changes?
> - transmute::{AsBytes, FromBytes},
> + transmute::{AsBytes, FromBytes}, //
Nit: We should take the chance to expand this.
Thanks all!
Cheers,
Miguel
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH v3 4/4] rust: make `build_assert` module the home of related macros
2026-03-19 12:16 ` [PATCH v3 4/4] rust: make `build_assert` module the home of related macros Gary Guo
` (3 preceding siblings ...)
2026-03-22 23:36 ` Miguel Ojeda
@ 2026-03-23 0:15 ` Tamir Duberstein
4 siblings, 0 replies; 12+ messages in thread
From: Tamir Duberstein @ 2026-03-23 0:15 UTC (permalink / raw)
To: Gary Guo
Cc: Miguel Ojeda, Boqun Feng, Björn Roy Baron, Benno Lossin,
Andreas Hindborg, Alice Ryhl, Trevor Gross, Danilo Krummrich,
Alexandre Courbot, David Airlie, Simona Vetter, Abdiel Janulgue,
Daniel Almeida, Robin Murphy, FUJITA Tomonori, Yury Norov,
Will Deacon, Peter Zijlstra, Mark Rutland, Ingo Molnar,
Waiman Long, Yury Norov, rust-for-linux, nouveau, dri-devel,
linux-kernel, driver-core, netdev
On Thu, Mar 19, 2026 at 8:17 AM Gary Guo <gary@kernel.org> wrote:
>
> From: Gary Guo <gary@garyguo.net>
>
> Given the macro scoping rules, all macros are rendered 3 times, in the
> module, in the top-level of kernel crate, and in the prelude.
>
> Add `#[doc(no_inline)]` to the prelude so it just shows up as re-export.
> Add `#[doc(hidden)]` to the macro definition and `#[doc(inline)]` to the
> re-export inside `build_assert` module so the top-level items are hidden.
>
> Signed-off-by: Gary Guo <gary@garyguo.net>
> ---
> drivers/gpu/nova-core/bitfield.rs | 4 ++--
> drivers/gpu/nova-core/num.rs | 2 +-
> rust/kernel/build_assert.rs | 19 ++++++++++++-------
> rust/kernel/dma.rs | 5 +++--
> rust/kernel/io/register.rs | 19 ++++++++++++-------
> rust/kernel/io/resource.rs | 2 +-
> rust/kernel/ioctl.rs | 2 +-
> rust/kernel/net/phy/reg.rs | 8 +++++---
> rust/kernel/num/bounded.rs | 2 +-
> rust/kernel/prelude.rs | 3 ++-
> rust/kernel/sync/atomic/internal.rs | 9 ++++++---
> rust/kernel/sync/atomic/predefine.rs | 2 +-
> rust/kernel/sync/locked_by.rs | 2 +-
> rust/kernel/sync/refcount.rs | 8 +++++---
> rust/kernel/xarray.rs | 10 ++++++++--
Acked-by: Tamir Duberstein <tamird@kernel.org>
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH v3 4/4] rust: make `build_assert` module the home of related macros
2026-03-22 23:36 ` Miguel Ojeda
@ 2026-03-23 1:08 ` Alexandre Courbot
2026-03-23 1:38 ` Miguel Ojeda
2026-03-26 12:09 ` FUJITA Tomonori
1 sibling, 1 reply; 12+ messages in thread
From: Alexandre Courbot @ 2026-03-23 1:08 UTC (permalink / raw)
To: Miguel Ojeda
Cc: Gary Guo, FUJITA Tomonori, Boqun Feng, Tamir Duberstein,
Andreas Hindborg, Miguel Ojeda, Boqun Feng, Björn Roy Baron,
Benno Lossin, Alice Ryhl, Trevor Gross, Danilo Krummrich,
David Airlie, Simona Vetter, Abdiel Janulgue, Daniel Almeida,
Robin Murphy, Yury Norov, Will Deacon, Peter Zijlstra,
Mark Rutland, Ingo Molnar, Waiman Long, Yury Norov,
rust-for-linux, nouveau, dri-devel, linux-kernel, driver-core,
netdev
On Mon Mar 23, 2026 at 8:36 AM JST, Miguel Ojeda wrote:
>> rust/kernel/num/bounded.rs | 2 +-
>
> Alexandre: are you OK with these changes?
Acked-by: Alexandre Courbot <acourbot@nvidia.com>
(sorry, assumed my Reviewed-by carried an implicit ack as well)
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH v3 4/4] rust: make `build_assert` module the home of related macros
2026-03-23 1:08 ` Alexandre Courbot
@ 2026-03-23 1:38 ` Miguel Ojeda
2026-03-23 1:50 ` Alexandre Courbot
0 siblings, 1 reply; 12+ messages in thread
From: Miguel Ojeda @ 2026-03-23 1:38 UTC (permalink / raw)
To: Alexandre Courbot
Cc: Gary Guo, FUJITA Tomonori, Boqun Feng, Tamir Duberstein,
Andreas Hindborg, Miguel Ojeda, Boqun Feng, Björn Roy Baron,
Benno Lossin, Alice Ryhl, Trevor Gross, Danilo Krummrich,
David Airlie, Simona Vetter, Abdiel Janulgue, Daniel Almeida,
Robin Murphy, Yury Norov, Will Deacon, Peter Zijlstra,
Mark Rutland, Ingo Molnar, Waiman Long, Yury Norov,
rust-for-linux, nouveau, dri-devel, linux-kernel, driver-core,
netdev
On Mon, Mar 23, 2026 at 2:08 AM Alexandre Courbot <acourbot@nvidia.com> wrote:
>
> Acked-by: Alexandre Courbot <acourbot@nvidia.com>
>
> (sorry, assumed my Reviewed-by carried an implicit ack as well)
Ah, I saw your tag for #2 and #3, but not #4 (nor #1).
Did I miss it/them?
Thanks!
Cheers,
Miguel
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH v3 4/4] rust: make `build_assert` module the home of related macros
2026-03-23 1:38 ` Miguel Ojeda
@ 2026-03-23 1:50 ` Alexandre Courbot
0 siblings, 0 replies; 12+ messages in thread
From: Alexandre Courbot @ 2026-03-23 1:50 UTC (permalink / raw)
To: Miguel Ojeda
Cc: Gary Guo, FUJITA Tomonori, Boqun Feng, Tamir Duberstein,
Andreas Hindborg, Miguel Ojeda, Boqun Feng, Björn Roy Baron,
Benno Lossin, Alice Ryhl, Trevor Gross, Danilo Krummrich,
Simona Vetter, Abdiel Janulgue, Daniel Almeida, Robin Murphy,
Yury Norov, Will Deacon, Peter Zijlstra, Mark Rutland,
Ingo Molnar, Waiman Long, Yury Norov, rust-for-linux, nouveau,
dri-devel, linux-kernel, driver-core, netdev
On Mon Mar 23, 2026 at 10:38 AM JST, Miguel Ojeda wrote:
> On Mon, Mar 23, 2026 at 2:08 AM Alexandre Courbot <acourbot@nvidia.com> wrote:
>>
>> Acked-by: Alexandre Courbot <acourbot@nvidia.com>
>>
>> (sorry, assumed my Reviewed-by carried an implicit ack as well)
>
> Ah, I saw your tag for #2 and #3, but not #4 (nor #1).
>
> Did I miss it/them?
You are correct and I will have some more morning caffeine. :) I had one
question but the patch looks good regardless, should have acked it
preemptively.
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH v3 4/4] rust: make `build_assert` module the home of related macros
2026-03-22 23:36 ` Miguel Ojeda
2026-03-23 1:08 ` Alexandre Courbot
@ 2026-03-26 12:09 ` FUJITA Tomonori
1 sibling, 0 replies; 12+ messages in thread
From: FUJITA Tomonori @ 2026-03-26 12:09 UTC (permalink / raw)
To: miguel.ojeda.sandonis
Cc: gary, fujita.tomonori, acourbot, boqun.feng, tamird, a.hindborg,
ojeda, boqun, bjorn3_gh, lossin, aliceryhl, tmgross, dakr,
airlied, simona, abdiel.janulgue, daniel.almeida, robin.murphy,
yury.norov, will, peterz, mark.rutland, mingo, longman, ynorov,
rust-for-linux, nouveau, dri-devel, linux-kernel, driver-core,
netdev
On Mon, 23 Mar 2026 00:36:52 +0100
Miguel Ojeda <miguel.ojeda.sandonis@gmail.com> wrote:
> On Thu, Mar 19, 2026 at 1:17 PM Gary Guo <gary@kernel.org> wrote:
>>
>> rust/kernel/net/phy/reg.rs | 8 +++++---
>
> Tomonori: are you OK with these changes?
Acked-by: FUJITA Tomonori <fujita.tomonori@gmail.com>
^ permalink raw reply [flat|nested] 12+ messages in thread
end of thread, other threads:[~2026-03-26 12:09 UTC | newest]
Thread overview: 12+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[not found] <20260319121653.2975748-1-gary@kernel.org>
2026-03-19 12:16 ` [PATCH v3 4/4] rust: make `build_assert` module the home of related macros Gary Guo
2026-03-19 14:14 ` Danilo Krummrich
2026-03-19 14:33 ` Alice Ryhl
2026-03-21 13:05 ` Alexandre Courbot
2026-03-21 13:32 ` Gary Guo
2026-03-21 13:41 ` Miguel Ojeda
2026-03-22 23:36 ` Miguel Ojeda
2026-03-23 1:08 ` Alexandre Courbot
2026-03-23 1:38 ` Miguel Ojeda
2026-03-23 1:50 ` Alexandre Courbot
2026-03-26 12:09 ` FUJITA Tomonori
2026-03-23 0:15 ` Tamir Duberstein
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox