From: Andrey Grodzovsky <Andrey.Grodzovsky@xxxxxxx> Change-Id: I5832e930aacc1549df6286885e5f2bc67d80a797 Signed-off-by: Andrey Grodzovsky <Andrey.Grodzovsky at amd.com> Signed-off-by: Jordan Lazare <Jordan.Lazare at amd.com> Signed-off-by: Tony Cheng <tony.cheng at amd.com> Reviewed-by: Andrey Grodzovsky <Andrey.Grodzovsky at amd.com> Reviewed-by: Jordan Lazare <Jordan.Lazare at amd.com> Acked-by: Harry Wentland <Harry.Wentland at amd.com> --- drivers/gpu/drm/amd/display/dc/core/dc_sink.c | 5 +++-- drivers/gpu/drm/amd/display/dc/core/dc_stream.c | 5 ++++- drivers/gpu/drm/amd/display/dc/core/dc_surface.c | 14 +++++++++++--- drivers/gpu/drm/amd/display/dc/core/dc_target.c | 4 +++- 4 files changed, 21 insertions(+), 7 deletions(-) diff --git a/drivers/gpu/drm/amd/display/dc/core/dc_sink.c b/drivers/gpu/drm/amd/display/dc/core/dc_sink.c index 67ae799b6f4f..9dff0bfd5b23 100644 --- a/drivers/gpu/drm/amd/display/dc/core/dc_sink.c +++ b/drivers/gpu/drm/amd/display/dc/core/dc_sink.c @@ -71,6 +71,7 @@ void dc_sink_retain(const struct dc_sink *dc_sink) { struct sink *sink = DC_SINK_TO_SINK(dc_sink); + ASSERT(sink->ref_count > 0); ++sink->ref_count; } @@ -78,6 +79,7 @@ void dc_sink_release(const struct dc_sink *dc_sink) { struct sink *sink = DC_SINK_TO_SINK(dc_sink); + ASSERT(sink->ref_count > 0); --sink->ref_count; if (sink->ref_count == 0) { @@ -96,8 +98,7 @@ struct dc_sink *dc_sink_create(const struct dc_sink_init_data *init_params) if (false == construct(sink, init_params)) goto construct_fail; - /* TODO should we move this outside to where the assignment actually happens? */ - dc_sink_retain(&sink->protected.public); + ++sink->ref_count; return &sink->protected.public; diff --git a/drivers/gpu/drm/amd/display/dc/core/dc_stream.c b/drivers/gpu/drm/amd/display/dc/core/dc_stream.c index 84e3fbbe23ac..39a6124aa85f 100644 --- a/drivers/gpu/drm/amd/display/dc/core/dc_stream.c +++ b/drivers/gpu/drm/amd/display/dc/core/dc_stream.c @@ -99,6 +99,8 @@ static void destruct(struct core_stream *stream) void dc_stream_retain(const struct dc_stream *dc_stream) { struct stream *stream = DC_STREAM_TO_STREAM(dc_stream); + + ASSERT(stream->ref_count > 0); stream->ref_count++; } @@ -108,6 +110,7 @@ void dc_stream_release(const struct dc_stream *public) struct core_stream *protected = DC_STREAM_TO_CORE(public); if (public != NULL) { + ASSERT(stream->ref_count > 0); stream->ref_count--; if (stream->ref_count == 0) { @@ -134,7 +137,7 @@ struct dc_stream *dc_create_stream_for_sink( if (false == construct(&stream->protected, dc_sink)) goto construct_fail; - dc_stream_retain(&stream->protected.public); + stream->ref_count++; return &stream->protected.public; 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 cf8fb9a8ce8e..6b4c75a78fe8 100644 --- a/drivers/gpu/drm/amd/display/dc/core/dc_surface.c +++ b/drivers/gpu/drm/amd/display/dc/core/dc_surface.c @@ -105,7 +105,7 @@ struct dc_surface *dc_create_surface(const struct dc *dc) if (false == construct(core_dc->ctx, surface)) goto construct_fail; - dc_surface_retain(&surface->protected.public); + ++surface->ref_count; return &surface->protected.public; @@ -162,6 +162,7 @@ void dc_surface_retain(const struct dc_surface *dc_surface) { struct surface *surface = DC_SURFACE_TO_SURFACE(dc_surface); + ASSERT(surface->ref_count > 0); ++surface->ref_count; } @@ -169,6 +170,7 @@ void dc_surface_release(const struct dc_surface *dc_surface) { struct surface *surface = DC_SURFACE_TO_SURFACE(dc_surface); + ASSERT(surface->ref_count > 0); --surface->ref_count; if (surface->ref_count == 0) { @@ -181,12 +183,15 @@ void dc_gamma_retain(const struct dc_gamma *dc_gamma) { struct gamma *gamma = DC_GAMMA_TO_GAMMA(dc_gamma); + ASSERT(gamma->ref_count > 0); ++gamma->ref_count; } void dc_gamma_release(const struct dc_gamma *dc_gamma) { struct gamma *gamma = DC_GAMMA_TO_GAMMA(dc_gamma); + + ASSERT(gamma->ref_count > 0); --gamma->ref_count; if (gamma->ref_count == 0) @@ -200,7 +205,7 @@ struct dc_gamma *dc_create_gamma() if (gamma == NULL) goto alloc_fail; - dc_gamma_retain(&gamma->protected.public); + ++gamma->ref_count; return &gamma->protected.public; @@ -212,12 +217,15 @@ void dc_transfer_func_retain(const struct dc_transfer_func *dc_tf) { struct transfer_func *tf = DC_TRANSFER_FUNC_TO_TRANSFER_FUNC(dc_tf); + ASSERT(tf->ref_count > 0); ++tf->ref_count; } void dc_transfer_func_release(const struct dc_transfer_func *dc_tf) { struct transfer_func *tf = DC_TRANSFER_FUNC_TO_TRANSFER_FUNC(dc_tf); + + ASSERT(tf->ref_count > 0); --tf->ref_count; if (tf->ref_count == 0) @@ -231,7 +239,7 @@ struct dc_transfer_func *dc_create_transfer_func() if (tf == NULL) goto alloc_fail; - dc_transfer_func_retain(&tf->protected.public); + ++tf->ref_count; return &tf->protected.public; diff --git a/drivers/gpu/drm/amd/display/dc/core/dc_target.c b/drivers/gpu/drm/amd/display/dc/core/dc_target.c index 2531df74871a..d4ecf2da26d2 100644 --- a/drivers/gpu/drm/amd/display/dc/core/dc_target.c +++ b/drivers/gpu/drm/amd/display/dc/core/dc_target.c @@ -71,6 +71,7 @@ void dc_target_retain(const struct dc_target *dc_target) { struct target *target = DC_TARGET_TO_TARGET(dc_target); + ASSERT(target->ref_count > 0); target->ref_count++; } @@ -81,6 +82,7 @@ void dc_target_release(const struct dc_target *dc_target) ASSERT(target->ref_count > 0); target->ref_count--; + if (target->ref_count == 0) { destruct(protected); dm_free(target); @@ -120,7 +122,7 @@ struct dc_target *dc_create_target_for_streams( construct(&target->protected, stream->ctx, dc_streams, stream_count); - dc_target_retain(&target->protected.public); + target->ref_count++; return &target->protected.public; -- 2.9.3