diff options
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/2130-drm-amdgpu-Sync-KFD-fence-only-for-move-evict.patch')
-rw-r--r-- | meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/2130-drm-amdgpu-Sync-KFD-fence-only-for-move-evict.patch | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/2130-drm-amdgpu-Sync-KFD-fence-only-for-move-evict.patch b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/2130-drm-amdgpu-Sync-KFD-fence-only-for-move-evict.patch new file mode 100644 index 00000000..91edd4a7 --- /dev/null +++ b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/2130-drm-amdgpu-Sync-KFD-fence-only-for-move-evict.patch @@ -0,0 +1,56 @@ +From 56136184a0419b80d202083066b959821f0fefc8 Mon Sep 17 00:00:00 2001 +From: Harish Kasiviswanathan <Harish.Kasiviswanathan@amd.com> +Date: Thu, 19 Oct 2017 11:53:03 -0400 +Subject: [PATCH 2130/4131] drm/amdgpu: Sync KFD fence only for move/evict + +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@amd.com> +--- + drivers/gpu/drm/amd/amdgpu/amdgpu_sync.c | 13 +++++++------ + 1 file changed, 7 insertions(+), 6 deletions(-) + +diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_sync.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_sync.c +index 3985025..a20d4ba 100755 +--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_sync.c ++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_sync.c +@@ -197,11 +197,12 @@ int amdgpu_sync_resv(struct amdgpu_device *adev, + if (resv == NULL) + 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) +- r = amdgpu_sync_fence(adev, sync, f); ++ /* always sync to the exclusive fence */ ++ f = reservation_object_get_excl(resv); ++ r = amdgpu_sync_fence(adev, sync, f); ++ ++ if (explicit_sync) ++ return r; + + flist = reservation_object_get_list(resv); + if (!flist || r) +@@ -212,7 +213,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)) { +-- +2.7.4 + |