mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2026-05-14 21:38:46 +02:00
101b7cf006
The name `zeroed` is a much better fit for a function that returns the type by-value. Link: https://github.com/Rust-for-Linux/pin-init/pull/56/commits/7dbe38682c9725405bab91dcabe9c4d8893d2f5e [ 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>
44 lines
935 B
Rust
44 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));
|
|
}
|
|
}
|