Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 93052132 authored by Dave Airlie's avatar Dave Airlie Committed by Alex Deucher
Browse files

amdgpu/dc: convert dc_transfer to use a kref.



Rolling your own atomic ref counts is frowned upon.

Signed-off-by: default avatarDave Airlie <airlied@redhat.com>
Reviewed-by: default avatarHarry Wentland <harry.wentland@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent 5d15ae23
Loading
Loading
Loading
Loading
+9 −8
Original line number Diff line number Diff line
@@ -161,19 +161,20 @@ struct dc_gamma *dc_create_gamma()

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);

	if (atomic_read(&tf->ref_count) == 0)
	struct dc_transfer_func *tf = container_of(kref, struct dc_transfer_func, refcount);
	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()
{
	struct dc_transfer_func *tf = kzalloc(sizeof(*tf), GFP_KERNEL);
@@ -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;

+1 −1
Original line number Diff line number Diff line
@@ -330,11 +330,11 @@ enum dc_transfer_func_predefined {
};

struct dc_transfer_func {
	struct kref refcount;
	struct dc_transfer_func_distributed_points tf_pts;
	enum dc_transfer_func_type type;
	enum dc_transfer_func_predefined tf;
	struct dc_context *ctx;
	atomic_t ref_count;
};

/*
+2 −0
Original line number Diff line number Diff line
@@ -32,6 +32,8 @@
#include <linux/types.h>
#include <drm/drmP.h>

#include <linux/kref.h>

#include "cgs_linux.h"

#if defined(__BIG_ENDIAN) && !defined(BIGENDIAN_CPU)