mirror of
https://github.com/torvalds/linux.git
synced 2025-11-01 00:58:39 +02:00
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>
54 lines
1.2 KiB
C
54 lines
1.2 KiB
C
// SPDX-License-Identifier: GPL-2.0
|
|
/*
|
|
* Non-trivial C macros cannot be used in Rust. Similarly, inlined C functions
|
|
* cannot be called either. This file explicitly creates functions ("helpers")
|
|
* that wrap those so that they can be called from Rust.
|
|
*
|
|
* Sorted alphabetically.
|
|
*/
|
|
|
|
#include "auxiliary.c"
|
|
#include "blk.c"
|
|
#include "bug.c"
|
|
#include "build_assert.c"
|
|
#include "build_bug.c"
|
|
#include "clk.c"
|
|
#include "completion.c"
|
|
#include "cpu.c"
|
|
#include "cpufreq.c"
|
|
#include "cpumask.c"
|
|
#include "cred.c"
|
|
#include "device.c"
|
|
#include "dma.c"
|
|
#include "drm.c"
|
|
#include "err.c"
|
|
#include "fs.c"
|
|
#include "io.c"
|
|
#include "jump_label.c"
|
|
#include "kunit.c"
|
|
#include "mm.c"
|
|
#include "mutex.c"
|
|
#include "of.c"
|
|
#include "page.c"
|
|
#include "pci.c"
|
|
#include "pid_namespace.c"
|
|
#include "platform.c"
|
|
#include "poll.c"
|
|
#include "property.c"
|
|
#include "rbtree.c"
|
|
#include "rcu.c"
|
|
#include "refcount.c"
|
|
#include "regulator.c"
|
|
#include "scatterlist.c"
|
|
#include "security.c"
|
|
#include "signal.c"
|
|
#include "slab.c"
|
|
#include "spinlock.c"
|
|
#include "sync.c"
|
|
#include "task.c"
|
|
#include "time.c"
|
|
#include "uaccess.c"
|
|
#include "vmalloc.c"
|
|
#include "wait.c"
|
|
#include "workqueue.c"
|
|
#include "xarray.c"
|