linux/rust/helpers
Alice Ryhl da939ef4c4 rust: maple_tree: add MapleTree
Patch series "Add Rust abstraction for Maple Trees", v3.

This will be used in the Tyr driver [1] to allocate from the GPU's VA
space that is not owned by userspace, but by the kernel, for kernel GPU
mappings.

Danilo tells me that in nouveau, the maple tree is used for keeping track
of "VM regions" on top of GPUVM, and that he will most likely end up doing
the same in the Rust Nova driver as well.

These abstractions intentionally do not expose any way to make use of
external locking.  You are required to use the internal spinlock.  For
now, we do not support loads that only utilize rcu for protection.

This contains some parts taken from Andrew Ballance's RFC [2] from April. 
However, it has also been reworked significantly compared to that RFC
taking the use-cases in Tyr into account.


This patch (of 3):

The maple tree will be used in the Tyr driver to allocate and keep track
of GPU allocations created internally (i.e.  not by userspace).  It will
likely also be used in the Nova driver eventually.

This adds the simplest methods for additional and removal that do not
require any special care with respect to concurrency.

This implementation is based on the RFC by Andrew but with significant
changes to simplify the implementation.

[ojeda@kernel.org: fix intra-doc links]
  Link: https://lkml.kernel.org/r/20250910140212.997771-1-ojeda@kernel.org
Link: https://lkml.kernel.org/r/20250902-maple-tree-v3-0-fb5c8958fb1e@google.com
Link: https://lkml.kernel.org/r/20250902-maple-tree-v3-1-fb5c8958fb1e@google.com
Link: https://lore.kernel.org/r/20250627-tyr-v1-1-cb5f4c6ced46@collabora.com [1]
Link: https://lore.kernel.org/r/20250405060154.1550858-1-andrewjballance@gmail.com [2]
Co-developed-by: Andrew Ballance <andrewjballance@gmail.com>
Signed-off-by: Andrew Ballance <andrewjballance@gmail.com>
Signed-off-by: Alice Ryhl <aliceryhl@google.com>
Reviewed-by: Danilo Krummrich <dakr@kernel.org>
Cc: Andreas Hindborg <a.hindborg@kernel.org>
Cc: Björn Roy Baron <bjorn3_gh@protonmail.com>
Cc: Boqun Feng <boqun.feng@gmail.com>
Cc: Daniel Almeida <daniel.almeida@collabora.com>
Cc: Gary Guo <gary@garyguo.net>
Cc: Liam Howlett <liam.howlett@oracle.com>
Cc: Lorenzo Stoakes <lorenzo.stoakes@oracle.com>
Cc: Miguel Ojeda <ojeda@kernel.org>
Cc: Trevor Gross <tmgross@umich.edu>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
2025-09-21 14:22:19 -07:00
..
auxiliary.c rust: auxiliary: use generic device drvdata accessors 2025-07-09 00:04:33 +02:00
blk.c
bug.c rust: Add warn_on macro 2025-07-23 02:05:58 +02:00
build_assert.c
build_bug.c rust: helpers: remove unnecessary header includes 2024-10-21 17:35:59 +02:00
clk.c rust: clk: Add helpers for Rust code 2025-05-19 12:55:40 +05:30
completion.c rust: completion: implement initial abstraction 2025-06-13 23:46:56 +02:00
cpu.c rust: cpu: Add CpuId::current() to retrieve current CPU ID 2025-06-12 10:31:28 +05:30
cpufreq.c rust: cpufreq: Add initial abstractions for cpufreq framework 2025-05-20 11:21:10 +05:30
cpumask.c rust: cpumask: Add few more helpers 2025-05-19 12:55:40 +05:30
cred.c rust: cred: add Rust abstraction for `struct cred` 2024-09-30 13:02:28 +02:00
device.c rust: device: add drvdata accessors 2025-07-09 00:04:33 +02:00
dma.c rust: dma: add DMA addressing capabilities 2025-07-19 19:36:51 +02:00
drm.c rust: drm: gem: Add GEM object abstraction 2025-04-28 10:08:23 +02:00
err.c rust: helpers: remove unnecessary header includes 2024-10-21 17:35:59 +02:00
fs.c rust: file: add Rust abstraction for `struct file` 2024-09-30 13:02:28 +02:00
helpers.c rust: maple_tree: add MapleTree 2025-09-21 14:22:19 -07:00
io.c rust: io: mem: add a generic iomem abstraction 2025-07-20 19:43:14 +02:00
jump_label.c rust: add static_branch_unlikely for static_key_false 2024-11-04 16:21:44 -05:00
kunit.c rust: helpers: remove unnecessary header includes 2024-10-21 17:35:59 +02:00
maple_tree.c rust: maple_tree: add MapleTree 2025-09-21 14:22:19 -07:00
mm.c mm: rust: add lock_vma_under_rcu 2025-05-11 17:48:24 -07:00
mutex.c Generic: 2025-06-02 12:24:58 -07:00
of.c rust: device: implement FwNode::is_of_node() 2025-06-25 18:10:12 +02:00
page.c
pci.c rust: pci: use generic device drvdata accessors 2025-07-09 00:04:33 +02:00
pid_namespace.c rust: add PidNamespace 2024-10-08 15:44:36 +02:00
platform.c rust: platform: use generic device drvdata accessors 2025-07-09 00:04:33 +02:00
poll.c poll: rust: allow poll_table ptrs to be null 2025-07-14 14:12:24 +02:00
property.c rust: device: Create FwNode abstraction for accessing device properties 2025-06-12 23:56:42 +02:00
rbtree.c rust: rbtree: add red-black tree implementation backed by the C version 2024-08-31 17:35:08 +02:00
rcu.c rust: add rcu abstraction 2024-12-20 17:19:26 +01:00
refcount.c rust: helpers: remove unnecessary header includes 2024-10-21 17:35:59 +02:00
regulator.c rust: regulator: add a bare minimum regulator abstraction 2025-07-15 15:07:40 +01:00
security.c rust: replace lsm context+len with lsm_context 2024-12-04 15:02:29 -05:00
signal.c rust: helpers: remove unnecessary header includes 2024-10-21 17:35:59 +02:00
slab.c rust: support large alignments in allocations 2025-09-13 16:54:46 -07:00
spinlock.c rust: sync: Add lock::Backend::assert_is_held() 2024-12-19 14:04:42 -08:00
sync.c rust: lockdep: Use Pin for all LockClassKey usages 2025-03-08 00:55:04 +01:00
task.c rust: task: Add Rust version of might_sleep() 2025-06-24 15:53:50 -07:00
time.c rust: time: Add wrapper for fsleep() function 2025-06-30 13:22:05 +02:00
uaccess.c
vmalloc.c rust: support large alignments in allocations 2025-09-13 16:54:46 -07:00
wait.c rust: helpers: remove unnecessary header includes 2024-10-21 17:35:59 +02:00
workqueue.c rust: helpers: remove unnecessary header includes 2024-10-21 17:35:59 +02:00
xarray.c rust: xarray: Add an abstraction for XArray 2025-05-01 11:37:59 +02:00