Skip to content

Commit 06ebb4f

Browse files
robclarkRob Clark
authored andcommitted
drm/msm: rd dumping support for sparse
As with devcoredump, we need to iterate the VMAs to figure out what to dump. Signed-off-by: Rob Clark <robdclark@chromium.org> Signed-off-by: Rob Clark <robin.clark@oss.qualcomm.com> Tested-by: Antonino Maniscalco <antomani103@gmail.com> Reviewed-by: Antonino Maniscalco <antomani103@gmail.com> Patchwork: https://patchwork.freedesktop.org/patch/661510/
1 parent af9aa6f commit 06ebb4f

1 file changed

Lines changed: 33 additions & 15 deletions

File tree

drivers/gpu/drm/msm/msm_rd.c

Lines changed: 33 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -372,25 +372,43 @@ void msm_rd_dump_submit(struct msm_rd_state *rd, struct msm_gem_submit *submit,
372372

373373
rd_write_section(rd, RD_CMD, msg, ALIGN(n, 4));
374374

375-
for (i = 0; i < submit->nr_bos; i++) {
376-
struct drm_gem_object *obj = submit->bos[i].obj;
377-
bool dump = rd_full || (submit->bos[i].flags & MSM_SUBMIT_BO_DUMP);
375+
if (msm_context_is_vmbind(submit->queue->ctx)) {
376+
struct drm_gpuva *vma;
378377

379-
snapshot_buf(rd, obj, submit->bos[i].iova, dump, 0, obj->size);
380-
}
378+
drm_gpuvm_resv_assert_held(submit->vm);
381379

382-
for (i = 0; i < submit->nr_cmds; i++) {
383-
uint32_t szd = submit->cmd[i].size; /* in dwords */
384-
int idx = submit->cmd[i].idx;
385-
bool dump = rd_full || (submit->bos[idx].flags & MSM_SUBMIT_BO_DUMP);
380+
drm_gpuvm_for_each_va (vma, submit->vm) {
381+
bool dump = rd_full || (vma->flags & MSM_VMA_DUMP);
382+
383+
/* Skip MAP_NULL/PRR VMAs: */
384+
if (!vma->gem.obj)
385+
continue;
386+
387+
snapshot_buf(rd, vma->gem.obj, vma->va.addr, dump,
388+
vma->gem.offset, vma->va.range);
389+
}
390+
391+
} else {
392+
for (i = 0; i < submit->nr_bos; i++) {
393+
struct drm_gem_object *obj = submit->bos[i].obj;
394+
bool dump = rd_full || (submit->bos[i].flags & MSM_SUBMIT_BO_DUMP);
395+
396+
snapshot_buf(rd, obj, submit->bos[i].iova, dump, 0, obj->size);
397+
}
398+
399+
for (i = 0; i < submit->nr_cmds; i++) {
400+
uint32_t szd = submit->cmd[i].size; /* in dwords */
401+
int idx = submit->cmd[i].idx;
402+
bool dump = rd_full || (submit->bos[idx].flags & MSM_SUBMIT_BO_DUMP);
386403

387-
/* snapshot cmdstream bo's (if we haven't already): */
388-
if (!dump) {
389-
struct drm_gem_object *obj = submit->bos[idx].obj;
390-
size_t offset = submit->cmd[i].iova - submit->bos[idx].iova;
404+
/* snapshot cmdstream bo's (if we haven't already): */
405+
if (!dump) {
406+
struct drm_gem_object *obj = submit->bos[idx].obj;
407+
size_t offset = submit->cmd[i].iova - submit->bos[idx].iova;
391408

392-
snapshot_buf(rd, obj, submit->cmd[i].iova, true,
393-
offset, szd * 4);
409+
snapshot_buf(rd, obj, submit->cmd[i].iova, true,
410+
offset, szd * 4);
411+
}
394412
}
395413
}
396414

0 commit comments

Comments
 (0)