All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Alexandre Courbot" <acourbot@nvidia.com>
To: "Gary Guo" <gary@garyguo.net>
Cc: "Danilo Krummrich" <dakr@kernel.org>,
	"Alice Ryhl" <aliceryhl@google.com>,
	"Daniel Almeida" <daniel.almeida@collabora.com>,
	"Miguel Ojeda" <ojeda@kernel.org>,
	"Boqun Feng" <boqun@kernel.org>,
	"Björn Roy Baron" <bjorn3_gh@protonmail.com>,
	"Benno Lossin" <lossin@kernel.org>,
	"Andreas Hindborg" <a.hindborg@kernel.org>,
	"Trevor Gross" <tmgross@umich.edu>,
	"Tamir Duberstein" <tamird@kernel.org>,
	"Onur Özkan" <work@onurozkan.dev>,
	"David Airlie" <airlied@gmail.com>,
	"Simona Vetter" <simona@ffwll.ch>,
	"Bjorn Helgaas" <bhelgaas@google.com>,
	"Krzysztof Wilczyński" <kwilczynski@kernel.org>,
	driver-core@lists.linux.dev, rust-for-linux@vger.kernel.org,
	linux-kernel@vger.kernel.org, nova-gpu@lists.linux.dev,
	dri-devel@lists.freedesktop.org, linux-pci@vger.kernel.org
Subject: Re: [PATCH v4 03/16] rust: mem: add `AsRepr` and `AsReprMut`
Date: Thu, 03 Sep 2026 21:02:34 +0900	[thread overview]
Message-ID: <DL5NZMOMIBDR.1EWZB3BBD7F0F@nvidia.com> (raw)
In-Reply-To: <20260901-typed_register-v4-3-5552b1d59525@garyguo.net>

