Commit ec8f1813 authored by Akhil P Oommen's avatar Akhil P Oommen Committed by Rob Clark

drm/msm/a6xx: Replace kcalloc() with kvzalloc()

In order to reduce chance of allocation failure while capturing a6xx
gpu state, use kvzalloc() instead of kcalloc() in state_kcalloc().

Indirectly, this patch helps to fix leaking memory allocated for
gmu_debug object.

Fixes: b859f9b0 (drm/msm/gpu: Snapshot GMU debug buffer)
Signed-off-by: default avatarAkhil P Oommen <quic_akhilpo@quicinc.com>
Patchwork: https://patchwork.freedesktop.org/patch/505074/
Link: https://lore.kernel.org/r/20220928124830.1.I8ea24a8d586b4978823b848adde000f92f74d5c2@changeidSigned-off-by: default avatarRob Clark <robdclark@chromium.org>
parent 084b9e17
...@@ -91,7 +91,7 @@ struct a6xx_state_memobj { ...@@ -91,7 +91,7 @@ struct a6xx_state_memobj {
static void *state_kcalloc(struct a6xx_gpu_state *a6xx_state, int nr, size_t objsize) static void *state_kcalloc(struct a6xx_gpu_state *a6xx_state, int nr, size_t objsize)
{ {
struct a6xx_state_memobj *obj = struct a6xx_state_memobj *obj =
kzalloc((nr * objsize) + sizeof(*obj), GFP_KERNEL); kvzalloc((nr * objsize) + sizeof(*obj), GFP_KERNEL);
if (!obj) if (!obj)
return NULL; return NULL;
...@@ -819,7 +819,7 @@ static struct msm_gpu_state_bo *a6xx_snapshot_gmu_bo( ...@@ -819,7 +819,7 @@ static struct msm_gpu_state_bo *a6xx_snapshot_gmu_bo(
snapshot->iova = bo->iova; snapshot->iova = bo->iova;
snapshot->size = bo->size; snapshot->size = bo->size;
snapshot->data = kvzalloc(snapshot->size, GFP_KERNEL); snapshot->data = state_kcalloc(a6xx_state, 1, snapshot->size);
if (!snapshot->data) if (!snapshot->data)
return NULL; return NULL;
...@@ -1034,14 +1034,8 @@ static void a6xx_gpu_state_destroy(struct kref *kref) ...@@ -1034,14 +1034,8 @@ static void a6xx_gpu_state_destroy(struct kref *kref)
struct a6xx_gpu_state *a6xx_state = container_of(state, struct a6xx_gpu_state *a6xx_state = container_of(state,
struct a6xx_gpu_state, base); struct a6xx_gpu_state, base);
if (a6xx_state->gmu_log)
kvfree(a6xx_state->gmu_log->data);
if (a6xx_state->gmu_hfi)
kvfree(a6xx_state->gmu_hfi->data);
list_for_each_entry_safe(obj, tmp, &a6xx_state->objs, node) list_for_each_entry_safe(obj, tmp, &a6xx_state->objs, node)
kfree(obj); kvfree(obj);
adreno_gpu_state_destroy(state); adreno_gpu_state_destroy(state);
kfree(a6xx_state); kfree(a6xx_state);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment