On Tue, Oct 05, 2021 at 01:37:25PM +0200, Christian König wrote:
> Simplifying the code a bit.
> 
> Signed-off-by: Christian König <christian.koe...@amd.com>

Reviewed-by: Daniel Vetter <daniel.vet...@ffwll.ch>

Yeah these iterators rock :-)
-Daniel

> ---
>  drivers/gpu/drm/amd/amdgpu/amdgpu_sync.c | 44 ++++++++----------------
>  1 file changed, 14 insertions(+), 30 deletions(-)
> 
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_sync.c 
> b/drivers/gpu/drm/amd/amdgpu/amdgpu_sync.c
> index 862eb3c1c4c5..f7d8487799b2 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_sync.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_sync.c
> @@ -252,41 +252,25 @@ int amdgpu_sync_resv(struct amdgpu_device *adev, struct 
> amdgpu_sync *sync,
>                    struct dma_resv *resv, enum amdgpu_sync_mode mode,
>                    void *owner)
>  {
> -     struct dma_resv_list *flist;
> +     struct dma_resv_iter cursor;
>       struct dma_fence *f;
> -     unsigned i;
> -     int r = 0;
> +     int r;
>  
>       if (resv == NULL)
>               return -EINVAL;
>  
> -     /* always sync to the exclusive fence */
> -     f = dma_resv_excl_fence(resv);
> -     dma_fence_chain_for_each(f, f) {
> -             struct dma_fence_chain *chain = to_dma_fence_chain(f);
> -
> -             if (amdgpu_sync_test_fence(adev, mode, owner, chain ?
> -                                        chain->fence : f)) {
> -                     r = amdgpu_sync_fence(sync, f);
> -                     dma_fence_put(f);
> -                     if (r)
> -                             return r;
> -                     break;
> -             }
> -     }
> -
> -     flist = dma_resv_shared_list(resv);
> -     if (!flist)
> -             return 0;
> -
> -     for (i = 0; i < flist->shared_count; ++i) {
> -             f = rcu_dereference_protected(flist->shared[i],
> -                                           dma_resv_held(resv));
> -
> -             if (amdgpu_sync_test_fence(adev, mode, owner, f)) {
> -                     r = amdgpu_sync_fence(sync, f);
> -                     if (r)
> -                             return r;
> +     dma_resv_for_each_fence(&cursor, resv, true, f) {
> +             dma_fence_chain_for_each(f, f) {
> +                     struct dma_fence_chain *chain = to_dma_fence_chain(f);
> +
> +                     if (amdgpu_sync_test_fence(adev, mode, owner, chain ?
> +                                                chain->fence : f)) {
> +                             r = amdgpu_sync_fence(sync, f);
> +                             dma_fence_put(f);
> +                             if (r)
> +                                     return r;
> +                             break;
> +                     }
>               }
>       }
>       return 0;
> -- 
> 2.25.1
> 

-- 
Daniel Vetter
Software Engineer, Intel Corporation
http://blog.ffwll.ch

Reply via email to