On Tue Jan 20, 2026 at 2:05 PM GMT, Boqun Feng wrote:
> Currently, since all the architectures that support Rust all have
> CONFIG_ARCH_SUPPORTS_ATOMIC_RMW selected, the helpers of atomic
> load/store on i8 and i16 relies on CONFIG_ARCH_SUPPORTS_ATOMIC_RMW=y.
> It's generally fine since most of architectures support that.
>
> The plan for CONFIG_ARCH_SUPPORTS_ATOMIC_RMW=n architectures is adding
> their (probably lock-based) atomic load/store for i8 and i16 as their
> atomic_{read,set}() and atomic64_{read,set}() counterpart when they
> plans to support Rust.
>
> Hence use a statis_assert!() to check this and remind the future us the
> need of the helpers. This is more clear than the #[cfg] on impl blocks
> of i8 and i16.
>
> Suggested-by: Dirk Behme <[email protected]>
> Suggested-by: Benno Lossin <[email protected]>
> Signed-off-by: Boqun Feng <[email protected]>Reviewed-by: Gary Guo <[email protected]> > --- > rust/kernel/sync/atomic/internal.rs | 19 +++++++++++++------ > 1 file changed, 13 insertions(+), 6 deletions(-) > > diff --git a/rust/kernel/sync/atomic/internal.rs > b/rust/kernel/sync/atomic/internal.rs > index 0dac58bca2b3..ef516bcb02ee 100644 > --- a/rust/kernel/sync/atomic/internal.rs > +++ b/rust/kernel/sync/atomic/internal.rs > @@ -37,16 +37,23 @@ pub trait AtomicImpl: Sized + Send + Copy + > private::Sealed { > type Delta; > } > > -// The current helpers of load/store uses `{WRITE,READ}_ONCE()` hence the > atomicity is only > -// guaranteed against read-modify-write operations if the architecture > supports native atomic RmW. > -#[cfg(CONFIG_ARCH_SUPPORTS_ATOMIC_RMW)] > +// The current helpers of load/store of atomic `i8` and `i16` use > `{WRITE,READ}_ONCE()` hence the > +// atomicity is only guaranteed against read-modify-write operations if the > architecture supports > +// native atomic RmW. > +// > +// 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!( > + cfg!(CONFIG_ARCH_SUPPORTS_ATOMIC_RMW), > + "The current implementation of atomic i8/i16/ptr relies on the > architecure being \ > + ARCH_SUPPORTS_ATOMIC_RMW" The printed string when assertion fails will have 5 spaces between "being" and "ARCH", although it probably doesn't matter.. Best, Gary > +); > + > impl AtomicImpl for i8 { > type Delta = Self; > } > > -// The current helpers of load/store uses `{WRITE,READ}_ONCE()` hence the > atomicity is only > -// guaranteed against read-modify-write operations if the architecture > supports native atomic RmW. > -#[cfg(CONFIG_ARCH_SUPPORTS_ATOMIC_RMW)] > impl AtomicImpl for i16 { > type Delta = Self; > }

