forked from mirrors/linux
		
	 84837cf6fa
			
		
	
	
		84837cf6fa
		
	
	
	
	
		
			
			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));
 | |
| }
 |