Re: [PATCH v6 4/9] rust: sync: atomic: Add generic atomics
Boqun Feng <[email protected]> Mon, 14 Jul 2025 00:08:57 -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]> |
On Fri, Jul 11, 2025 at 08:35:25PM +0200, Benno Lossin wrote: [..] > >> > +/// > >> > +/// # Guarantees > >> > +/// > >> > +/// Doing an atomic operation while holding a reference of [`Self`] won't cause a data race, > >> > +/// this is guaranteed by the safety requirement of [`Self::from_ptr()`] and the extra safety > >> > +/// requirement of the usage on pointers returned by [`Self::as_ptr()`]. > >> > >> I'd rather think we turn this into an invariant that says any operations > >> on `self.0` through a shared reference is atomic. > >> [...] > > [...] > >> > + let a = self.as_ptr().cast::<T::Repr>(); > >> > + > >> > + // SAFETY: > >> > + // - For calling the atomic_read*() function: > >> > + // - `a` is a valid pointer for the function per the CAST justification above. > >> > + // - Per the type guarantees, the following atomic operation won't cause data races. > >> > >> Which type guarantees? `Self`? > >> > > > > The above "# Guarantees" of `Atomic<T>`, but yeah I think it should be > > "# Invariants". > > Yeah and if we use invariants/guarantees always mention the type that > they are of and don't assume the reader will "know" :) > Just FYI, I ended dropping the "# Invariants" (or Guarantees) of `Atomic<T>` because I don't need them any more. Instead I add a guarantee for Atoimc::as_ptr(): always returns a properly aligned pointer, which I actually need for calling C functions. Regards, Boqun > --- > Cheers, > Benno