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;