On 2026-05-29 07:24, Christian König wrote:
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 <[email protected]>
---
drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c | 29 +++++++++----------
.../gpu/drm/amd/amdgpu/amdgpu_vm_internal.h | 9 ------
2 files changed, 13 insertions(+), 25 deletions(-)
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
index f81ddc6873a0..3ac083c9f77e 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
@@ -616,9 +616,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) {
@@ -676,9 +675,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);
@@ -2308,9 +2306,10 @@ 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)
+ if (bo_base || !bo_base->vm)
This is either a mistake or a deliberate logic fix that would justify a
separate patch.
Regards,
Felix
return true;
/* Don't evict VM page tables while they are busy */
@@ -2318,17 +2317,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;
- bo_base->vm->evicting = true;
- amdgpu_vm_eviction_unlock(bo_base->vm);
+ vm->evicting = true;
+ }
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 16710017e8ca..7276d987e9a6 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm_internal.h
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm_internal.h
@@ -141,15 +141,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);