[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <DCL32RUQ6Z56.1ERY7JBK6O1J6@kernel.org>
Date: Fri, 05 Sep 2025 20:38:11 +0200
From: "Danilo Krummrich" <dakr@...nel.org>
To: "Boqun Feng" <boqun.feng@...il.com>
Cc: "Benno Lossin" <lossin@...nel.org>, "Miguel Ojeda" <ojeda@...nel.org>,
"Alex Gaynor" <alex.gaynor@...il.com>, "Gary Guo" <gary@...yguo.net>,
Björn Roy Baron <bjorn3_gh@...tonmail.com>, "Andreas
Hindborg" <a.hindborg@...nel.org>, "Alice Ryhl" <aliceryhl@...gle.com>,
"Trevor Gross" <tmgross@...ch.edu>, "Fiona Behrens" <me@...enk.dev>, "Alban
Kurti" <kurti@...icto.ai>, "Alexandre Courbot" <acourbot@...dia.com>,
<rust-for-linux@...r.kernel.org>, <linux-kernel@...r.kernel.org>
Subject: Re: [PATCH] rust: pin-init: add references to previously
initialized fields
(Cc: Alex)
On Fri Sep 5, 2025 at 7:21 PM CEST, Boqun Feng wrote:
> On Fri, Sep 05, 2025 at 04:00:46PM +0200, Benno Lossin wrote:
>> After initializing a field in an initializer macro, create a variable
>> holding a reference that points at that field. The type is either
>> `Pin<&mut T>` or `&mut T` depending on the field's structural pinning
>> kind.
>>
>
> It's hard to review because of lack of examples. Could you or Danilo
> share some sample usages? Thanks!
Sure, here's an example. Eventually, it's going to be a bit more complicated,
but basically that's it.
#[pin_data(PinnedDrop)]
pub(crate) struct Gpu {
spec: Spec,
bar: Arc<Devres<Bar0>>,
sysmem_flush: SysmemFlush,
gsp_falcon: Falcon<Gsp>,
sec2_falcon: Falcon<Sec2>,
#[pin]
gsp: Gsp,
}
impl Gpu {
pub(crate) fn new(
dev: &Device<Bound>,
bar: Arc<Devres<Bar0>>,
) -> impl PinInit<Self, Error> + '_ {
try_pin_init(Self {
bar,
spec: Spec::new(bar.access(dev)?)?,
gsp_falcon: Falcon::<Gsp>::new(dev, spec.chipset)?,
sec2_falcon: Falcon::<Sec2>::new(dev, spec.chipset)?,
sysmem_flush: SysmemFlush::register(dev, bar.access(dev)?, spec.chipset)?
gsp <- Gsp::new(gsp_falcon, sec2_falcon, sysmem_flush)?,
})
}
}
Imagine how much unsafe pointer mess this needs without this patch. :)
Powered by blists - more mailing lists