Commit e6303f32 authored by Danilo Krummrich's avatar Danilo Krummrich
Browse files

drm: manager to keep track of GPUs VA mappings



Add infrastructure to keep track of GPU virtual address (VA) mappings
with a decicated VA space manager implementation.

New UAPIs, motivated by Vulkan sparse memory bindings graphics drivers
start implementing, allow userspace applications to request multiple and
arbitrary GPU VA mappings of buffer objects. The DRM GPU VA manager is
intended to serve the following purposes in this context.

1) Provide infrastructure to track GPU VA allocations and mappings,
   using an interval tree (RB-tree).

2) Generically connect GPU VA mappings to their backing buffers, in
   particular DRM GEM objects.

3) Provide a common implementation to perform more complex mapping
   operations on the GPU VA space. In particular splitting and merging
   of GPU VA mappings, e.g. for intersecting mapping requests or partial
   unmap requests.

Acked-by: default avatarThomas Hellström <thomas.hellstrom@linux.intel.com>
Acked-by: default avatarMatthew Brost <matthew.brost@intel.com>
Reviewed-by: default avatarBoris Brezillon <boris.brezillon@collabora.com>
Tested-by: default avatarMatthew Brost <matthew.brost@intel.com>
Tested-by: default avatarDonald Robson <donald.robson@imgtec.com>
Suggested-by: default avatarDave Airlie <airlied@redhat.com>
Signed-off-by: default avatarDanilo Krummrich <dakr@redhat.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20230720001443.2380-2-dakr@redhat.com
parent 41639b3a
Loading
Loading
Loading
Loading
+36 −0
Original line number Diff line number Diff line
@@ -466,6 +466,42 @@ DRM MM Range Allocator Function References
.. kernel-doc:: drivers/gpu/drm/drm_mm.c
   :export:

DRM GPU VA Manager
==================

Overview
--------

.. kernel-doc:: drivers/gpu/drm/drm_gpuva_mgr.c
   :doc: Overview

Split and Merge
---------------

.. kernel-doc:: drivers/gpu/drm/drm_gpuva_mgr.c
   :doc: Split and Merge

Locking
-------

.. kernel-doc:: drivers/gpu/drm/drm_gpuva_mgr.c
   :doc: Locking

Examples
--------

.. kernel-doc:: drivers/gpu/drm/drm_gpuva_mgr.c
   :doc: Examples

DRM GPU VA Manager Function References
--------------------------------------

.. kernel-doc:: include/drm/drm_gpuva_mgr.h
   :internal:

.. kernel-doc:: drivers/gpu/drm/drm_gpuva_mgr.c
   :export:

DRM Buddy Allocator
===================

+1 −0
Original line number Diff line number Diff line
@@ -45,6 +45,7 @@ drm-y := \
	drm_vblank.o \
	drm_vblank_work.o \
	drm_vma_manager.o \
	drm_gpuva_mgr.o \
	drm_writeback.o
drm-$(CONFIG_DRM_LEGACY) += \
	drm_agpsupport.o \
+3 −0
Original line number Diff line number Diff line
@@ -164,6 +164,9 @@ void drm_gem_private_object_init(struct drm_device *dev,
	if (!obj->resv)
		obj->resv = &obj->_resv;

	if (drm_core_check_feature(dev, DRIVER_GEM_GPUVA))
		drm_gem_gpuva_init(obj);

	drm_vma_node_reset(&obj->vma_node);
	INIT_LIST_HEAD(&obj->lru_node);
}
+1725 −0

File added.

Preview size limit exceeded, changes collapsed.

+6 −0
Original line number Diff line number Diff line
@@ -104,6 +104,12 @@ enum drm_driver_feature {
	 * acceleration should be handled by two drivers that are connected using auxiliary bus.
	 */
	DRIVER_COMPUTE_ACCEL            = BIT(7),
	/**
	 * @DRIVER_GEM_GPUVA:
	 *
	 * Driver supports user defined GPU VA bindings for GEM objects.
	 */
	DRIVER_GEM_GPUVA		= BIT(8),

	/* IMPORTANT: Below are all the legacy flags, add new ones above. */

Loading