diff options
author | Anthony Koo <Anthony.Koo@amd.com> | 2018-04-27 20:50:07 -0400 |
---|---|---|
committer | Alex Deucher <alexander.deucher@amd.com> | 2018-05-18 16:08:30 -0500 |
commit | 9fcab85c580b31f6eb56dd3a00edd5f5270ad55c (patch) | |
tree | d5d85f6d46694c503dd71b0c449b5956ab4403e5 /drivers/gpu | |
parent | f0cd0a346dfd1df4b691fe38dafb51911392fbce (diff) | |
download | linux-stable-9fcab85c580b31f6eb56dd3a00edd5f5270ad55c.tar.gz linux-stable-9fcab85c580b31f6eb56dd3a00edd5f5270ad55c.tar.bz2 linux-stable-9fcab85c580b31f6eb56dd3a00edd5f5270ad55c.zip |
drm/amd/display: fix memory leaks
Signed-off-by: Anthony Koo <Anthony.Koo@amd.com>
Reviewed-by: Tony Cheng <Tony.Cheng@amd.com>
Acked-by: Harry Wentland <harry.wentland@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Diffstat (limited to 'drivers/gpu')
-rw-r--r-- | drivers/gpu/drm/amd/display/modules/stats/stats.c | 24 |
1 files changed, 16 insertions, 8 deletions
diff --git a/drivers/gpu/drm/amd/display/modules/stats/stats.c b/drivers/gpu/drm/amd/display/modules/stats/stats.c index fe9e4b316d3a..3f7d47fdc367 100644 --- a/drivers/gpu/drm/amd/display/modules/stats/stats.c +++ b/drivers/gpu/drm/amd/display/modules/stats/stats.c @@ -115,12 +115,12 @@ struct mod_stats *mod_stats_create(struct dc *dc) unsigned int reg_data; int i = 0; + if (dc == NULL) + goto fail_construct; + core_stats = kzalloc(sizeof(struct core_stats), GFP_KERNEL); if (core_stats == NULL) - goto fail_alloc_context; - - if (dc == NULL) goto fail_construct; core_stats->dc = dc; @@ -146,6 +146,8 @@ struct mod_stats *mod_stats_create(struct dc *dc) core_stats->entries, GFP_KERNEL); + if (core_stats->time == NULL) + goto fail_construct_time; core_stats->event_entries = DAL_STATS_EVENT_ENTRIES_DEFAULT; core_stats->events = kzalloc( @@ -153,13 +155,13 @@ struct mod_stats *mod_stats_create(struct dc *dc) core_stats->event_entries, GFP_KERNEL); + if (core_stats->events == NULL) + goto fail_construct_events; + } else { core_stats->entries = 0; } - if (core_stats->time == NULL) - goto fail_construct; - /* Purposely leave index 0 unused so we don't need special logic to * handle calculation cases that depend on previous flip data. */ @@ -171,10 +173,13 @@ struct mod_stats *mod_stats_create(struct dc *dc) return &core_stats->public; -fail_construct: +fail_construct_events: + kfree(core_stats->time); + +fail_construct_time: kfree(core_stats); -fail_alloc_context: +fail_construct: return NULL; } @@ -186,6 +191,9 @@ void mod_stats_destroy(struct mod_stats *mod_stats) if (core_stats->time != NULL) kfree(core_stats->time); + if (core_stats->events != NULL) + kfree(core_stats->events); + kfree(core_stats); } } |