From: Boqun Feng <boqun.feng@gmail.com>
To: linux-kernel@vger.kernel.org, rust-for-linux@vger.kernel.org,
lkmm@lists.linux.dev, linux-arch@vger.kernel.org
Cc: "Miguel Ojeda" <ojeda@kernel.org>,
"Alex Gaynor" <alex.gaynor@gmail.com>,
"Boqun Feng" <boqun.feng@gmail.com>,
"Gary Guo" <gary@garyguo.net>,
"Björn Roy Baron" <bjorn3_gh@protonmail.com>,
"Benno Lossin" <lossin@kernel.org>,
"Andreas Hindborg" <a.hindborg@kernel.org>,
"Alice Ryhl" <aliceryhl@google.com>,
"Trevor Gross" <tmgross@umich.edu>,
"Danilo Krummrich" <dakr@kernel.org>,
"Will Deacon" <will@kernel.org>,
"Peter Zijlstra" <peterz@infradead.org>,
"Mark Rutland" <mark.rutland@arm.com>,
"Wedson Almeida Filho" <wedsonaf@gmail.com>,
"Viresh Kumar" <viresh.kumar@linaro.org>,
"Lyude Paul" <lyude@redhat.com>, "Ingo Molnar" <mingo@kernel.org>,
"Mitchell Levy" <levymitchell0@gmail.com>,
"Paul E. McKenney" <paulmck@kernel.org>,
"Greg Kroah-Hartman" <gregkh@linuxfoundation.org>,
"Linus Torvalds" <torvalds@linux-foundation.org>,
"Thomas Gleixner" <tglx@linutronix.de>
Subject: [PATCH v4 00/10] LKMM generic atomics in Rust
Date: Mon, 9 Jun 2025 15:46:05 -0700 [thread overview]
Message-ID: <20250609224615.27061-1-boqun.feng@gmail.com> (raw)
Hi,
v4 for LKMM atomics in Rust, you can find the previous versions:
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.
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)
next reply other threads:[~2025-06-09 22:46 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-06-09 22:46 Boqun Feng [this message]
2025-06-09 22:46 ` [PATCH v4 01/10] rust: Introduce atomic API helpers Boqun Feng
2025-06-09 22:46 ` [PATCH v4 02/10] rust: sync: Add basic atomic operation mapping framework Boqun Feng
2025-06-09 22:46 ` [PATCH v4 03/10] rust: sync: atomic: Add ordering annotation types Boqun Feng
2025-06-10 9:07 ` Benno Lossin
2025-06-10 17:30 ` Boqun Feng
2025-06-10 17:58 ` Boqun Feng
2025-06-10 18:53 ` Boqun Feng
2025-06-11 6:40 ` Benno Lossin
2025-06-09 22:46 ` [PATCH v4 04/10] rust: sync: atomic: Add generic atomics Boqun Feng
2025-06-09 22:46 ` [PATCH v4 05/10] rust: sync: atomic: Add atomic {cmp,}xchg operations Boqun Feng
2025-06-09 22:46 ` [PATCH v4 06/10] rust: sync: atomic: Add the framework of arithmetic operations Boqun Feng
2025-06-09 22:46 ` [PATCH v4 07/10] rust: sync: atomic: Add Atomic<u{32,64}> Boqun Feng
2025-06-09 22:46 ` [PATCH v4 08/10] rust: sync: atomic: Add Atomic<{usize,isize}> Boqun Feng
2025-06-09 22:46 ` [PATCH v4 09/10] rust: sync: atomic: Add Atomic<*mut T> Boqun Feng
2025-06-09 22:46 ` [PATCH v4 10/10] rust: sync: Add memory barriers Boqun Feng
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20250609224615.27061-1-boqun.feng@gmail.com \
--to=boqun.feng@gmail.com \
--cc=a.hindborg@kernel.org \
--cc=alex.gaynor@gmail.com \
--cc=aliceryhl@google.com \
--cc=bjorn3_gh@protonmail.com \
--cc=dakr@kernel.org \
--cc=gary@garyguo.net \
--cc=gregkh@linuxfoundation.org \
--cc=levymitchell0@gmail.com \
--cc=linux-arch@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=lkmm@lists.linux.dev \
--cc=lossin@kernel.org \
--cc=lyude@redhat.com \
--cc=mark.rutland@arm.com \
--cc=mingo@kernel.org \
--cc=ojeda@kernel.org \
--cc=paulmck@kernel.org \
--cc=peterz@infradead.org \
--cc=rust-for-linux@vger.kernel.org \
--cc=tglx@linutronix.de \
--cc=tmgross@umich.edu \
--cc=torvalds@linux-foundation.org \
--cc=viresh.kumar@linaro.org \
--cc=wedsonaf@gmail.com \
--cc=will@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).