From 93052132568aedb5eda04deae51d6034738a4800 Mon Sep 17 00:00:00 2001 From: Dave Airlie Date: Tue, 3 Oct 2017 12:38:57 +1000 Subject: amdgpu/dc: convert dc_transfer to use a kref. Rolling your own atomic ref counts is frowned upon. Signed-off-by: Dave Airlie Reviewed-by: Harry Wentland Signed-off-by: Alex Deucher --- drivers/gpu/drm/amd/display/dc/core/dc_surface.c | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) (limited to 'drivers/gpu/drm/amd/display/dc/core/dc_surface.c') diff --git a/drivers/gpu/drm/amd/display/dc/core/dc_surface.c b/drivers/gpu/drm/amd/display/dc/core/dc_surface.c index ff07105..c2168df 100644 --- a/drivers/gpu/drm/amd/display/dc/core/dc_surface.c +++ b/drivers/gpu/drm/amd/display/dc/core/dc_surface.c @@ -161,17 +161,18 @@ alloc_fail: void dc_transfer_func_retain(struct dc_transfer_func *tf) { - ASSERT(atomic_read(&tf->ref_count) > 0); - atomic_inc(&tf->ref_count); + kref_get(&tf->refcount); } -void dc_transfer_func_release(struct dc_transfer_func *tf) +static void dc_transfer_func_free(struct kref *kref) { - ASSERT(atomic_read(&tf->ref_count) > 0); - atomic_dec(&tf->ref_count); + struct dc_transfer_func *tf = container_of(kref, struct dc_transfer_func, refcount); + kfree(tf); +} - if (atomic_read(&tf->ref_count) == 0) - kfree(tf); +void dc_transfer_func_release(struct dc_transfer_func *tf) +{ + kref_put(&tf->refcount, dc_transfer_func_free); } struct dc_transfer_func *dc_create_transfer_func() @@ -181,7 +182,7 @@ struct dc_transfer_func *dc_create_transfer_func() if (tf == NULL) goto alloc_fail; - atomic_inc(&tf->ref_count); + kref_init(&tf->refcount); return tf; -- cgit v1.1