summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAnthony Koo2018-04-28 02:50:07 +0200
committerAlex Deucher2018-05-18 23:08:30 +0200
commit9fcab85c580b31f6eb56dd3a00edd5f5270ad55c (patch)
treed5d85f6d46694c503dd71b0c449b5956ab4403e5
parentdrm/amd/display: DCN1 link encoder (diff)
downloadkernel-qcow2-linux-9fcab85c580b31f6eb56dd3a00edd5f5270ad55c.tar.gz
kernel-qcow2-linux-9fcab85c580b31f6eb56dd3a00edd5f5270ad55c.tar.xz
kernel-qcow2-linux-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>
-rw-r--r--drivers/gpu/drm/amd/display/modules/stats/stats.c24
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);
}
}