Re: [PATCH v2 01/16] rust: io: add static `cast()` method for views
"Alexandre Courbot" <[email protected]>
| Newsgroups | dev.linux.lists.driver-core,dev.linux.lists.nova-gpu,org.freedesktop.lists.dri-devel,org.kernel.vger.linux-kernel,org.kernel.vger.linux-pci,org.kernel.vger.rust-for-linux |
|---|---|
| Message-ID | <[email protected]> |
On Thu Aug 6, 2026 at 1:35 AM JST, Gary Guo wrote: > Add a compile-time checked variant of `try_cast()` using the minimum size > and alignment information. > > Signed-off-by: Gary Guo <[email protected]> > --- > rust/kernel/io.rs | 39 +++++++++++++++++++++++++++++++++++++++ > 1 file changed, 39 insertions(+) > > diff --git a/rust/kernel/io.rs b/rust/kernel/io.rs > index a38c20ba3d23..adfc555de7d0 100644 > --- a/rust/kernel/io.rs > +++ b/rust/kernel/io.rs > @@ -436,6 +436,45 @@ fn is_empty<T>(self) -> bool > self.len() == 0 > } > > + /// Convert into a different typed I/O view. > + /// > + /// The target type must be known (statically) to be of the same or smaller size to current > + /// type, and the current view is properly aligned for the target type. grammar nit: s/is/must be. > + /// > + /// # Examples > + /// > + /// ```no_run > + /// use kernel::io::{ > + /// io_project, > + /// Mmio, > + /// Io, > + /// Region, > + /// }; > + /// #[derive(FromBytes, IntoBytes)] > + /// #[repr(C)] > + /// struct MyStruct { field: u32, } > + /// > + /// # fn test(mmio: &Mmio<'_, Region<0x1000>>) { > + /// // let mmio: Mmio<'_, Region>; Should this be `Region<0x1000>`? Because as written the `cast` right below wouldn't build since `Region::MIN_SIZE == 0`. Also, looking at Sashiko's comment about `KnownSize` we should maybe bite the bullet and make it unsafe? There was some talk about it [1] but the reason why we kept it safe back then doesn't seem to protect us here. [1] https://lore.kernel.org/rust-for-linux/[email protected]/