diff options
Diffstat (limited to 'common/recipes-kernel/linux/files/0396-drm-amdgpu-RCU-protected-amdgpu_fence_release.patch')
-rw-r--r-- | common/recipes-kernel/linux/files/0396-drm-amdgpu-RCU-protected-amdgpu_fence_release.patch | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/common/recipes-kernel/linux/files/0396-drm-amdgpu-RCU-protected-amdgpu_fence_release.patch b/common/recipes-kernel/linux/files/0396-drm-amdgpu-RCU-protected-amdgpu_fence_release.patch new file mode 100644 index 00000000..fc3e54aa --- /dev/null +++ b/common/recipes-kernel/linux/files/0396-drm-amdgpu-RCU-protected-amdgpu_fence_release.patch @@ -0,0 +1,59 @@ +From 352824dfbfbff5328210e72402abe1a934113ce0 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:40:17 +0100 +Subject: [PATCH 0396/1110] drm/amdgpu: RCU protected amdgpu_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/amdgpu/amdgpu_fence.c | 23 ++++++++++++++++++++++- + 1 file changed, 22 insertions(+), 1 deletion(-) + +diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_fence.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_fence.c +index d8bbe85..ec73ab1 100644 +--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_fence.c ++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_fence.c +@@ -638,12 +638,33 @@ static bool amdgpu_fence_enable_signaling(struct fence *f) + return true; + } + +-static void amdgpu_fence_release(struct fence *f) ++/** ++ * amdgpu_fence_free - free up the fence memory ++ * ++ * @rcu: RCU callback head ++ * ++ * Free up the fence memory after the RCU grace period. ++ */ ++static void amdgpu_fence_free(struct rcu_head *rcu) + { ++ struct fence *f = container_of(rcu, struct fence, rcu); + struct amdgpu_fence *fence = to_amdgpu_fence(f); + kmem_cache_free(amdgpu_fence_slab, fence); + } + ++/** ++ * amdgpu_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 amdgpu_fence_release(struct fence *f) ++{ ++ call_rcu(&f->rcu, amdgpu_fence_free); ++} ++ + static const struct fence_ops amdgpu_fence_ops = { + .get_driver_name = amdgpu_fence_get_driver_name, + .get_timeline_name = amdgpu_fence_get_timeline_name, +-- +2.7.4 + |