aboutsummaryrefslogtreecommitdiffstats
path: root/common/recipes-kernel/linux/files/0397-drm-amdgpu-RCU-protected-amd_sched_fence_release.patch
diff options
context:
space:
mode:
Diffstat (limited to 'common/recipes-kernel/linux/files/0397-drm-amdgpu-RCU-protected-amd_sched_fence_release.patch')
-rw-r--r--common/recipes-kernel/linux/files/0397-drm-amdgpu-RCU-protected-amd_sched_fence_release.patch59
1 files changed, 59 insertions, 0 deletions
diff --git a/common/recipes-kernel/linux/files/0397-drm-amdgpu-RCU-protected-amd_sched_fence_release.patch b/common/recipes-kernel/linux/files/0397-drm-amdgpu-RCU-protected-amd_sched_fence_release.patch
new file mode 100644
index 00000000..38fe782e
--- /dev/null
+++ b/common/recipes-kernel/linux/files/0397-drm-amdgpu-RCU-protected-amd_sched_fence_release.patch
@@ -0,0 +1,59 @@
+From b21fc40ce5fbde04cca84b5a635e5ffbcae6ba80 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Christian=20K=C3=B6nig?= <christian.koenig@amd.com>
+Date: Tue, 15 Mar 2016 13:58:14 +0100
+Subject: [PATCH 0397/1110] drm/amdgpu: RCU protected amd_sched_fence_release
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Fences must be freed RCU protected, otherwise the reservation_object_*_rcu()
+functions can run into problems.
+
+Signed-off-by: Christian König <christian.koenig@amd.com>
+Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
+---
+ drivers/gpu/drm/amd/scheduler/sched_fence.c | 23 ++++++++++++++++++++++-
+ 1 file changed, 22 insertions(+), 1 deletion(-)
+
+diff --git a/drivers/gpu/drm/amd/scheduler/sched_fence.c b/drivers/gpu/drm/amd/scheduler/sched_fence.c
+index 87c78ee..dc115ae 100644
+--- a/drivers/gpu/drm/amd/scheduler/sched_fence.c
++++ b/drivers/gpu/drm/amd/scheduler/sched_fence.c
+@@ -84,12 +84,33 @@ static bool amd_sched_fence_enable_signaling(struct fence *f)
+ return true;
+ }
+
+-static void amd_sched_fence_release(struct fence *f)
++/**
++ * amd_sched_fence_free - free up the fence memory
++ *
++ * @rcu: RCU callback head
++ *
++ * Free up the fence memory after the RCU grace period.
++ */
++static void amd_sched_fence_free(struct rcu_head *rcu)
+ {
++ struct fence *f = container_of(rcu, struct fence, rcu);
+ struct amd_sched_fence *fence = to_amd_sched_fence(f);
+ kmem_cache_free(sched_fence_slab, fence);
+ }
+
++/**
++ * amd_sched_fence_release - callback that fence can be freed
++ *
++ * @fence: fence
++ *
++ * This function is called when the reference count becomes zero.
++ * It just RCU schedules freeing up the fence.
++ */
++static void amd_sched_fence_release(struct fence *f)
++{
++ call_rcu(&f->rcu, amd_sched_fence_free);
++}
++
+ const struct fence_ops amd_sched_fence_ops = {
+ .get_driver_name = amd_sched_fence_get_driver_name,
+ .get_timeline_name = amd_sched_fence_get_timeline_name,
+--
+2.7.4
+