summaryrefslogtreecommitdiff
path: root/rust/kernel
diff options
context:
space:
mode:
authorJosef Ippisch <josef.ippisch.dev@mailbox.org>2026-07-28 19:31:19 +0200
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2026-07-31 11:08:29 +0200
commit6e33dee41d88411be38bcd58f8e85f233721476e (patch)
tree1ade24030d4a91cfad12158fa0cc55edb0adc3b6 /rust/kernel
parent17fcdecb14b463863890d3101457f6256f90e17a (diff)
downloadlinux-next-6e33dee41d88411be38bcd58f8e85f233721476e.tar.gz
linux-next-6e33dee41d88411be38bcd58f8e85f233721476e.zip
rust: debugfs: migrate debugfs traits requirements to zerocopy
Migrate `BinaryWriter` and `BinaryReaderMut`'s default implementation's requirements on T from `kernel::transmute` traits to `zerocopy` traits. The additional `zerocopy::Immutable` requirement on `BinaryWriter` does not further restrict the types in practice but is rather a more explicit requirement (that the type does not have interior mutability) and is required by zerocopy for the `as_bytes()` function. Suggested-by: Joshua Liebow-Feeser <joshlf@google.com> Suggested-by: Miguel Ojeda <ojeda@kernel.org> Link: https://github.com/Rust-for-Linux/linux/issues/975 Link: https://github.com/Rust-for-Linux/linux/issues/1241 Signed-off-by: Josef Ippisch <josef.ippisch.dev@mailbox.org> Link: https://patch.msgid.link/20260728-migrate-binarywriter-to-zerocopy-intobytes-v2-1-0a4ec1d3ead4@mailbox.org Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'rust/kernel')
-rw-r--r--rust/kernel/debugfs/traits.rs24
1 files changed, 11 insertions, 13 deletions
diff --git a/rust/kernel/debugfs/traits.rs b/rust/kernel/debugfs/traits.rs
index 8c39524b6a99..b794f7dd7e14 100644
--- a/rust/kernel/debugfs/traits.rs
+++ b/rust/kernel/debugfs/traits.rs
@@ -18,10 +18,6 @@ use crate::{
Arc,
Mutex, //
},
- transmute::{
- AsBytes,
- FromBytes, //
- },
uaccess::{
UserSliceReader,
UserSliceWriter, //
@@ -36,6 +32,8 @@ use core::{
str::FromStr,
};
+use zerocopy::Immutable;
+
/// A trait for types that can be written into a string.
///
/// This works very similarly to `Debug`, and is automatically implemented if `Debug` is
@@ -76,8 +74,8 @@ pub trait BinaryWriter {
) -> Result<usize>;
}
-// Base implementation for any `T: AsBytes`.
-impl<T: AsBytes> BinaryWriter for T {
+// Base implementation for any `T: Immutable + IntoBytes`.
+impl<T: Immutable + IntoBytes> BinaryWriter for T {
fn write_to_slice(
&self,
writer: &mut UserSliceWriter,
@@ -147,7 +145,7 @@ where
// Delegate for `Vec<T, A>`.
impl<T, A> BinaryWriter for Vec<T, A>
where
- T: AsBytes,
+ T: Immutable + IntoBytes,
A: Allocator,
{
fn write_to_slice(
@@ -157,7 +155,7 @@ where
) -> Result<usize> {
let slice = self.as_slice();
- // SAFETY: `T: AsBytes` allows us to treat `&[T]` as `&[u8]`.
+ // SAFETY: `T: Immutable + IntoBytes` allows us to treat `&[T]` as `&[u8]`.
let buffer = unsafe {
core::slice::from_raw_parts(slice.as_ptr().cast(), core::mem::size_of_val(slice))
};
@@ -230,14 +228,14 @@ pub trait BinaryReaderMut {
) -> Result<usize>;
}
-// Base implementation for any `T: AsBytes + FromBytes`.
-impl<T: AsBytes + FromBytes> BinaryReaderMut for T {
+// Base implementation for any `T: FromBytes + IntoBytes`.
+impl<T: FromBytes + IntoBytes> BinaryReaderMut for T {
fn read_from_slice_mut(
&mut self,
reader: &mut UserSliceReader,
offset: &mut file::Offset,
) -> Result<usize> {
- reader.read_slice_file(self.as_bytes_mut(), offset)
+ reader.read_slice_file(self.as_mut_bytes(), offset)
}
}
@@ -255,7 +253,7 @@ impl<T: ?Sized + BinaryReaderMut, A: Allocator> BinaryReaderMut for Box<T, A> {
// Delegate for `Vec<T, A>`: Support a `Vec<T, A>` with an outer lock.
impl<T, A> BinaryReaderMut for Vec<T, A>
where
- T: AsBytes + FromBytes,
+ T: FromBytes + IntoBytes,
A: Allocator,
{
fn read_from_slice_mut(
@@ -265,7 +263,7 @@ where
) -> Result<usize> {
let slice = self.as_mut_slice();
- // SAFETY: `T: AsBytes + FromBytes` allows us to treat `&mut [T]` as `&mut [u8]`.
+ // SAFETY: `T: FromBytes + IntoBytes` allow us to treat `&mut [T]` as `&mut [u8]`.
let buffer = unsafe {
core::slice::from_raw_parts_mut(
slice.as_mut_ptr().cast(),