[PATCH v5 00/10] LKMM generic atomics in Rust

Boqun Feng
2025-06-18T16:49:39Z

Hi,

v5 for LKMM atomics in Rust, you can find the previous versions:

v4: https://lore.kernel.org/rust-for-linux/20250609224615.27061-1-boqun.feng@gmail.com/
v3: https://lore.kernel.org/rust-for-linux/20250421164221.1121805-1-boqun.feng@gmail.com/
v2: https://lore.kernel.org/rust-for-linux/20241101060237.1185533-1-boqun.feng@gmail.com/
v1: https://lore.kernel.org/rust-for-linux/20240612223025.1158537-1-boqun.feng@gmail.com/
wip: https://lore.kernel.org/rust-for-linux/20240322233838.868874-1-boqun.feng@gmail.com/

The reason of providing our own LKMM atomics is because memory model
wise Rust native memory model is not guaranteed to work with LKMM and
having only one memory model throughout the kernel is always better for
reasoning.

Changes since v4:

* Rename the ordering enum type and corresponding constant in trait All
as per feedback from Benno.

* Add more tests for Atomic<{i,u}size> and Atomic<*mut T>.

* Rebase on v6.16-rc2

Still please advise how we want to route the patches and for future
ones:

* Option #1: via tip, I can send a pull request to Ingo at -rc4 or -rc5.
* Option #2: via rust, I can send a pull request to Miguel at -rc4 or -rc5.
* Option #3: via my own tree or atomic group in kernel.org, I can send
a pull request to Linus at 6.17 merge window.

My default option is #1, but feel free to make any suggestion.

Regards,
Boqun

Boqun Feng (10):
rust: Introduce atomic API helpers
rust: sync: Add basic atomic operation mapping framework
rust: sync: atomic: Add ordering annotation types
rust: sync: atomic: Add generic atomics
rust: sync: atomic: Add atomic {cmp,}xchg operations
rust: sync: atomic: Add the framework of arithmetic operations
rust: sync: atomic: Add Atomic<u{32,64}>
rust: sync: atomic: Add Atomic<{usize,isize}>
rust: sync: atomic: Add Atomic<*mut T>
rust: sync: Add memory barriers

MAINTAINERS | 4 +-
rust/helpers/atomic.c | 1038 +++++++++++++++++++++
rust/helpers/barrier.c | 18 +
rust/helpers/helpers.c | 2 +
rust/kernel/sync.rs | 2 +
rust/kernel/sync/atomic.rs | 233 +++++
rust/kernel/sync/atomic/generic.rs | 523 +++++++++++
rust/kernel/sync/atomic/ops.rs | 199 ++++
rust/kernel/sync/atomic/ordering.rs | 106 +++
rust/kernel/sync/barrier.rs | 67 ++
scripts/atomic/gen-atomics.sh | 1 +
scripts/atomic/gen-rust-atomic-helpers.sh | 65 ++
12 files changed, 2257 insertions(+), 1 deletion(-)
create mode 100644 rust/helpers/atomic.c
create mode 100644 rust/helpers/barrier.c
create mode 100644 rust/kernel/sync/atomic.rs
create mode 100644 rust/kernel/sync/atomic/generic.rs
create mode 100644 rust/kernel/sync/atomic/ops.rs
create mode 100644 rust/kernel/sync/atomic/ordering.rs
create mode 100644 rust/kernel/sync/barrier.rs
create mode 100755 scripts/atomic/gen-rust-atomic-helpers.sh

--
2.39.5 (Apple Git-154)