drm/amdgpu: use the new iterator in amdgpu_sync_resv
authorChristian König <christian.koenig@amd.com>
Tue, 15 Jun 2021 18:26:00 +0000 (20:26 +0200)
committerChristian König <christian.koenig@amd.com>
Fri, 22 Oct 2021 12:41:07 +0000 (14:41 +0200)
Simplifying the code a bit.

Signed-off-by: Christian König <christian.koenig@amd.com>
Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Link: https://patchwork.freedesktop.org/patch/msgid/20211005113742.1101-12-christian.koenig@amd.com
drivers/gpu/drm/amd/amdgpu/amdgpu_sync.c

index 862eb3c1c4c562faf24a2066aa5d3cd628a16dcb..f7d8487799b281cfd0bedc52c363fe7938a4eed5 100644 (file)
@@ -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;