[PATCH v4 0/3] Introduce support for C linked list interfacing and GPU Buddy bindings

Joel Fernandes posted 3 patches 2 weeks ago
Documentation/gpu/drm-mm.rst                  |   10 +-
MAINTAINERS                                   |    7 +
drivers/gpu/Kconfig                           |   13 +
drivers/gpu/Makefile                          |    2 +
drivers/gpu/buddy.c                           | 1310 +++++++++++++++++
drivers/gpu/drm/Kconfig                       |    1 +
drivers/gpu/drm/Kconfig.debug                 |    4 +-
drivers/gpu/drm/amd/amdgpu/Kconfig            |    1 +
drivers/gpu/drm/amd/amdgpu/amdgpu_ras.c       |    2 +-
.../gpu/drm/amd/amdgpu/amdgpu_res_cursor.h    |   12 +-
drivers/gpu/drm/amd/amdgpu/amdgpu_vram_mgr.c  |   80 +-
drivers/gpu/drm/amd/amdgpu/amdgpu_vram_mgr.h  |   20 +-
drivers/gpu/drm/drm_buddy.c                   | 1287 +---------------
drivers/gpu/drm/i915/Kconfig                  |    1 +
drivers/gpu/drm/i915/i915_scatterlist.c       |   10 +-
drivers/gpu/drm/i915/i915_ttm_buddy_manager.c |   55 +-
drivers/gpu/drm/i915/i915_ttm_buddy_manager.h |    6 +-
.../drm/i915/selftests/intel_memory_region.c  |   20 +-
drivers/gpu/drm/tests/Makefile                |    1 -
.../gpu/drm/ttm/tests/ttm_bo_validate_test.c  |    5 +-
drivers/gpu/drm/ttm/tests/ttm_mock_manager.c  |   18 +-
drivers/gpu/drm/ttm/tests/ttm_mock_manager.h  |    4 +-
drivers/gpu/drm/xe/Kconfig                    |    1 +
drivers/gpu/drm/xe/xe_res_cursor.h            |   34 +-
drivers/gpu/drm/xe/xe_svm.c                   |   12 +-
drivers/gpu/drm/xe/xe_ttm_vram_mgr.c          |   73 +-
drivers/gpu/drm/xe/xe_ttm_vram_mgr_types.h    |    4 +-
drivers/gpu/tests/Makefile                    |    3 +
.../gpu_buddy_test.c}                         |  390 ++---
drivers/gpu/tests/gpu_random.c                |   48 +
drivers/gpu/tests/gpu_random.h                |   28 +
drivers/video/Kconfig                         |    2 +
include/drm/drm_buddy.h                       |  163 +-
include/linux/gpu_buddy.h                     |  177 +++
rust/bindings/bindings_helper.h               |   11 +
rust/helpers/gpu.c                            |   23 +
rust/helpers/helpers.c                        |    2 +
rust/helpers/list.c                           |   12 +
rust/kernel/clist.rs                          |  357 +++++
rust/kernel/gpu/buddy.rs                      |  527 +++++++
rust/kernel/gpu/mod.rs                        |    5 +
rust/kernel/lib.rs                            |    3 +
42 files changed, 2944 insertions(+), 1800 deletions(-)
create mode 100644 drivers/gpu/Kconfig
create mode 100644 drivers/gpu/buddy.c
create mode 100644 drivers/gpu/tests/Makefile
rename drivers/gpu/{drm/tests/drm_buddy_test.c => tests/gpu_buddy_test.c} (68%)
create mode 100644 drivers/gpu/tests/gpu_random.c
create mode 100644 drivers/gpu/tests/gpu_random.h
create mode 100644 include/linux/gpu_buddy.h
create mode 100644 rust/helpers/gpu.c
create mode 100644 rust/helpers/list.c
create mode 100644 rust/kernel/clist.rs
create mode 100644 rust/kernel/gpu/buddy.rs
create mode 100644 rust/kernel/gpu/mod.rs
[PATCH v4 0/3] Introduce support for C linked list interfacing and GPU Buddy bindings
Posted by Joel Fernandes 2 weeks ago
This series combines a number of other series which build up to the same goal:
to make it possible to use DRM buddy from nova-core rust code. See links to the
different series below.

