mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-08-05 16:54:27 +00:00

The name `zeroed` is a much better fit for a function that returns the
type by-value.
Link: 7dbe38682c
[ also rename uses in `rust/kernel/init.rs` - Benno]
Link: https://lore.kernel.org/all/20250523145125.523275-2-lossin@kernel.org
[ Fix wrong replacement of `mem::zeroed` in the definition of `trait
Zeroable`. - Benno ]
[ Also change occurrences of `zeroed` in `configfs.rs` - Benno ]
Acked-by: Andreas Hindborg <a.hindborg@kernel.org>
Signed-off-by: Benno Lossin <lossin@kernel.org>
43 lines
935 B
Rust
43 lines
935 B
Rust
// SPDX-License-Identifier: Apache-2.0 OR MIT
|
|
|
|
use pin_init::*;
|
|
|
|
// Struct with size over 1GiB
|
|
#[derive(Debug)]
|
|
#[allow(dead_code)]
|
|
pub struct BigStruct {
|
|
buf: [u8; 1024 * 1024 * 1024],
|
|
a: u64,
|
|
b: u64,
|
|
c: u64,
|
|
d: u64,
|
|
managed_buf: ManagedBuf,
|
|
}
|
|
|
|
#[derive(Debug)]
|
|
pub struct ManagedBuf {
|
|
buf: [u8; 1024 * 1024],
|
|
}
|
|
|
|
impl ManagedBuf {
|
|
pub fn new() -> impl Init<Self> {
|
|
init!(ManagedBuf { buf <- init_zeroed() })
|
|
}
|
|
}
|
|
|
|
fn main() {
|
|
#[cfg(any(feature = "std", feature = "alloc"))]
|
|
{
|
|
// we want to initialize the struct in-place, otherwise we would get a stackoverflow
|
|
let buf: Box<BigStruct> = Box::init(init!(BigStruct {
|
|
buf <- init_zeroed(),
|
|
a: 7,
|
|
b: 186,
|
|
c: 7789,
|
|
d: 34,
|
|
managed_buf <- ManagedBuf::new(),
|
|
}))
|
|
.unwrap();
|
|
println!("{}", core::mem::size_of_val(&*buf));
|
|
}
|
|
}
|