mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-03 18:20:25 +02:00 
			
		
		
		
	Replace the examples in the documentation by the ones from the user-space version and introduce the standalone examples from the user-space version such as the `CMutex<T>` type. The `CMutex<T>` example from the pinned-init repository [1] is used in several documentation examples in the user-space version instead of the kernel `Mutex<T>` type (as it's not available). In order to split off the pin-init crate, all examples need to be free of kernel-specific types. Link: https://github.com/rust-for-Linux/pinned-init [1] Signed-off-by: Benno Lossin <benno.lossin@proton.me> Reviewed-by: Fiona Behrens <me@kloenk.dev> Tested-by: Andreas Hindborg <a.hindborg@kernel.org> Link: https://lore.kernel.org/r/20250308110339.2997091-6-benno.lossin@proton.me Signed-off-by: Miguel Ojeda <ojeda@kernel.org>
		
			
				
	
	
		
			39 lines
		
	
	
	
		
			797 B
		
	
	
	
		
			Rust
		
	
	
	
	
	
			
		
		
	
	
			39 lines
		
	
	
	
		
			797 B
		
	
	
	
		
			Rust
		
	
	
	
	
	
// SPDX-License-Identifier: Apache-2.0 OR MIT
 | 
						|
 | 
						|
use pin_init::*;
 | 
						|
 | 
						|
// Struct with size over 1GiB
 | 
						|
#[derive(Debug)]
 | 
						|
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 <- zeroed() })
 | 
						|
    }
 | 
						|
}
 | 
						|
 | 
						|
fn main() {
 | 
						|
    // we want to initialize the struct in-place, otherwise we would get a stackoverflow
 | 
						|
    let buf: Box<BigStruct> = Box::init(init!(BigStruct {
 | 
						|
        buf <- zeroed(),
 | 
						|
        a: 7,
 | 
						|
        b: 186,
 | 
						|
        c: 7789,
 | 
						|
        d: 34,
 | 
						|
        managed_buf <- ManagedBuf::new(),
 | 
						|
    }))
 | 
						|
    .unwrap();
 | 
						|
    println!("{}", core::mem::size_of_val(&*buf));
 | 
						|
}
 |