On Sun Oct 11, 2026 at 1:52 PM BST, Thomas Weißschuh wrote:
> Add generic atomic support for small unsigned integers that have an
> `AtomicImpl` with the same size and alignment.
>
> Also extend the unit tests.
>
> Signed-off-by: Thomas Weißschuh <[email protected]>
AtomicType is something that I'm getting rid of next cycle. The plan is to
convert atomic to use `kernel::mem::AsRepr`.
Best,
Gary
> ---
> rust/kernel/sync/atomic/predefine.rs | 44
> ++++++++++++++++++++++++++++--------
> 1 file changed, 35 insertions(+), 9 deletions(-)
>
> diff --git a/rust/kernel/sync/atomic/predefine.rs
> b/rust/kernel/sync/atomic/predefine.rs
> index 3d63f40791fa..4c1fb5e08dc2 100644
> --- a/rust/kernel/sync/atomic/predefine.rs
> +++ b/rust/kernel/sync/atomic/predefine.rs
> @@ -113,6 +113,32 @@ fn rhs_into_delta(rhs: isize) -> isize_atomic_repr {
> }
> }
>
> +// SAFETY: `u8` and `i8` has the same size and alignment, and `u8` is
> round-trip transmutable to
> +// `i8`.
> +unsafe impl super::AtomicType for u8 {
> + type Repr = i8;
> +}
> +
> +// SAFETY: The wrapping add result of two `i8`s is a valid `u8`.
> +unsafe impl super::AtomicAdd<u8> for u8 {
> + fn rhs_into_delta(rhs: u8) -> i8 {
> + rhs as i8
> + }
> +}
> +
> +// SAFETY: `u16` and `i16` has the same size and alignment, and `u16` is
> round-trip transmutable to
> +// `i16`.
> +unsafe impl super::AtomicType for u16 {
> + type Repr = i16;
> +}
> +
> +// SAFETY: The wrapping add result of two `i16`s is a valid `u16`.
> +unsafe impl super::AtomicAdd<u16> for u16 {
> + fn rhs_into_delta(rhs: u16) -> i16 {
> + rhs as i16
> + }
> +}
> +