Re: [PATCH v2 01/16] rust: io: add static `cast()` method for views

"Gary Guo" <[email protected]>
Newsgroups dev.linux.lists.nova-gpu,dev.linux.lists.driver-core,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 Mon Aug 10, 2026 at 10:29 AM BST, Alexandre Courbot wrote:
> 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`.

Indeed, I forgot to update the comment after copying this from try_cast doc.

>
> 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]/

There isn't a way to create !Sized I/O regions safely right now, so I think
everything is still okay. But making `KnownSize` unsafe sounds reasonable too.

Best,
Gary
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.