[PATCH v6 0/9] LKMM generic atomics in Rust
Boqun Feng <[email protected]> Wed, 9 Jul 2025 23:00:43 -0700
| Newsgroups | dev.linux.lists.lkmm,org.kernel.vger.linux-arch,org.kernel.vger.linux-kernel,org.kernel.vger.rust-for-linux |
|---|---|
| Message-ID | <[email protected]> |
Hi all, This is the v6 of LKMM atomics in Rust, you can find the previous versions at: v5: https://lore.kernel.org/rust-for-linux/[email protected]/ v4: https://lore.kernel.org/rust-for-linux/[email protected]/ v3: https://lore.kernel.org/rust-for-linux/[email protected]/ v2: https://lore.kernel.org/rust-for-linux/[email protected]/ v1: https://lore.kernel.org/rust-for-linux/[email protected]/ wip: https://lore.kernel.org/rust-for-linux/[email protected]/ I dropped the support for atomic pointers for now (Atomic<{isize,usize}> still exists), because further more work is needed to ensure the implementation could preserve provenance [1]. And we already other series depending on atomics [2], so it makes sense to get some basic support in-tree. Peter & Ingo, I take it that it's OK for me to send a PR to tip later this week or early next week if things went well? Of course, any feedback is welcome! Changes since v5: * Replace `as` cast with `ptr.cast()` in atomic/ops.rs per the suggestion of Andreas. * Explicitly document `Acquire` and `Release` ordering definition per the suggestion of Peter. * Rename `All` to `Any` for ordering accept traits per the suggestion of Andreas. * Remove unnecessary fields in `AcquireOrRelaxed` and `ReleaseOrRelaxed` per the suggestion of Gary. * Add round-trip transmutability (thanks Benno) as the safety requirement of `AllowAtomic` per discussion with Gary and Benno. * Add doc alias for xchg() and cmpxchg() per the suggestion of Benno. * Examples and documentation improvement. * Applied Reviewed-by tags from Alice and Andreas. [1]: https://lore.kernel.org/rust-for-linux/[email protected]/ [2]: https://lore.kernel.org/rust-for-linux/[email protected]/ Regards, Boqun Boqun Feng (9): 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: Add memory barriers rust: sync: atomic: Add Atomic<{usize,isize}> MAINTAINERS | 4 +- rust/helpers/atomic.c | 1040 +++++++++++++++++++++ rust/helpers/barrier.c | 18 + rust/helpers/helpers.c | 2 + rust/kernel/sync.rs | 2 + rust/kernel/sync/atomic.rs | 193 ++++ rust/kernel/sync/atomic/generic.rs | 567 +++++++++++ rust/kernel/sync/atomic/ops.rs | 195 ++++ rust/kernel/sync/atomic/ordering.rs | 97 ++ rust/kernel/sync/barrier.rs | 65 ++ scripts/atomic/gen-atomics.sh | 1 + scripts/atomic/gen-rust-atomic-helpers.sh | 67 ++ 12 files changed, 2250 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)