Ping, Pierre/Marek does this change works as expected?

Regards,
Christian.

Am 18.11.20 um 14:20 schrieb Christian König:
This allows for optimizing the CPU round trip away.

Signed-off-by: Christian König <christian.koe...@amd.com>
---
  drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c   |  2 +-
  drivers/gpu/drm/amd/amdgpu/amdgpu_sync.c | 27 ++++++++++++++++++++++++
  drivers/gpu/drm/amd/amdgpu/amdgpu_sync.h |  1 +
  3 files changed, 29 insertions(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c 
b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
index 79342976fa76..68f9a4adf5d2 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
@@ -1014,7 +1014,7 @@ static int amdgpu_syncobj_lookup_and_add_to_sync(struct 
amdgpu_cs_parser *p,
                return r;
        }
- r = amdgpu_sync_fence(&p->job->sync, fence);
+       r = amdgpu_sync_fence_chain(&p->job->sync, fence);
        dma_fence_put(fence);
return r;
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_sync.c 
b/drivers/gpu/drm/amd/amdgpu/amdgpu_sync.c
index 8ea6c49529e7..d0d64af06f54 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_sync.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_sync.c
@@ -28,6 +28,8 @@
   *    Christian König <christian.koe...@amd.com>
   */
+#include <linux/dma-fence-chain.h>
+
  #include "amdgpu.h"
  #include "amdgpu_trace.h"
  #include "amdgpu_amdkfd.h"
@@ -169,6 +171,31 @@ int amdgpu_sync_fence(struct amdgpu_sync *sync, struct 
dma_fence *f)
        return 0;
  }
+/**
+ * amdgpu_sync_fence_chain - unpack dma_fence_chain and sync
+ *
+ * @sync: sync object to add fence to
+ * @f: potential dma_fence_chain to sync to.
+ *
+ * Add the fences inside the chain to the sync object.
+ */
+int amdgpu_sync_fence_chain(struct amdgpu_sync *sync, struct dma_fence *f)
+{
+       int r;
+
+       dma_fence_chain_for_each(f, f) {
+               if (dma_fence_is_signaled(f))
+                       continue;
+
+               r = amdgpu_sync_fence(sync, f);
+               if (r) {
+                       dma_fence_put(f);
+                       return r;
+               }
+       }
+       return 0;
+}
+
  /**
   * amdgpu_sync_vm_fence - remember to sync to this VM fence
   *
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_sync.h 
b/drivers/gpu/drm/amd/amdgpu/amdgpu_sync.h
index 7c0fe20c470d..b142175b65b6 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_sync.h
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_sync.h
@@ -48,6 +48,7 @@ struct amdgpu_sync {
void amdgpu_sync_create(struct amdgpu_sync *sync);
  int amdgpu_sync_fence(struct amdgpu_sync *sync, struct dma_fence *f);
+int amdgpu_sync_fence_chain(struct amdgpu_sync *sync, struct dma_fence *f);
  int amdgpu_sync_vm_fence(struct amdgpu_sync *sync, struct dma_fence *fence);
  int amdgpu_sync_resv(struct amdgpu_device *adev, struct amdgpu_sync *sync,
                     struct dma_resv *resv, enum amdgpu_sync_mode mode,

_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

Reply via email to