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

Reply via email to