Re: [PATCH v2 5/6] rust: Add dma_fence abstractions
"Gary Guo" <[email protected]>
| Newsgroups | org.kernel.vger.rcu,org.freedesktop.lists.dri-devel,org.kernel.vger.linux-kernel,org.kernel.vger.linux-media,org.kernel.vger.rust-for-linux |
|---|---|
| Message-ID | <[email protected]> |
On Tue Jun 16, 2026 at 3:38 PM BST, Philipp Stanner wrote: > On Tue, 2026-06-16 at 15:47 +0300, Onur Özkan wrote: >> On Tue, 16 Jun 2026 10:28:17 +0200 >> > + >> > + // DriverFenceData is repr(C) and a Fence is its first member. >> > + let fence_data_ptr = fence_ptr as *mut DriverFenceData<T>; >> >> Either the field ordering on the type or this code is wrong because the first >> member of DriverFenceData is `rcu_head`. > > Yeah, that's a bug introduced in this revision. Thx for pointing it > out. Already fixed it downstream. > > I'm just wondering why my test did not blow up. > >> > >> > +} >> >> I am unsure whether it is safe to cast the pointer in Fence::from_raw without >> Fence being #[repr(transparent)] as the layout compatibility is not guaranteed >> explicitly. > > Shouldn't #[repr(C)] do that trick, too? Do you need both? > > Who can answer that? You have `#[repr(C)]` for DriverFence, but not on `Fence`. `Fence::from_raw` does require layout equivalence between `Fence` and `bindings::dma_fence` and this is done by adding `#[repr(transparent)]` on `Fence`. Best, Gary