[PATCH] drm/nouveau: use DRM_GPUVM_RESV_PROTECTED locking scheme

Danilo Krummrich dakr at kernel.org
Tue Aug 12 17:01:25 UTC 2025


Given that nouveau does not update the GPUVA space from the DMA fence
signalling critical path, we are able to use the DRM_GPUVM_RESV_PROTECTED
locking scheme, rather than relying on the spinlock dance for the
external and evicted object list.

Except for the call to drm_gpuvm_bo_extobj_add() add other relevant call
are already protected by the corresponding dma-resv locks.

Hence, move drm_gpuvm_bo_extobj_add into the same lock context as
drm_gpuvm_bo_obtain() and enable DRM_GPUVM_RESV_PROTECTED.

Cc: Alice Ryhl <aliceryhl at google.com>
Signed-off-by: Danilo Krummrich <dakr at kernel.org>
---
 drivers/gpu/drm/nouveau/nouveau_uvmm.c | 10 +++++++---
 1 file changed, 7 insertions(+), 3 deletions(-)

diff --git a/drivers/gpu/drm/nouveau/nouveau_uvmm.c b/drivers/gpu/drm/nouveau/nouveau_uvmm.c
index ddfc46bc1b3e..9d9e82628053 100644
--- a/drivers/gpu/drm/nouveau/nouveau_uvmm.c
+++ b/drivers/gpu/drm/nouveau/nouveau_uvmm.c
@@ -1208,11 +1208,13 @@ nouveau_uvmm_bind_job_submit(struct nouveau_job *job,
 
 			dma_resv_lock(obj->resv, NULL);
 			op->vm_bo = drm_gpuvm_bo_obtain(&uvmm->base, obj);
-			dma_resv_unlock(obj->resv);
-			if (IS_ERR(op->vm_bo))
+			if (IS_ERR(op->vm_bo)) {
+				dma_resv_unlock(obj->resv);
 				return PTR_ERR(op->vm_bo);
+			}
 
 			drm_gpuvm_bo_extobj_add(op->vm_bo);
+			dma_resv_unlock(obj->resv);
 		}
 
 		ret = bind_validate_op(job, op);
@@ -1857,7 +1859,9 @@ nouveau_uvmm_ioctl_vm_init(struct drm_device *dev,
 	mt_init_flags(&uvmm->region_mt, MT_FLAGS_LOCK_EXTERN);
 	mt_set_external_lock(&uvmm->region_mt, &uvmm->mutex);
 
-	drm_gpuvm_init(&uvmm->base, cli->name, 0, drm, r_obj,
+	drm_gpuvm_init(&uvmm->base, cli->name,
+		       DRM_GPUVM_RESV_PROTECTED,
+		       drm, r_obj,
 		       NOUVEAU_VA_SPACE_START,
 		       NOUVEAU_VA_SPACE_END,
 		       init->kernel_managed_addr,

base-commit: fb357dbadbebc7a9ca3c5ef26f6c792b0e8e1278
-- 
2.50.1



More information about the dri-devel mailing list