From fc6275c7fc9d0b9c590d23d01033613aa26b14c0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christian=20K=C3=B6nig?= Date: Tue, 26 May 2026 15:20:28 +0200 Subject: [PATCH] drm/amdgpu: nuke most amdgpu_vm_eviction_(try)lock uses MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Use scoped_guard/scoped_cond_guard instead. Saving and restoring the GFP flags is not necessary in those use case. Signed-off-by: Christian König Reviewed-by: Natalie Vock Signed-off-by: Alex Deucher --- drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c | 27 +++++++++---------- .../gpu/drm/amd/amdgpu/amdgpu_vm_internal.h | 9 ------- 2 files changed, 12 insertions(+), 24 deletions(-) diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c index ed92dc1a29e7..0b8a8f82ecab 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c @@ -617,9 +617,8 @@ int amdgpu_vm_validate(struct amdgpu_device *adev, struct amdgpu_vm *vm, * As soon as all page tables are in place we can start updating them * again. */ - amdgpu_vm_eviction_lock(vm); - vm->evicting = false; - amdgpu_vm_eviction_unlock(vm); + scoped_guard(mutex, &vm->eviction_lock) + vm->evicting = false; list_for_each_entry_safe(bo_base, tmp, &vm->always_valid.evicted, vm_status) { @@ -679,9 +678,8 @@ bool amdgpu_vm_ready(struct amdgpu_vm *vm) amdgpu_vm_assert_locked(vm); - amdgpu_vm_eviction_lock(vm); - ret = !vm->evicting; - amdgpu_vm_eviction_unlock(vm); + scoped_guard(mutex, &vm->eviction_lock) + ret = !vm->evicting; ret &= list_empty(&vm->kernel.evicted); @@ -2275,6 +2273,7 @@ void amdgpu_vm_bo_del(struct amdgpu_device *adev, bool amdgpu_vm_evictable(struct amdgpu_bo *bo) { struct amdgpu_vm_bo_base *bo_base = bo->vm_bo; + struct amdgpu_vm *vm; /* Page tables of a destroyed VM can go away immediately */ if (!bo_base || !bo_base->vm) @@ -2285,17 +2284,15 @@ bool amdgpu_vm_evictable(struct amdgpu_bo *bo) return false; /* Try to block ongoing updates */ - if (!amdgpu_vm_eviction_trylock(bo_base->vm)) - return false; + vm = bo_base->vm; + scoped_cond_guard(mutex_try, return false, &vm->eviction_lock) { - /* Don't evict VM page tables while they are updated */ - if (!dma_fence_is_signaled(bo_base->vm->last_unlocked)) { - amdgpu_vm_eviction_unlock(bo_base->vm); - return false; + /* Don't evict VM page tables while they are updated */ + if (!dma_fence_is_signaled(vm->last_unlocked)) + return false; + + vm->evicting = true; } - - bo_base->vm->evicting = true; - amdgpu_vm_eviction_unlock(bo_base->vm); return true; } diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm_internal.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm_internal.h index 447195cc4593..ca86eaac7523 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm_internal.h +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm_internal.h @@ -137,15 +137,6 @@ static inline void amdgpu_vm_eviction_lock(struct amdgpu_vm *vm) vm->saved_flags = memalloc_noreclaim_save(); } -static inline bool amdgpu_vm_eviction_trylock(struct amdgpu_vm *vm) -{ - if (mutex_trylock(&vm->eviction_lock)) { - vm->saved_flags = memalloc_noreclaim_save(); - return true; - } - return false; -} - static inline void amdgpu_vm_eviction_unlock(struct amdgpu_vm *vm) { memalloc_noreclaim_restore(vm->saved_flags);