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 v3: avoid unncessary diverge from amd-staging-drm-next 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, 3 insertions(+), 5 deletions(-) diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_sync.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_sync.c index a4f0ecf..4159e6b 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_sync.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_sync.c @@ -198,11 +198,9 @@ int amdgpu_sync_resv(struct amdgpu_device *adev, if (resv == NULL) return -EINVAL; + /* always sync to the exclusive fence */ 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) - r = amdgpu_sync_fence(adev, sync, f); + r = amdgpu_sync_fence(adev, sync, f); if (explicit_sync) return r; @@ -216,7 +214,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)) { -- 1.9.1