Hi Honglei,

this is just to unblock your SVM work, the rest of my patch set needs more work 
than I thought because of the new ualink files.

Regards,
Christian.

On 9/11/26 18:48, 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        | 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 47cde54594693..7ced26c9c651b 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) {
> @@ -678,9 +677,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);
>  
> @@ -2274,6 +2272,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)
> @@ -2284,17 +2283,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 447195cc45932..ca86eaac75235 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);

Reply via email to