Module Name:    src
Committed By:   riastradh
Date:           Sun Dec 19 12:31:04 UTC 2021

Modified Files:
        src/sys/external/bsd/drm2/dist/drm/amd/amdgpu: amdgpu_vm.c

Log Message:
amdgpu: Call idr_preload(_end) around idr_alloc, outside lock.


To generate a diff of this commit:
cvs rdiff -u -r1.8 -r1.9 \
    src/sys/external/bsd/drm2/dist/drm/amd/amdgpu/amdgpu_vm.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/external/bsd/drm2/dist/drm/amd/amdgpu/amdgpu_vm.c
diff -u src/sys/external/bsd/drm2/dist/drm/amd/amdgpu/amdgpu_vm.c:1.8 src/sys/external/bsd/drm2/dist/drm/amd/amdgpu/amdgpu_vm.c:1.9
--- src/sys/external/bsd/drm2/dist/drm/amd/amdgpu/amdgpu_vm.c:1.8	Sun Dec 19 12:30:47 2021
+++ src/sys/external/bsd/drm2/dist/drm/amd/amdgpu/amdgpu_vm.c	Sun Dec 19 12:31:04 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: amdgpu_vm.c,v 1.8 2021/12/19 12:30:47 riastradh Exp $	*/
+/*	$NetBSD: amdgpu_vm.c,v 1.9 2021/12/19 12:31:04 riastradh Exp $	*/
 
 /*
  * Copyright 2008 Advanced Micro Devices, Inc.
@@ -28,7 +28,7 @@
  *          Jerome Glisse
  */
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: amdgpu_vm.c,v 1.8 2021/12/19 12:30:47 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: amdgpu_vm.c,v 1.9 2021/12/19 12:31:04 riastradh Exp $");
 
 #include <linux/dma-fence-array.h>
 #include <linux/interval_tree_generic.h>
@@ -2900,10 +2900,12 @@ int amdgpu_vm_init(struct amdgpu_device 
 	if (pasid) {
 		unsigned long flags;
 
+		idr_preload(GFP_ATOMIC);
 		spin_lock_irqsave(&adev->vm_manager.pasid_lock, flags);
 		r = idr_alloc(&adev->vm_manager.pasid_idr, vm, pasid, pasid + 1,
 			      GFP_ATOMIC);
 		spin_unlock_irqrestore(&adev->vm_manager.pasid_lock, flags);
+		idr_preload_end();
 		if (r < 0)
 			goto error_free_root;
 
@@ -3007,10 +3009,12 @@ int amdgpu_vm_make_compute(struct amdgpu
 	if (pasid) {
 		unsigned long flags;
 
+		idr_preload(GFP_ATOMIC);
 		spin_lock_irqsave(&adev->vm_manager.pasid_lock, flags);
 		r = idr_alloc(&adev->vm_manager.pasid_idr, vm, pasid, pasid + 1,
 			      GFP_ATOMIC);
 		spin_unlock_irqrestore(&adev->vm_manager.pasid_lock, flags);
+		idr_preload_end();
 
 		if (r == -ENOSPC)
 			goto unreserve_bo;

Reply via email to