mirror of
				https://github.com/torvalds/linux.git
				synced 2025-10-31 16:48:26 +02:00 
			
		
		
		
	|  05aa6fb1c2 Add a safe Rust abstraction for the kernel's scatter-gather list facilities (`struct scatterlist` and `struct sg_table`). This commit introduces `SGTable<T>`, a wrapper that uses a generic parameter to provide compile-time guarantees about ownership and lifetime. The abstraction provides two primary states: - `SGTable<Owned<P>>`: Represents a table whose resources are fully managed by Rust. It takes ownership of a page provider `P`, allocates the underlying `struct sg_table`, maps it for DMA, and handles all cleanup automatically upon drop. The DMA mapping's lifetime is tied to the associated device using `Devres`, ensuring it is correctly unmapped before the device is unbound. - `SGTable<Borrowed>` (or just `SGTable`): A zero-cost representation of an externally managed `struct sg_table`. It is created from a raw pointer using `SGTable::from_raw()` and provides a lifetime-bound reference (`&'a SGTable`) for operations like iteration. The API exposes a safe iterator that yields `&SGEntry` references, allowing drivers to easily access the DMA address and length of each segment in the list. Reviewed-by: Alice Ryhl <aliceryhl@google.com> Reviewed-by: Alexandre Courbot <acourbot@nvidia.com> Tested-by: Alexandre Courbot <acourbot@nvidia.com> Reviewed-by: Daniel Almeida <daniel.almeida@collabora.com> Reviewed-by: Lyude Paul <lyude@redhat.com> Co-developed-by: Abdiel Janulgue <abdiel.janulgue@gmail.com> Signed-off-by: Abdiel Janulgue <abdiel.janulgue@gmail.com> Link: https://lore.kernel.org/r/20250828133323.53311-4-dakr@kernel.org Signed-off-by: Danilo Krummrich <dakr@kernel.org> | ||
|---|---|---|
| .. | ||
| auxiliary.c | ||
| blk.c | ||
| bug.c | ||
| build_assert.c | ||
| build_bug.c | ||
| clk.c | ||
| completion.c | ||
| cpu.c | ||
| cpufreq.c | ||
| cpumask.c | ||
| cred.c | ||
| device.c | ||
| dma.c | ||
| drm.c | ||
| err.c | ||
| fs.c | ||
| helpers.c | ||
| io.c | ||
| jump_label.c | ||
| kunit.c | ||
| mm.c | ||
| mutex.c | ||
| of.c | ||
| page.c | ||
| pci.c | ||
| pid_namespace.c | ||
| platform.c | ||
| poll.c | ||
| property.c | ||
| rbtree.c | ||
| rcu.c | ||
| refcount.c | ||
| regulator.c | ||
| scatterlist.c | ||
| security.c | ||
| signal.c | ||
| slab.c | ||
| spinlock.c | ||
| sync.c | ||
| task.c | ||
| time.c | ||
| uaccess.c | ||
| vmalloc.c | ||
| wait.c | ||
| workqueue.c | ||
| xarray.c | ||