* [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-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
* 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
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