2023-07-14 09:38:23

by Asahi Lina

[permalink] [raw]
Subject: [PATCH RFC 01/11] rust: types: Add Opaque::zeroed()

Opaque types are internally MaybeUninit, so it's safe to actually
zero-initialize them as long as we don't claim they are initialized.
This is useful for many FFI types that are expected to be zero-inited by
the user.

Signed-off-by: Asahi Lina <[email protected]>
---
rust/kernel/types.rs | 5 +++++
1 file changed, 5 insertions(+)

diff --git a/rust/kernel/types.rs b/rust/kernel/types.rs
index 1e5380b16ed5..185d3493857e 100644
--- a/rust/kernel/types.rs
+++ b/rust/kernel/types.rs
@@ -237,6 +237,11 @@ pub const fn uninit() -> Self {
Self(MaybeUninit::uninit())
}

+ /// Creates a zeroed value.
+ pub fn zeroed() -> Self {
+ Self(MaybeUninit::zeroed())
+ }
+
/// Creates a pin-initializer from the given initializer closure.
///
/// The returned initializer calls the given closure with the pointer to the inner `T` of this

--
2.40.1



2023-07-14 10:33:07

by Alice Ryhl

[permalink] [raw]
Subject: Re: [PATCH RFC 01/11] rust: types: Add Opaque::zeroed()

Asahi Lina <[email protected]> writes:
> Opaque types are internally MaybeUninit, so it's safe to actually
> zero-initialize them as long as we don't claim they are initialized.
> This is useful for many FFI types that are expected to be zero-inited by
> the user.
>
> Signed-off-by: Asahi Lina <[email protected]>

LGTM. This is useful on its own.

Reviewed-by: Alice Ryhl <[email protected]>


2023-07-15 14:47:31

by Gary Guo

[permalink] [raw]
Subject: Re: [PATCH RFC 01/11] rust: types: Add Opaque::zeroed()

On Fri, 14 Jul 2023 18:13:53 +0900
Asahi Lina <[email protected]> wrote:

> Opaque types are internally MaybeUninit, so it's safe to actually
> zero-initialize them as long as we don't claim they are initialized.
> This is useful for many FFI types that are expected to be zero-inited by
> the user.
>
> Signed-off-by: Asahi Lina <[email protected]>

Reviewed-by: Gary Guo <[email protected]>

I agree with Alice that this patch can accepted on its own.

> ---
> rust/kernel/types.rs | 5 +++++
> 1 file changed, 5 insertions(+)
>
> diff --git a/rust/kernel/types.rs b/rust/kernel/types.rs
> index 1e5380b16ed5..185d3493857e 100644
> --- a/rust/kernel/types.rs
> +++ b/rust/kernel/types.rs
> @@ -237,6 +237,11 @@ pub const fn uninit() -> Self {
> Self(MaybeUninit::uninit())
> }
>
> + /// Creates a zeroed value.
> + pub fn zeroed() -> Self {
> + Self(MaybeUninit::zeroed())
> + }
> +
> /// Creates a pin-initializer from the given initializer closure.
> ///
> /// The returned initializer calls the given closure with the pointer to the inner `T` of this
>