Commit cc66a42c authored by Rob Clark's avatar Rob Clark

drm/msm/gpu: Capture all BO addr+size in devcore

It is useful to know what buffers userspace thinks are associated with
the submit, even if we don't care to capture their content.  This brings
things more inline with $debugfs/rd cmdstream dumping.
Signed-off-by: default avatarRob Clark <robdclark@chromium.org>
Patchwork: https://patchwork.freedesktop.org/patch/491908/
Link: https://lore.kernel.org/r/20220629211919.563585-2-robdclark@gmail.com
parent b571cb52
...@@ -221,7 +221,7 @@ static void msm_gpu_devcoredump_free(void *data) ...@@ -221,7 +221,7 @@ static void msm_gpu_devcoredump_free(void *data)
} }
static void msm_gpu_crashstate_get_bo(struct msm_gpu_state *state, static void msm_gpu_crashstate_get_bo(struct msm_gpu_state *state,
struct msm_gem_object *obj, u64 iova, u32 flags) struct msm_gem_object *obj, u64 iova, bool full)
{ {
struct msm_gpu_state_bo *state_bo = &state->bos[state->nr_bos]; struct msm_gpu_state_bo *state_bo = &state->bos[state->nr_bos];
...@@ -229,8 +229,7 @@ static void msm_gpu_crashstate_get_bo(struct msm_gpu_state *state, ...@@ -229,8 +229,7 @@ static void msm_gpu_crashstate_get_bo(struct msm_gpu_state *state,
state_bo->size = obj->base.size; state_bo->size = obj->base.size;
state_bo->iova = iova; state_bo->iova = iova;
/* Only store data for non imported buffer objects marked for read */ if (full) {
if ((flags & MSM_SUBMIT_BO_READ) && !obj->base.import_attach) {
void *ptr; void *ptr;
state_bo->data = kvmalloc(obj->base.size, GFP_KERNEL); state_bo->data = kvmalloc(obj->base.size, GFP_KERNEL);
...@@ -276,34 +275,15 @@ static void msm_gpu_crashstate_capture(struct msm_gpu *gpu, ...@@ -276,34 +275,15 @@ static void msm_gpu_crashstate_capture(struct msm_gpu *gpu,
state->fault_info = gpu->fault_info; state->fault_info = gpu->fault_info;
if (submit) { if (submit) {
int i, nr = 0; int i;
/* count # of buffers to dump: */ state->bos = kcalloc(submit->nr_bos,
for (i = 0; i < submit->nr_bos; i++)
if (should_dump(submit, i))
nr++;
/* always dump cmd bo's, but don't double count them: */
for (i = 0; i < submit->nr_cmds; i++)
if (!should_dump(submit, submit->cmd[i].idx))
nr++;
state->bos = kcalloc(nr,
sizeof(struct msm_gpu_state_bo), GFP_KERNEL); sizeof(struct msm_gpu_state_bo), GFP_KERNEL);
for (i = 0; state->bos && i < submit->nr_bos; i++) { for (i = 0; state->bos && i < submit->nr_bos; i++) {
if (should_dump(submit, i)) { msm_gpu_crashstate_get_bo(state, submit->bos[i].obj,
msm_gpu_crashstate_get_bo(state, submit->bos[i].obj, submit->bos[i].iova,
submit->bos[i].iova, submit->bos[i].flags); should_dump(submit, i));
}
}
for (i = 0; state->bos && i < submit->nr_cmds; i++) {
int idx = submit->cmd[i].idx;
if (!should_dump(submit, submit->cmd[i].idx)) {
msm_gpu_crashstate_get_bo(state, submit->bos[idx].obj,
submit->bos[idx].iova, submit->bos[idx].flags);
}
} }
} }
......
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