* [PATCH v5 0/2] rust: transmute: add `as_bytes(_mut)` methods for `AsBytes` trait
@ 2025-08-01 13:24 Alexandre Courbot
2025-08-01 13:24 ` [PATCH v5 1/2] rust: transmute: add `as_bytes` method " Alexandre Courbot
` (2 more replies)
0 siblings, 3 replies; 7+ messages in thread
From: Alexandre Courbot @ 2025-08-01 13:24 UTC (permalink / raw)
To: Abdiel Janulgue, Danilo Krummrich, Daniel Almeida, Robin Murphy,
Andreas Hindborg, Miguel Ojeda, Alex Gaynor, Boqun Feng, Gary Guo,
Björn Roy Baron, Benno Lossin, Alice Ryhl, Trevor Gross
Cc: Christian S. Lima, rust-for-linux, linux-kernel,
Alexandre Courbot
This is the sister patch of [1], providing an `as_bytes` method for
`AsBytes`, and an `as_bytes_mut` accessor for types also implementing
`FromBytes`.
It is going to be used in Nova, but should also be universally useful -
if anything, it felt a bit strange that `AsBytes` did not provide this
so far.
[1] https://lore.kernel.org/rust-for-linux/20250624042802.105623-1-christiansantoslima21@gmail.com/
Signed-off-by: Alexandre Courbot <acourbot@nvidia.com>
---
Changes in v5:
- Add `CAST:` comments above cast operations. (thanks Benno!)
- Link to v4: https://lore.kernel.org/r/20250728-as_bytes-v4-0-b9156af37e33@nvidia.com
Changes in v4:
- Add the `as_bytes_mut` method for types also implementing `FromBytes`.
(thanks Alice!)
- Link to v3: https://lore.kernel.org/r/20250726-as_bytes-v3-1-eb7514faab28@nvidia.com
Changes in v3:
- Use `ptr::from_ref` instead of `as *const T`.
- Link to v2: https://lore.kernel.org/r/20250725-as_bytes-v2-1-c6584c211a6c@nvidia.com
Changes in v2:
- Use `size_of_val` to provide a default implementation for both `Sized`
and non-`Sized` types, and remove `AsBytesSized`. (thanks Alice!)
- Link to v1: https://lore.kernel.org/r/20250725-as_bytes-v1-1-6f06a3744f69@nvidia.com
---
Alexandre Courbot (2):
rust: transmute: add `as_bytes` method for `AsBytes` trait
rust: transmute: add `as_bytes_mut` method to `AsBytes` trait
rust/kernel/transmute.rs | 27 ++++++++++++++++++++++++++-
1 file changed, 26 insertions(+), 1 deletion(-)
---
base-commit: 14ae91a81ec8fa0bc23170d4aa16dd2a20d54105
change-id: 20250725-as_bytes-6cbc11f2e8c3
Best regards,
--
Alexandre Courbot <acourbot@nvidia.com>
^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH v5 1/2] rust: transmute: add `as_bytes` method for `AsBytes` trait
2025-08-01 13:24 [PATCH v5 0/2] rust: transmute: add `as_bytes(_mut)` methods for `AsBytes` trait Alexandre Courbot
@ 2025-08-01 13:24 ` Alexandre Courbot
2025-08-01 13:24 ` [PATCH v5 2/2] rust: transmute: add `as_bytes_mut` method to " Alexandre Courbot
2025-08-19 9:49 ` [PATCH v5 0/2] rust: transmute: add `as_bytes(_mut)` methods for " Danilo Krummrich
2 siblings, 0 replies; 7+ messages in thread
From: Alexandre Courbot @ 2025-08-01 13:24 UTC (permalink / raw)
To: Abdiel Janulgue, Danilo Krummrich, Daniel Almeida, Robin Murphy,
Andreas Hindborg, Miguel Ojeda, Alex Gaynor, Boqun Feng, Gary Guo,
Björn Roy Baron, Benno Lossin, Alice Ryhl, Trevor Gross
Cc: Christian S. Lima, rust-for-linux, linux-kernel,
Alexandre Courbot
Every type that implements `AsBytes` should be able to provide its byte
representation. Introduce the `as_bytes` method that returns the
implementer as a stream of bytes, and provide a default implementation
that should be suitable for any type that satisfies `AsBytes`'s safety
requirements.
Reviewed-by: Danilo Krummrich <dakr@kernel.org>
Reviewed-by: Benno Lossin <lossin@kernel.org>
Reviewed-by: Alice Ryhl <aliceryhl@google.com>
Reviewed-by: Gary Guo <gary@garyguo.net>
Signed-off-by: Alexandre Courbot <acourbot@nvidia.com>
---
rust/kernel/transmute.rs | 12 +++++++++++-
1 file changed, 11 insertions(+), 1 deletion(-)
diff --git a/rust/kernel/transmute.rs b/rust/kernel/transmute.rs
index 1c7d43771a37b90150de86699f114a2ffb84db91..08e6f0ff92a563e90895efa31f31f887aa05a0ae 100644
--- a/rust/kernel/transmute.rs
+++ b/rust/kernel/transmute.rs
@@ -47,7 +47,17 @@ macro_rules! impl_frombytes {
///
/// Values of this type may not contain any uninitialized bytes. This type must not have interior
/// mutability.
-pub unsafe trait AsBytes {}
+pub unsafe trait AsBytes {
+ /// Returns `self` as a slice of bytes.
+ fn as_bytes(&self) -> &[u8] {
+ // CAST: `Self` implements `AsBytes` thus all bytes of `self` are initialized.
+ let data = core::ptr::from_ref(self).cast::<u8>();
+ let len = size_of_val(self);
+
+ // SAFETY: `data` is non-null and valid for reads of `len * sizeof::<u8>()` bytes.
+ unsafe { core::slice::from_raw_parts(data, len) }
+ }
+}
macro_rules! impl_asbytes {
($($({$($generics:tt)*})? $t:ty, )*) => {
--
2.50.1
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH v5 2/2] rust: transmute: add `as_bytes_mut` method to `AsBytes` trait
2025-08-01 13:24 [PATCH v5 0/2] rust: transmute: add `as_bytes(_mut)` methods for `AsBytes` trait Alexandre Courbot
2025-08-01 13:24 ` [PATCH v5 1/2] rust: transmute: add `as_bytes` method " Alexandre Courbot
@ 2025-08-01 13:24 ` Alexandre Courbot
2025-08-01 17:15 ` Benno Lossin
2025-08-19 9:49 ` [PATCH v5 0/2] rust: transmute: add `as_bytes(_mut)` methods for " Danilo Krummrich
2 siblings, 1 reply; 7+ messages in thread
From: Alexandre Courbot @ 2025-08-01 13:24 UTC (permalink / raw)
To: Abdiel Janulgue, Danilo Krummrich, Daniel Almeida, Robin Murphy,
Andreas Hindborg, Miguel Ojeda, Alex Gaynor, Boqun Feng, Gary Guo,
Björn Roy Baron, Benno Lossin, Alice Ryhl, Trevor Gross
Cc: Christian S. Lima, rust-for-linux, linux-kernel,
Alexandre Courbot
Types that implement both `AsBytes` and `FromBytes` can be safely
modified as a slice of bytes. Add a `as_bytes_mut` method for that
purpose.
Reviewed-by: Alice Ryhl <aliceryhl@google.com>
Reviewed-by: Danilo Krummrich <dakr@kernel.org>
Reviewed-by: Gary Guo <gary@garyguo.net>
Signed-off-by: Alexandre Courbot <acourbot@nvidia.com>
---
rust/kernel/transmute.rs | 15 +++++++++++++++
1 file changed, 15 insertions(+)
diff --git a/rust/kernel/transmute.rs b/rust/kernel/transmute.rs
index 08e6f0ff92a563e90895efa31f31f887aa05a0ae..5b2a53aa5df041e56be0c23993f684aa803551ae 100644
--- a/rust/kernel/transmute.rs
+++ b/rust/kernel/transmute.rs
@@ -57,6 +57,21 @@ fn as_bytes(&self) -> &[u8] {
// SAFETY: `data` is non-null and valid for reads of `len * sizeof::<u8>()` bytes.
unsafe { core::slice::from_raw_parts(data, len) }
}
+
+ /// Returns `self` as a mutable slice of bytes.
+ fn as_bytes_mut(&mut self) -> &mut [u8]
+ where
+ Self: FromBytes,
+ {
+ // CAST: `Self` implements both `AsBytes` and `FromBytes` thus making `Self`
+ // bi-directionally transmutable to `[u8; size_of_val(self)]`.
+ let data = core::ptr::from_mut(self).cast::<u8>();
+ let len = size_of_val(self);
+
+ // SAFETY: `data` is non-null and valid for read and writes of `len * sizeof::<u8>()`
+ // bytes.
+ unsafe { core::slice::from_raw_parts_mut(data, len) }
+ }
}
macro_rules! impl_asbytes {
--
2.50.1
^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [PATCH v5 2/2] rust: transmute: add `as_bytes_mut` method to `AsBytes` trait
2025-08-01 13:24 ` [PATCH v5 2/2] rust: transmute: add `as_bytes_mut` method to " Alexandre Courbot
@ 2025-08-01 17:15 ` Benno Lossin
0 siblings, 0 replies; 7+ messages in thread
From: Benno Lossin @ 2025-08-01 17:15 UTC (permalink / raw)
To: Alexandre Courbot, Abdiel Janulgue, Danilo Krummrich,
Daniel Almeida, Robin Murphy, Andreas Hindborg, Miguel Ojeda,
Alex Gaynor, Boqun Feng, Gary Guo, Björn Roy Baron,
Alice Ryhl, Trevor Gross
Cc: Christian S. Lima, rust-for-linux, linux-kernel
On Fri Aug 1, 2025 at 3:24 PM CEST, Alexandre Courbot wrote:
> Types that implement both `AsBytes` and `FromBytes` can be safely
> modified as a slice of bytes. Add a `as_bytes_mut` method for that
> purpose.
>
> Reviewed-by: Alice Ryhl <aliceryhl@google.com>
> Reviewed-by: Danilo Krummrich <dakr@kernel.org>
> Reviewed-by: Gary Guo <gary@garyguo.net>
> Signed-off-by: Alexandre Courbot <acourbot@nvidia.com>
Reviewed-by: Benno Lossin <lossin@kernel.org>
---
Cheers,
Benno
> ---
> rust/kernel/transmute.rs | 15 +++++++++++++++
> 1 file changed, 15 insertions(+)
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH v5 0/2] rust: transmute: add `as_bytes(_mut)` methods for `AsBytes` trait
2025-08-01 13:24 [PATCH v5 0/2] rust: transmute: add `as_bytes(_mut)` methods for `AsBytes` trait Alexandre Courbot
2025-08-01 13:24 ` [PATCH v5 1/2] rust: transmute: add `as_bytes` method " Alexandre Courbot
2025-08-01 13:24 ` [PATCH v5 2/2] rust: transmute: add `as_bytes_mut` method to " Alexandre Courbot
@ 2025-08-19 9:49 ` Danilo Krummrich
2025-08-21 14:38 ` Miguel Ojeda
2 siblings, 1 reply; 7+ messages in thread
From: Danilo Krummrich @ 2025-08-19 9:49 UTC (permalink / raw)
To: Miguel Ojeda
Cc: Alexandre Courbot, Abdiel Janulgue, Daniel Almeida, Robin Murphy,
Andreas Hindborg, Alex Gaynor, Boqun Feng, Gary Guo,
Björn Roy Baron, Benno Lossin, Alice Ryhl, Trevor Gross,
Christian S. Lima, rust-for-linux, linux-kernel
On 8/1/25 3:24 PM, Alexandre Courbot wrote:
> This is the sister patch of [1], providing an `as_bytes` method for
> `AsBytes`, and an `as_bytes_mut` accessor for types also implementing
> `FromBytes`.
>
> It is going to be used in Nova, but should also be universally useful -
> if anything, it felt a bit strange that `AsBytes` did not provide this
> so far.
Miguel, any concerns taking this through the nova tree?
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH v5 0/2] rust: transmute: add `as_bytes(_mut)` methods for `AsBytes` trait
2025-08-19 9:49 ` [PATCH v5 0/2] rust: transmute: add `as_bytes(_mut)` methods for " Danilo Krummrich
@ 2025-08-21 14:38 ` Miguel Ojeda
2025-08-22 0:26 ` Alexandre Courbot
0 siblings, 1 reply; 7+ messages in thread
From: Miguel Ojeda @ 2025-08-21 14:38 UTC (permalink / raw)
To: Danilo Krummrich
Cc: Miguel Ojeda, Alexandre Courbot, Abdiel Janulgue, Daniel Almeida,
Robin Murphy, Andreas Hindborg, Alex Gaynor, Boqun Feng, Gary Guo,
Björn Roy Baron, Benno Lossin, Alice Ryhl, Trevor Gross,
Christian S. Lima, rust-for-linux, linux-kernel
On Tue, Aug 19, 2025 at 11:49 AM Danilo Krummrich <dakr@kernel.org> wrote:
>
> Miguel, any concerns taking this through the nova tree?
If it is needed for something this same cycle in Nova, then please go ahead:
Acked-by: Miguel Ojeda <ojeda@kernel.org>
Thanks!
Cheers,
Miguel
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH v5 0/2] rust: transmute: add `as_bytes(_mut)` methods for `AsBytes` trait
2025-08-21 14:38 ` Miguel Ojeda
@ 2025-08-22 0:26 ` Alexandre Courbot
0 siblings, 0 replies; 7+ messages in thread
From: Alexandre Courbot @ 2025-08-22 0:26 UTC (permalink / raw)
To: Miguel Ojeda, Danilo Krummrich
Cc: Miguel Ojeda, Abdiel Janulgue, Daniel Almeida, Robin Murphy,
Andreas Hindborg, Alex Gaynor, Boqun Feng, Gary Guo,
Björn Roy Baron, Benno Lossin, Alice Ryhl, Trevor Gross,
Christian S. Lima, rust-for-linux, linux-kernel
On Thu Aug 21, 2025 at 11:38 PM JST, Miguel Ojeda wrote:
> On Tue, Aug 19, 2025 at 11:49 AM Danilo Krummrich <dakr@kernel.org> wrote:
>>
>> Miguel, any concerns taking this through the nova tree?
>
> If it is needed for something this same cycle in Nova, then please go ahead:
>
> Acked-by: Miguel Ojeda <ojeda@kernel.org>
Thanks Miguel! Yes, we are planning use it this cycle in Nova.
I'll push this into nova-next later today.
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2025-08-22 0:27 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-08-01 13:24 [PATCH v5 0/2] rust: transmute: add `as_bytes(_mut)` methods for `AsBytes` trait Alexandre Courbot
2025-08-01 13:24 ` [PATCH v5 1/2] rust: transmute: add `as_bytes` method " Alexandre Courbot
2025-08-01 13:24 ` [PATCH v5 2/2] rust: transmute: add `as_bytes_mut` method to " Alexandre Courbot
2025-08-01 17:15 ` Benno Lossin
2025-08-19 9:49 ` [PATCH v5 0/2] rust: transmute: add `as_bytes(_mut)` methods for " Danilo Krummrich
2025-08-21 14:38 ` Miguel Ojeda
2025-08-22 0:26 ` Alexandre Courbot
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).