The git tree with all patches can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/jfern/linux.git (tag: clist-buddy-v4-20251204)

Changes for v4:
- Combined the clist and drm buddy series:
  - A rust module (CList) to access circular linked lists from rust code.
  - DRM buddy allocator bindings that were originally part of RFC.
  - DRM buddy allocator one level up to drivers/gpu/ so it can be used by
     GPU drivers (example, nova-core) that have usecases other than DRM.
- Add Rust bindings for the GPU buddy allocator.

Notes from past cover letters about CList:

Introduction
============
This patchset introduces an interface to iterate over doubly circular linked
lists used in the kernel (allocated by C kernel code). The main usecase is
iterating over the list of blocks provided by the GPU buddy allocator.

The series also moves the DRM buddy allocator one level up and adds Rust
bindings for it, enabling GPU drivers like nova-core to use it.

A question may arise: Why not use rust list.rs for this?
=========================================================
Rust's list.rs is used to provide safe intrusive lists for Rust-allocated
items. In doing so, it takes ownership of the items in the list and the links
between list items. However, the usecase for GPU buddy allocator bindings, the
C side allocates the items in the list, and also links the list together. Due
to this, there is an ownership conflict making list.rs not the best abstraction
for this usecase. What we need is a view of the list, not ownership of it.
Further, the list links in a bindings usecase may come from C allocated
objects, not from the Rust side.

Link to v2 (clist only): https://lore.kernel.org/all/20251111171315.2196103-4-joelagnelf@nvidia.com/

Notes and patches about DRM buddy code movement and DRM buddy bindings:

Link to RFC: https://lore.kernel.org/all/20251030190613.1224287-1-joelagnelf@nvidia.com/
Link to DRM buddy move discussion: https://lore.kernel.org/all/20251124234432.1988476-1-joelagnelf@nvidia.com/

Joel Fernandes (3):
  rust: clist: Add support to interface with C linked lists
  gpu: Move DRM buddy allocator one level up
  rust: gpu: Add GPU buddy allocator bindings

 Documentation/gpu/drm-mm.rst                  |   10 +-
 MAINTAINERS                                   |    7 +
 drivers/gpu/Kconfig                           |   13 +
 drivers/gpu/Makefile                          |    2 +
 drivers/gpu/buddy.c                           | 1310 +++++++++++++++++
 drivers/gpu/drm/Kconfig                       |    1 +
 drivers/gpu/drm/Kconfig.debug                 |    4 +-
 drivers/gpu/drm/amd/amdgpu/Kconfig            |    1 +
 drivers/gpu/drm/amd/amdgpu/amdgpu_ras.c       |    2 +-
 .../gpu/drm/amd/amdgpu/amdgpu_res_cursor.h    |   12 +-
 drivers/gpu/drm/amd/amdgpu/amdgpu_vram_mgr.c  |   80 +-
 drivers/gpu/drm/amd/amdgpu/amdgpu_vram_mgr.h  |   20 +-
 drivers/gpu/drm/drm_buddy.c                   | 1287 +---------------
 drivers/gpu/drm/i915/Kconfig                  |    1 +
 drivers/gpu/drm/i915/i915_scatterlist.c       |   10 +-
 drivers/gpu/drm/i915/i915_ttm_buddy_manager.c |   55 +-
 drivers/gpu/drm/i915/i915_ttm_buddy_manager.h |    6 +-
 .../drm/i915/selftests/intel_memory_region.c  |   20 +-
 drivers/gpu/drm/tests/Makefile                |    1 -
 .../gpu/drm/ttm/tests/ttm_bo_validate_test.c  |    5 +-
 drivers/gpu/drm/ttm/tests/ttm_mock_manager.c  |   18 +-
 drivers/gpu/drm/ttm/tests/ttm_mock_manager.h  |    4 +-
 drivers/gpu/drm/xe/Kconfig                    |    1 +
 drivers/gpu/drm/xe/xe_res_cursor.h            |   34 +-
 drivers/gpu/drm/xe/xe_svm.c                   |   12 +-
 drivers/gpu/drm/xe/xe_ttm_vram_mgr.c          |   73 +-
 drivers/gpu/drm/xe/xe_ttm_vram_mgr_types.h    |    4 +-
 drivers/gpu/tests/Makefile                    |    3 +
 .../gpu_buddy_test.c}                         |  390 ++---
 drivers/gpu/tests/gpu_random.c                |   48 +
 drivers/gpu/tests/gpu_random.h                |   28 +
 drivers/video/Kconfig                         |    2 +
 include/drm/drm_buddy.h                       |  163 +-
 include/linux/gpu_buddy.h                     |  177 +++
 rust/bindings/bindings_helper.h               |   11 +
 rust/helpers/gpu.c                            |   23 +
 rust/helpers/helpers.c                        |    2 +
 rust/helpers/list.c                           |   12 +
 rust/kernel/clist.rs                          |  357 +++++
 rust/kernel/gpu/buddy.rs                      |  527 +++++++
 rust/kernel/gpu/mod.rs                        |    5 +
 rust/kernel/lib.rs                            |    3 +
 42 files changed, 2944 insertions(+), 1800 deletions(-)
 create mode 100644 drivers/gpu/Kconfig
 create mode 100644 drivers/gpu/buddy.c
 create mode 100644 drivers/gpu/tests/Makefile
 rename drivers/gpu/{drm/tests/drm_buddy_test.c => tests/gpu_buddy_test.c} (68%)
 create mode 100644 drivers/gpu/tests/gpu_random.c
 create mode 100644 drivers/gpu/tests/gpu_random.h
 create mode 100644 include/linux/gpu_buddy.h
 create mode 100644 rust/helpers/gpu.c
 create mode 100644 rust/helpers/list.c
 create mode 100644 rust/kernel/clist.rs
 create mode 100644 rust/kernel/gpu/buddy.rs
 create mode 100644 rust/kernel/gpu/mod.rs

