diff options
-rw-r--r-- | drivers/gpu/drm/amd/display/dc/core/dc_surface.c | 20 | ||||
-rw-r--r-- | 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_surface.c b/drivers/gpu/drm/amd/display/dc/core/dc_surface.c index 0950075b6c54..d43783a45ab6 100644 --- a/drivers/gpu/drm/amd/display/dc/core/dc_surface.c +++ b/drivers/gpu/drm/amd/display/dc/core/dc_surface.c | |||
@@ -71,8 +71,8 @@ struct dc_plane_state *dc_create_plane_state(struct dc *dc) | |||
71 | if (NULL == plane_state) | 71 | if (NULL == plane_state) |
72 | return NULL; | 72 | return NULL; |
73 | 73 | ||
74 | kref_init(&plane_state->refcount); | ||
74 | construct(core_dc->ctx, plane_state); | 75 | construct(core_dc->ctx, plane_state); |
75 | atomic_inc(&plane_state->ref_count); | ||
76 | 76 | ||
77 | return plane_state; | 77 | return plane_state; |
78 | } | 78 | } |
@@ -112,19 +112,19 @@ const struct dc_plane_status *dc_plane_get_status( | |||
112 | 112 | ||
113 | void dc_plane_state_retain(struct dc_plane_state *plane_state) | 113 | void dc_plane_state_retain(struct dc_plane_state *plane_state) |
114 | { | 114 | { |
115 | ASSERT(atomic_read(&plane_state->ref_count) > 0); | 115 | kref_get(&plane_state->refcount); |
116 | atomic_inc(&plane_state->ref_count); | ||
117 | } | 116 | } |
118 | 117 | ||
119 | void dc_plane_state_release(struct dc_plane_state *plane_state) | 118 | static void dc_plane_state_free(struct kref *kref) |
120 | { | 119 | { |
121 | ASSERT(atomic_read(&plane_state->ref_count) > 0); | 120 | struct dc_plane_state *plane_state = container_of(kref, struct dc_plane_state, refcount); |
122 | atomic_dec(&plane_state->ref_count); | 121 | destruct(plane_state); |
122 | kfree(plane_state); | ||
123 | } | ||
123 | 124 | ||
124 | if (atomic_read(&plane_state->ref_count) == 0) { | 125 | void dc_plane_state_release(struct dc_plane_state *plane_state) |
125 | destruct(plane_state); | 126 | { |
126 | kfree(plane_state); | 127 | kref_put(&plane_state->refcount, dc_plane_state_free); |
127 | } | ||
128 | } | 128 | } |
129 | 129 | ||
130 | void dc_gamma_retain(struct dc_gamma *gamma) | 130 | void dc_gamma_retain(struct dc_gamma *gamma) |
diff --git a/drivers/gpu/drm/amd/display/dc/dc.h b/drivers/gpu/drm/amd/display/dc/dc.h index f16c545a87ed..1adfa97bf3fd 100644 --- a/drivers/gpu/drm/amd/display/dc/dc.h +++ b/drivers/gpu/drm/amd/display/dc/dc.h | |||
@@ -381,7 +381,7 @@ struct dc_plane_state { | |||
381 | 381 | ||
382 | /* private to dc_surface.c */ | 382 | /* private to dc_surface.c */ |
383 | enum dc_irq_source irq_source; | 383 | enum dc_irq_source irq_source; |
384 | atomic_t ref_count; | 384 | struct kref refcount; |
385 | }; | 385 | }; |
386 | 386 | ||
387 | struct dc_plane_info { | 387 | struct dc_plane_info { |