[PATCH v4 00/10] LKMM generic atomics in Rust
Boqun Feng <[email protected]>
| 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, v4 for LKMM atomics in Rust, you can find the previous versions: 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]/ 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. I haven't gotten any review from last version but I got a few feedbacks during Rust-for-Linux weekly meeting. I trimmed two more patches to make the current series easier to review, the current version includes: * Generic atomic support of i32, i64, u32, u64, isize and usize on: * load() and store() * xchg() and cmpxchg() * add() and fetch_add() * Atomic pointer support on: * load() and store() * xchg() and cmpxchg() * Barrier and ordering support. Any missing functionality can of course be added in a later patch. There are some use cases based on these API can be found at: git://git.kernel.org/pub/scm/linux/kernel/git/boqun/linux.git rust-atomic-dev for example, RCU protected pointers and AtomicFlag. I think the current version is ready to merge (modulo some documentation improvement), and I would like to postpone small implementation improvement because we are seeing growing usages of atomics in Rust side. It's better to merge the API first so that we can clean up and help new users. But I do have one question about how to route the patch, basically I have three options: * via tip, I can send a pull request to Ingo at -rc4 or -rc5. * via rust-next, I can send a pull request to Miguel at -rc4 or -rc5. * via my own tree or atomic (Peter if you remember, we do have an atomic group in kernel.org and I can create a shared tree under that group), I can send a pull request to Linus for 6.17 merge window. Please advise. 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 | 176 ++++ rust/kernel/sync/atomic/generic.rs | 524 +++++++++++ rust/kernel/sync/atomic/ops.rs | 199 ++++ rust/kernel/sync/atomic/ordering.rs | 94 ++ rust/kernel/sync/barrier.rs | 67 ++ scripts/atomic/gen-atomics.sh | 1 + scripts/atomic/gen-rust-atomic-helpers.sh | 65 ++ 12 files changed, 2189 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)