diff options
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/2460-amdgpu-dc-convert-dc_gamma-to-kref-reference-countin.patch')
-rw-r--r-- | meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/2460-amdgpu-dc-convert-dc_gamma-to-kref-reference-countin.patch | 80 |
1 files changed, 80 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/2460-amdgpu-dc-convert-dc_gamma-to-kref-reference-countin.patch b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/2460-amdgpu-dc-convert-dc_gamma-to-kref-reference-countin.patch new file mode 100644 index 00000000..10953210 --- /dev/null +++ b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/2460-amdgpu-dc-convert-dc_gamma-to-kref-reference-countin.patch @@ -0,0 +1,80 @@ +From b2d5fb1f44d6510c90b2f71aad95234e8bd3a071 Mon Sep 17 00:00:00 2001 +From: Dave Airlie <airlied@redhat.com> +Date: Tue, 3 Oct 2017 12:38:58 +1000 +Subject: [PATCH 2460/4131] amdgpu/dc: convert dc_gamma to kref reference + counting. + +Rolling your own reference counting is frowned upon. + +Signed-off-by: Dave Airlie <airlied@redhat.com> +--- + drivers/gpu/drm/amd/display/dc/core/dc_surface.c | 19 +++++++++---------- + drivers/gpu/drm/amd/display/dc/dc_hw_types.h | 4 +--- + 2 files changed, 10 insertions(+), 13 deletions(-) + +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 c2168df..0950075 100644 +--- a/drivers/gpu/drm/amd/display/dc/core/dc_surface.c ++++ b/drivers/gpu/drm/amd/display/dc/core/dc_surface.c +@@ -129,18 +129,18 @@ void dc_plane_state_release(struct dc_plane_state *plane_state) + + void dc_gamma_retain(struct dc_gamma *gamma) + { +- ASSERT(atomic_read(&gamma->ref_count) > 0); +- atomic_inc(&gamma->ref_count); ++ kref_get(&gamma->refcount); + } + +-void dc_gamma_release(struct dc_gamma **gamma) ++static void dc_gamma_free(struct kref *kref) + { +- ASSERT(atomic_read(&(*gamma)->ref_count) > 0); +- atomic_dec(&(*gamma)->ref_count); +- +- if (atomic_read(&(*gamma)->ref_count) == 0) +- kfree((*gamma)); ++ struct dc_gamma *gamma = container_of(kref, struct dc_gamma, refcount); ++ kfree(gamma); ++} + ++void dc_gamma_release(struct dc_gamma **gamma) ++{ ++ kref_put(&(*gamma)->refcount, dc_gamma_free); + *gamma = NULL; + } + +@@ -151,8 +151,7 @@ struct dc_gamma *dc_create_gamma() + if (gamma == NULL) + goto alloc_fail; + +- atomic_inc(&gamma->ref_count); +- ++ kref_init(&gamma->refcount); + return gamma; + + alloc_fail: +diff --git a/drivers/gpu/drm/amd/display/dc/dc_hw_types.h b/drivers/gpu/drm/amd/display/dc/dc_hw_types.h +index 94f83cd..4ab1093 100644 +--- a/drivers/gpu/drm/amd/display/dc/dc_hw_types.h ++++ b/drivers/gpu/drm/amd/display/dc/dc_hw_types.h +@@ -420,6 +420,7 @@ enum dc_gamma_type { + }; + + struct dc_gamma { ++ struct kref refcount; + enum dc_gamma_type type; + unsigned int num_entries; + +@@ -431,9 +432,6 @@ struct dc_gamma { + + /* private to DC core */ + struct dc_context *ctx; +- +- /* private to dc_surface.c */ +- atomic_t ref_count; + }; + + /* Used by both ipp amd opp functions*/ +-- +2.7.4 + |