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)) {