amdgpu/dc: convert dc_stream_state to kref.
authorDave Airlie <airlied@redhat.com>
Tue, 3 Oct 2017 02:39:00 +0000 (12:39 +1000)
committerAlex Deucher <alexander.deucher@amd.com>
Fri, 6 Oct 2017 17:09:50 +0000 (13:09 -0400)
Signed-off-by: Dave Airlie <airlied@redhat.com>
Reviewed-by: Harry Wentland <harry.wentland@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/display/dc/core/dc_stream.c
drivers/gpu/drm/amd/display/dc/dc.h

index a991964..23df7bc 100644 (file)
@@ -118,20 +118,21 @@ static void destruct(struct dc_stream_state *stream)
 
 void dc_stream_retain(struct dc_stream_state *stream)
 {
-       ASSERT(atomic_read(&stream->ref_count) > 0);
-       atomic_inc(&stream->ref_count);
+       kref_get(&stream->refcount);
+}
+
+static void dc_stream_free(struct kref *kref)
+{
+       struct dc_stream_state *stream = container_of(kref, struct dc_stream_state, refcount);
+
+       destruct(stream);
+       kfree(stream);
 }
 
 void dc_stream_release(struct dc_stream_state *stream)
 {
        if (stream != NULL) {
-               ASSERT(atomic_read(&stream->ref_count) > 0);
-               atomic_dec(&stream->ref_count);
-
-               if (atomic_read(&stream->ref_count) == 0) {
-                       destruct(stream);
-                       kfree(stream);
-               }
+               kref_put(&stream->refcount, dc_stream_free);
        }
 }
 
@@ -149,10 +150,9 @@ struct dc_stream_state *dc_create_stream_for_sink(
 
        construct(stream, sink);
 
-       atomic_inc(&stream->ref_count);
+       kref_init(&stream->refcount);
 
        return stream;
-
 }
 
 struct dc_stream_status *dc_stream_get_status(
index 1adfa97..97f6f34 100644 (file)
@@ -558,7 +558,7 @@ struct dc_stream_state {
        struct dc_stream_status status;
 
        /* from stream struct */
-       atomic_t ref_count;
+       struct kref refcount;
 };
 
 struct dc_stream_update {