-- 
2.34.1
Re: [PATCH v4 0/3] Introduce support for C linked list interfacing and GPU Buddy bindings
Posted by Joel Fernandes 2 weeks ago
> On Dec 4, 2025, at 4:53 PM, Joel Fernandes <joelagnelf@nvidia.com> wrote:
> 
> This series combines a number of other series which build up to the same goal:
> to make it possible to use DRM buddy from nova-core rust code. See links to the
> different series below.
> 
> The git tree with all patches can be found at:
> git://git.kernel.org/pub/scm/linux/kernel/git/jfern/linux.git (tag: clist-buddy-v4-20251204)

FYI - this series is rebased on linux-next to reduce conflicts, but I am happy to rebase on another tree if needed/requested.

Thanks,

 - Joel





> 
> Changes for v4:
> - Combined the clist and drm buddy series:
>  - A rust module (CList) to access circular linked lists from rust code.
>  - DRM buddy allocator bindings that were originally part of RFC.
>  - DRM buddy allocator one level up to drivers/gpu/ so it can be used by
>     GPU drivers (example, nova-core) that have usecases other than DRM.
> - Add Rust bindings for the GPU buddy allocator.
> 
> Notes from past cover letters about CList:
> 
> Introduction
> ============
> This patchset introduces an interface to iterate over doubly circular linked
> lists used in the kernel (allocated by C kernel code). The main usecase is
> iterating over the list of blocks provided by the GPU buddy allocator.
> 
> The series also moves the DRM buddy allocator one level up and adds Rust
> bindings for it, enabling GPU drivers like nova-core to use it.
> 
> A question may arise: Why not use rust list.rs for this?
> =========================================================
> Rust's list.rs is used to provide safe intrusive lists for Rust-allocated
> items. In doing so, it takes ownership of the items in the list and the links
> between list items. However, the usecase for GPU buddy allocator bindings, the
> C side allocates the items in the list, and also links the list together. Due
> to this, there is an ownership conflict making list.rs not the best abstraction
> for this usecase. What we need is a view of the list, not ownership of it.
> Further, the list links in a bindings usecase may come from C allocated
> objects, not from the Rust side.
> 
> Link to v2 (clist only): https://lore.kernel.org/all/20251111171315.2196103-4-joelagnelf@nvidia.com/
> 
> Notes and patches about DRM buddy code movement and DRM buddy bindings:
> 
> Link to RFC: https://lore.kernel.org/all/20251030190613.1224287-1-joelagnelf@nvidia.com/
> Link to DRM buddy move discussion: https://lore.kernel.org/all/20251124234432.1988476-1-joelagnelf@nvidia.com/
> 
> Joel Fernandes (3):
>  rust: clist: Add support to interface with C linked lists
>  gpu: Move DRM buddy allocator one level up
>  rust: gpu: Add GPU buddy allocator bindings
> 
> Documentation/gpu/drm-mm.rst                  |   10 +-
> MAINTAINERS                                   |    7 +
> drivers/gpu/Kconfig                           |   13 +
> drivers/gpu/Makefile                          |    2 +
> drivers/gpu/buddy.c                           | 1310 +++++++++++++++++
> drivers/gpu/drm/Kconfig                       |    1 +
> drivers/gpu/drm/Kconfig.debug                 |    4 +-
> drivers/gpu/drm/amd/amdgpu/Kconfig            |    1 +
> drivers/gpu/drm/amd/amdgpu/amdgpu_ras.c       |    2 +-
> .../gpu/drm/amd/amdgpu/amdgpu_res_cursor.h    |   12 +-
> drivers/gpu/drm/amd/amdgpu/amdgpu_vram_mgr.c  |   80 +-
> drivers/gpu/drm/amd/amdgpu/amdgpu_vram_mgr.h  |   20 +-
> drivers/gpu/drm/drm_buddy.c                   | 1287 +---------------
> drivers/gpu/drm/i915/Kconfig                  |    1 +
> drivers/gpu/drm/i915/i915_scatterlist.c       |   10 +-
> drivers/gpu/drm/i915/i915_ttm_buddy_manager.c |   55 +-
> drivers/gpu/drm/i915/i915_ttm_buddy_manager.h |    6 +-
> .../drm/i915/selftests/intel_memory_region.c  |   20 +-
> drivers/gpu/drm/tests/Makefile                |    1 -
> .../gpu/drm/ttm/tests/ttm_bo_validate_test.c  |    5 +-
> drivers/gpu/drm/ttm/tests/ttm_mock_manager.c  |   18 +-
> drivers/gpu/drm/ttm/tests/ttm_mock_manager.h  |    4 +-
> drivers/gpu/drm/xe/Kconfig                    |    1 +
> drivers/gpu/drm/xe/xe_res_cursor.h            |   34 +-
> drivers/gpu/drm/xe/xe_svm.c                   |   12 +-
> drivers/gpu/drm/xe/xe_ttm_vram_mgr.c          |   73 +-
> drivers/gpu/drm/xe/xe_ttm_vram_mgr_types.h    |    4 +-
> drivers/gpu/tests/Makefile                    |    3 +
> .../gpu_buddy_test.c}                         |  390 ++---
> drivers/gpu/tests/gpu_random.c                |   48 +
> drivers/gpu/tests/gpu_random.h                |   28 +
> drivers/video/Kconfig                         |    2 +
> include/drm/drm_buddy.h                       |  163 +-
> include/linux/gpu_buddy.h                     |  177 +++
> rust/bindings/bindings_helper.h               |   11 +
> rust/helpers/gpu.c                            |   23 +
> rust/helpers/helpers.c                        |    2 +
> rust/helpers/list.c                           |   12 +
> rust/kernel/clist.rs                          |  357 +++++
> rust/kernel/gpu/buddy.rs                      |  527 +++++++
> rust/kernel/gpu/mod.rs                        |    5 +
> rust/kernel/lib.rs                            |    3 +
> 42 files changed, 2944 insertions(+), 1800 deletions(-)
> create mode 100644 drivers/gpu/Kconfig
> create mode 100644 drivers/gpu/buddy.c
> create mode 100644 drivers/gpu/tests/Makefile
> rename drivers/gpu/{drm/tests/drm_buddy_test.c => tests/gpu_buddy_test.c} (68%)
> create mode 100644 drivers/gpu/tests/gpu_random.c
> create mode 100644 drivers/gpu/tests/gpu_random.h
> create mode 100644 include/linux/gpu_buddy.h
> create mode 100644 rust/helpers/gpu.c
> create mode 100644 rust/helpers/list.c
> create mode 100644 rust/kernel/clist.rs
> create mode 100644 rust/kernel/gpu/buddy.rs
> create mode 100644 rust/kernel/gpu/mod.rs
> 
> --
> 2.34.1
>