Am 20.10.2017 um 19:18 schrieb Harish Kasiviswanathan:
A single KFD eviction fence is attached to all the BOs of a process
including BOs imported. This fence ensures that all BOs belonging to
that process stays resident when the process queues are active.

Don't add this eviction fence to any sync object unless it is a move or
evict job. These jobs are identified by the fence owner
AMDGPU_FENCE_OWNER_UNDEFINED

v2: Always sync to exclusive fence

Change-Id: I8752d1cf6b2a1c4f2a57292b7c2cd308d5b6f9b7
Signed-off-by: Harish Kasiviswanathan <[email protected]>
---
  drivers/gpu/drm/amd/amdgpu/amdgpu_sync.c | 8 ++++----
  1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_sync.c 
b/drivers/gpu/drm/amd/amdgpu/amdgpu_sync.c
index a4f0ecf..88e49f7 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_sync.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_sync.c
@@ -199,10 +199,10 @@ int amdgpu_sync_resv(struct amdgpu_device *adev,
                return -EINVAL;
f = reservation_object_get_excl(resv);
-       fence_owner = amdgpu_sync_get_owner(f);
-       if (fence_owner != AMDGPU_FENCE_OWNER_KFD ||
-                       owner != AMDGPU_FENCE_OWNER_VM)
+       if (f) {
                r = amdgpu_sync_fence(adev, sync, f);
+               return r;
+       }

That is not correct either.

It must look like this:
        /* always sync to the exclusive fence */
        f = reservation_object_get_excl(resv);
        r = amdgpu_sync_fence(adev, sync, f);

        flist = reservation_object_get_list(resv);
        if (!flist || r)
                return r
Otherwise you ignore all shared fences and completely mess up the dependencies handling.

I suggest to just revert the patch which originally changed the code away from what it looks like on amd-staging-drm-next.

Regards,
Christian.


if (explicit_sync)
                return r;
@@ -216,7 +216,7 @@ int amdgpu_sync_resv(struct amdgpu_device *adev,
                                              reservation_object_held(resv));
                fence_owner = amdgpu_sync_get_owner(f);
                if (fence_owner == AMDGPU_FENCE_OWNER_KFD &&
-                               owner == AMDGPU_FENCE_OWNER_VM)
+                   owner != AMDGPU_FENCE_OWNER_UNDEFINED)
                        continue;
if (amdgpu_sync_same_dev(adev, f)) {


_______________________________________________
amd-gfx mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

Reply via email to