aboutsummaryrefslogtreecommitdiffstats
path: root/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/2463-amdgpu-dc-convert-dc_sink-to-kref.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/2463-amdgpu-dc-convert-dc_sink-to-kref.patch')
-rw-r--r--meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/2463-amdgpu-dc-convert-dc_sink-to-kref.patch71
1 files changed, 71 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/2463-amdgpu-dc-convert-dc_sink-to-kref.patch b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/2463-amdgpu-dc-convert-dc_sink-to-kref.patch
new file mode 100644
index 00000000..7729755d
--- /dev/null
+++ b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/2463-amdgpu-dc-convert-dc_sink-to-kref.patch
@@ -0,0 +1,71 @@
+From 1fd19ee9fe9870bb5bd2b6bfc561ad18c3376272 Mon Sep 17 00:00:00 2001
+From: Dave Airlie <airlied@redhat.com>
+Date: Tue, 3 Oct 2017 12:39:01 +1000
+Subject: [PATCH 2463/4131] amdgpu/dc: convert dc_sink to kref.
+
+Refcounts use krefs.
+
+Signed-off-by: Dave Airlie <airlied@redhat.com>
+---
+ drivers/gpu/drm/amd/display/dc/core/dc_sink.c | 20 ++++++++++----------
+ drivers/gpu/drm/amd/display/dc/dc.h | 2 +-
+ 2 files changed, 11 insertions(+), 11 deletions(-)
+
+diff --git a/drivers/gpu/drm/amd/display/dc/core/dc_sink.c b/drivers/gpu/drm/amd/display/dc/core/dc_sink.c
+index 3d620d3..25fae38 100644
+--- a/drivers/gpu/drm/amd/display/dc/core/dc_sink.c
++++ b/drivers/gpu/drm/amd/display/dc/core/dc_sink.c
+@@ -63,19 +63,19 @@ static bool construct(struct dc_sink *sink, const struct dc_sink_init_data *init
+
+ void dc_sink_retain(struct dc_sink *sink)
+ {
+- ASSERT(atomic_read(&sink->ref_count) > 0);
+- atomic_inc(&sink->ref_count);
++ kref_get(&sink->refcount);
+ }
+
+-void dc_sink_release(struct dc_sink *sink)
++static void dc_sink_free(struct kref *kref)
+ {
+- ASSERT(atomic_read(&sink->ref_count) > 0);
+- atomic_dec(&sink->ref_count);
++ struct dc_sink *sink = container_of(kref, struct dc_sink, refcount);
++ destruct(sink);
++ kfree(sink);
++}
+
+- if (atomic_read(&sink->ref_count) == 0) {
+- destruct(sink);
+- kfree(sink);
+- }
++void dc_sink_release(struct dc_sink *sink)
++{
++ kref_put(&sink->refcount, dc_sink_free);
+ }
+
+ struct dc_sink *dc_sink_create(const struct dc_sink_init_data *init_params)
+@@ -88,7 +88,7 @@ struct dc_sink *dc_sink_create(const struct dc_sink_init_data *init_params)
+ if (false == construct(sink, init_params))
+ goto construct_fail;
+
+- atomic_inc(&sink->ref_count);
++ kref_init(&sink->refcount);
+
+ return sink;
+
+diff --git a/drivers/gpu/drm/amd/display/dc/dc.h b/drivers/gpu/drm/amd/display/dc/dc.h
+index 542ba05..9967d4a 100644
+--- a/drivers/gpu/drm/amd/display/dc/dc.h
++++ b/drivers/gpu/drm/amd/display/dc/dc.h
+@@ -983,7 +983,7 @@ struct dc_sink {
+ struct dc_context *ctx;
+
+ /* private to dc_sink.c */
+- atomic_t ref_count;
++ struct kref refcount;
+ };
+
+ void dc_sink_retain(struct dc_sink *sink);
+--
+2.7.4
+