From: Boqun Feng <boqun.feng@gmail.com>
To: Benno Lossin <lossin@kernel.org>
Cc: linux-kernel@vger.kernel.org, rust-for-linux@vger.kernel.org,
lkmm@lists.linux.dev, linux-arch@vger.kernel.org,
"Miguel Ojeda" <ojeda@kernel.org>,
"Alex Gaynor" <alex.gaynor@gmail.com>,
"Gary Guo" <gary@garyguo.net>,
"Björn Roy Baron" <bjorn3_gh@protonmail.com>,
"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: Re: [PATCH v4 03/10] rust: sync: atomic: Add ordering annotation types
Date: Tue, 10 Jun 2025 10:58:30 -0700 [thread overview]
Message-ID: <aEhyRhb71dIXzqSu@tardis.local> (raw)
In-Reply-To: <aEhrzxltkdnub_bR@tardis.local>
On Tue, Jun 10, 2025 at 10:30:55AM -0700, Boqun Feng wrote:
[...]
> > > +/// Describes the exact memory ordering of an `impl` [`All`].
> > > +pub enum OrderingDesc {
> >
> > Why not name this `Ordering`?
> >
>
> I was trying to avoid having an `Ordering` enum in a `ordering` mod.
> Also I want to save the name "Ordering" for the generic type parameter
> of an atomic operation, e.g.
>
> pub fn xchg<Ordering: ALL>(..)
>
> this enum is more of an internal implementation detail, and users should
> not use this enum directly, so I would like to avoid potential
> confusion.
>
> I have played a few sealed trait tricks on my end, but seems I cannot
> achieve:
>
> 1) `OrderingDesc` is only accessible in the atomic mod.
> 2) `All` is only impl-able in the atomic mod, while it can be used as a
> trait bound outside kernel crate.
>
> Maybe there is a trick I'm missing?
>
Something like this seems to work:
pub(super) mod private {
/// Describes the exact memory ordering of an `impl` [`All`].
pub enum Ordering {
/// Relaxed ordering.
Relaxed,
/// Acquire ordering.
Acquire,
/// Release ordering.
Release,
/// Fully-ordered.
Full,
}
pub trait HasOrderingDesc {
/// Describes the exact memory ordering.
const ORDERING: Ordering;
}
}
/// The trait bound for annotating operations that should support all orderings.
pub trait All: private::HasOrderingDesc { }
impl private::HasOrderingDesc for Relaxed {
const ORDERING: private::Ordering = private::Ordering::Relaxed;
}
the trick is to seal the enum and the trait together.
Regards,
Boqun
> > > + /// Relaxed ordering.
> > > + Relaxed,
> > > + /// Acquire ordering.
> > > + Acquire,
> > > + /// Release ordering.
> > > + Release,
> > > + /// Fully-ordered.
> > > + Full,
> > > +}
> > > +
> > > +/// The trait bound for annotating operations that should support all orderings.
> > > +pub trait All {
> > > + /// Describes the exact memory ordering.
> > > + const ORDER: OrderingDesc;
> >
> > And then here: `ORDERING`.
>
[..]
next prev parent reply other threads:[~2025-06-10 17:58 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-06-09 22:46 [PATCH v4 00/10] LKMM generic atomics in Rust Boqun Feng
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 [this message]
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=aEhyRhb71dIXzqSu@tardis.local \
--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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.