On Wed Sep 2, 2026 at 1:50 AM JST, Gary Guo wrote:
<...>
> +/// Type that is layout-compatible with a primitive representation.
> +///
> +/// # Safety
> +///
> +/// - `Self` must have the same size and alignment as [`Self::Repr`].
> +/// - `Self` can be [transmutable] to [`Self::Repr`].
> +/// - Neither `Self` nor [`Self::Repr`] contains interior mutability.
> +///
> +/// The above basically says that `&Self` can be transmuted to `&Self::Repr`.
> +///
> +/// [transmutable]: core::mem::transmute
> +pub unsafe trait AsRepr: Sized {
> +    /// Primitive representation of this type.
> +    type Repr;
> +
> +    /// Convert from `&Self` to [`&Self::Repr`](AsRepr::Repr).
> +    #[inline(always)]
> +    fn as_repr(this: &Self) -> &Self::Repr {
> +        // SAFETY: Per safety requirement of the trait.
> +        unsafe { core::mem::transmute(this) }
> +    }
> +
> +    /// Convert from `Self` to [`Self::Repr`].
> +    #[inline(always)]
> +    fn into_repr(this: Self) -> Self::Repr {
> +        // SAFETY: Per safety requirement of the trait.
> +        unsafe { transmute(this) }
> +    }
> +
> +    /// Convert from [`Self::Repr`] to `Self`.
> +    ///
> +    /// # Safety
> +    ///
> +    /// `repr` must be a valid bit pattern of `Self` and satisfy type-specific invariants of it.
> +    ///
> +    /// Alternatively, if `repr` is previously obtained using [`Self::into_repr`], and each
> +    /// `from_repr_unchecked` should corresponds to a unique `into_repr` call, then it is safe to

nit: s/corresponds/correspond

> +    /// call as well (this means that we're undoing a `into_repr` call getting the exact bytes
> +    /// back).
> +    ///
> +    /// This method makes no guarantee if a `into_repr` corresponds to multiple
> +    /// `from_repr_unchecked` (i.e. copies are made), to allow for cases where `Repr` is a pointer

This part doesn't parse for me; maybe it is worth rephrasing?

Something like "No guarantee is made if the result of a `into_repr` is
passed to multiple `from_repr_unchecked`" reads a bit better IMHO.

<...>
> +// SAFETY: `*mut T` has the same size and alignment with `*const c_void`, and thus `*mut T` is
> +// transmutable to `*const c_void`. Neither types contain interior mutability.
> +unsafe impl<T> AsRepr for *mut T {
> +    type Repr = *const c_void;
> +}
> +
> +// SAFETY: `*mut T` is transmutable from `*const c_void`.
> +unsafe impl<T> AsReprMut for *mut T {}
> +
> +// SAFETY: `*const T` has the same size and alignment with `*const c_void`, and is transmutable to
> +// `*const c_void`. Neither types contain interior mutability.
> +unsafe impl<T> AsRepr for *const T {
> +    type Repr = *const c_void;
> +}
> +
> +// SAFETY: `*const T` is transmutable from `*const c_void`.
> +unsafe impl<T> AsReprMut for *const T {}

These pointer impls have no user in the series, should we wait until we
have one to add them?

In any case,

Reviewed-by: Alexandre Courbot <acourbot@nvidia.com>

  parent reply	other threads:[~2026-09-03 12:02 UTC|newest]

Thread overview: 51+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-09-01 16:50 [PATCH v4 00/16] rust: io: support register projections and remove relative registers Gary Guo
2026-09-01 16:50 ` [PATCH v4 01/16] rust: io: register: reimplement as proc macro Gary Guo
2026-09-01 16:56   ` sashiko-bot
2026-09-03 11:46   ` Alexandre Courbot
2026-09-01 16:50 ` [PATCH v4 02/16] rust: mem: add `transmute` with deferred size check Gary Guo
2026-09-01 16:59   ` sashiko-bot
2026-09-03 11:46   ` Alexandre Courbot
2026-09-05 19:18   ` Miguel Ojeda
2026-09-01 16:50 ` [PATCH v4 03/16] rust: mem: add `AsRepr` and `AsReprMut` Gary Guo
2026-09-01 16:56   ` sashiko-bot
2026-09-03 12:02   ` Alexandre Courbot [this message]
2026-09-05 19:22   ` Miguel Ojeda
2026-09-05 23:32     ` Gary Guo
2026-09-06  0:01       ` Miguel Ojeda
2026-09-01 16:50 ` [PATCH v4 04/16] rust: io: perform conversions using `AsRepr` Gary Guo
2026-09-01 16:56   ` sashiko-bot
2026-09-01 16:50 ` [PATCH v4 05/16] rust: io: support register projections Gary Guo
2026-09-01 16:59   ` sashiko-bot
2026-09-01 16:50 ` [PATCH v4 06/16] rust: io: register: allow explicit base type specification Gary Guo
2026-09-01 16:55   ` sashiko-bot
2026-09-03 12:16   ` Alexandre Courbot
2026-09-01 16:50 ` [PATCH v4 07/16] gpu: nova-core: specify base type for registers Gary Guo
2026-09-01 16:55   ` sashiko-bot
2026-09-01 16:50 ` [PATCH v4 08/16] drm/tyr: " Gary Guo
2026-09-01 17:04   ` sashiko-bot
2026-09-01 16:50 ` [PATCH v4 09/16] samples: rust: pci: " Gary Guo
2026-09-01 16:56   ` sashiko-bot
2026-09-01 16:50 ` [PATCH v4 10/16] rust: io: register: make register have a typed base Gary Guo
2026-09-01 16:59   ` sashiko-bot
2026-09-03 12:27   ` Alexandre Courbot
2026-09-01 16:50 ` [PATCH v4 11/16] rust: io: register: support fixed offset register without bitfield Gary Guo
2026-09-01 17:02   ` sashiko-bot
2026-09-01 16:50 ` [PATCH v4 12/16] gpu: nova-core: use projection for PFALCON and PFALCON2 registers Gary Guo
2026-09-01 16:59   ` sashiko-bot
2026-09-03 12:34   ` Alexandre Courbot
2026-09-01 16:50 ` [PATCH v4 13/16] gpu: nova-core: convert hshub0 from relative register to projection Gary Guo
2026-09-01 17:01   ` sashiko-bot
2026-09-03 12:41   ` Alexandre Courbot
2026-09-01 16:50 ` [PATCH v4 14/16] rust: io: register: remove relative registers Gary Guo
2026-09-01 17:02   ` sashiko-bot
2026-09-01 16:50 ` [PATCH v4 15/16] rust: io: register: remove `Register` trait and cleanup macro Gary Guo
2026-09-01 17:03   ` sashiko-bot
2026-09-03 12:43   ` Alexandre Courbot
2026-09-01 16:50 ` [PATCH v4 16/16] rust: io: register: unify handling of register with/without bitfields Gary Guo
2026-09-01 17:02   ` sashiko-bot
2026-09-03 12:49 ` [PATCH v4 00/16] rust: io: support register projections and remove relative registers Alexandre Courbot
2026-09-03 19:22 ` Danilo Krummrich
2026-09-03 19:27   ` Danilo Krummrich
2026-09-05 19:24     ` Miguel Ojeda
2026-09-06 13:18       ` Danilo Krummrich
2026-09-06 13:19   ` Danilo Krummrich

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=DL5NZMOMIBDR.1EWZB3BBD7F0F@nvidia.com \
    --to=acourbot@nvidia.com \
    --cc=a.hindborg@kernel.org \
    --cc=airlied@gmail.com \
    --cc=aliceryhl@google.com \
    --cc=bhelgaas@google.com \
    --cc=bjorn3_gh@protonmail.com \
    --cc=boqun@kernel.org \
    --cc=dakr@kernel.org \
    --cc=daniel.almeida@collabora.com \
    --cc=dri-devel@lists.freedesktop.org \
    --cc=driver-core@lists.linux.dev \
    --cc=gary@garyguo.net \
    --cc=kwilczynski@kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-pci@vger.kernel.org \
    --cc=lossin@kernel.org \
    --cc=nova-gpu@lists.linux.dev \
    --cc=ojeda@kernel.org \
    --cc=rust-for-linux@vger.kernel.org \
    --cc=simona@ffwll.ch \
    --cc=tamird@kernel.org \
    --cc=tmgross@umich.edu \
    --cc=work@onurozkan.dev \
    /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.