[PATCH v2] drm/amdgpu: Sync KFD fence only for move/evict
Christian König
ckoenig.leichtzumerken at gmail.com
Fri Oct 20 18:37:49 UTC 2017
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 <Harish.Kasiviswanathan at amd.com>
> ---
> 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)) {
More information about the amd-gfx
mailing list