diff options
Diffstat (limited to 'meta-amdfalconx86/recipes-kernel/linux/linux-yocto/0513-drm-amdgpu-re-work-sync_resv.patch')
-rw-r--r-- | meta-amdfalconx86/recipes-kernel/linux/linux-yocto/0513-drm-amdgpu-re-work-sync_resv.patch | 77 |
1 files changed, 77 insertions, 0 deletions
diff --git a/meta-amdfalconx86/recipes-kernel/linux/linux-yocto/0513-drm-amdgpu-re-work-sync_resv.patch b/meta-amdfalconx86/recipes-kernel/linux/linux-yocto/0513-drm-amdgpu-re-work-sync_resv.patch new file mode 100644 index 00000000..be13fc6f --- /dev/null +++ b/meta-amdfalconx86/recipes-kernel/linux/linux-yocto/0513-drm-amdgpu-re-work-sync_resv.patch @@ -0,0 +1,77 @@ +From 423a9480add9d9afba035d3c2617034d5f766065 Mon Sep 17 00:00:00 2001 +From: Chunming Zhou <david1.zhou@amd.com> +Date: Mon, 24 Aug 2015 16:59:54 +0800 +Subject: [PATCH 0513/1050] drm/amdgpu: re-work sync_resv + +sync_resv is to handle both amdgpu_fence and sched_fence. + +Signed-off-by: Chunming Zhou <david1.zhou@amd.com> +Reviewed-by: Jammy Zhou <Jammy.Zhou@amd.com> +Reviewed-by: Christian K?nig <christian.koenig@amd.com> +--- + drivers/gpu/drm/amd/amdgpu/amdgpu_sync.c | 24 ++++++++++++++++++------ + 1 file changed, 18 insertions(+), 6 deletions(-) + +diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_sync.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_sync.c +index 69b7d45..068aeaf 100644 +--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_sync.c ++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_sync.c +@@ -142,6 +142,18 @@ int amdgpu_sync_fence(struct amdgpu_device *adev, struct amdgpu_sync *sync, + return 0; + } + ++static void *amdgpu_sync_get_owner(struct fence *f) ++{ ++ struct amdgpu_fence *a_fence = to_amdgpu_fence(f); ++ struct amd_sched_fence *s_fence = to_amd_sched_fence(f); ++ ++ if (s_fence) ++ return s_fence->owner; ++ else if (a_fence) ++ return a_fence->owner; ++ return AMDGPU_FENCE_OWNER_UNDEFINED; ++} ++ + /** + * amdgpu_sync_resv - use the semaphores to sync to a reservation object + * +@@ -158,7 +170,7 @@ int amdgpu_sync_resv(struct amdgpu_device *adev, + { + struct reservation_object_list *flist; + struct fence *f; +- struct amdgpu_fence *fence; ++ void *fence_owner; + unsigned i; + int r = 0; + +@@ -176,22 +188,22 @@ int amdgpu_sync_resv(struct amdgpu_device *adev, + for (i = 0; i < flist->shared_count; ++i) { + f = rcu_dereference_protected(flist->shared[i], + reservation_object_held(resv)); +- fence = f ? to_amdgpu_fence(f) : NULL; +- if (fence && fence->ring->adev == adev) { ++ if (amdgpu_sync_same_dev(adev, f)) { + /* VM updates are only interesting + * for other VM updates and moves. + */ ++ fence_owner = amdgpu_sync_get_owner(f); + if ((owner != AMDGPU_FENCE_OWNER_MOVE) && +- (fence->owner != AMDGPU_FENCE_OWNER_MOVE) && ++ (fence_owner != AMDGPU_FENCE_OWNER_MOVE) && + ((owner == AMDGPU_FENCE_OWNER_VM) != +- (fence->owner == AMDGPU_FENCE_OWNER_VM))) ++ (fence_owner == AMDGPU_FENCE_OWNER_VM))) + continue; + + /* Ignore fence from the same owner as + * long as it isn't undefined. + */ + if (owner != AMDGPU_FENCE_OWNER_UNDEFINED && +- fence->owner == owner) ++ fence_owner == owner) + continue; + } + +-- +1.9.1 + |