From: Rob Clark <robdcl...@chromium.org>

Similar to the previous commit, add support for dumping partial
mappings.

Signed-off-by: Rob Clark <robdcl...@chromium.org>
---
 drivers/gpu/drm/msm/msm_gem.h | 10 ---------
 drivers/gpu/drm/msm/msm_rd.c  | 38 ++++++++++++++++-------------------
 2 files changed, 17 insertions(+), 31 deletions(-)

diff --git a/drivers/gpu/drm/msm/msm_gem.h b/drivers/gpu/drm/msm/msm_gem.h
index 0409d35ebb32..bdd9b09b8ca9 100644
--- a/drivers/gpu/drm/msm/msm_gem.h
+++ b/drivers/gpu/drm/msm/msm_gem.h
@@ -420,14 +420,4 @@ static inline void msm_gem_submit_put(struct 
msm_gem_submit *submit)
 
 void msm_submit_retire(struct msm_gem_submit *submit);
 
-/* helper to determine of a buffer in submit should be dumped, used for both
- * devcoredump and debugfs cmdstream dumping:
- */
-static inline bool
-should_dump(struct msm_gem_submit *submit, int idx)
-{
-       extern bool rd_full;
-       return rd_full || (submit->bos[idx].flags & MSM_SUBMIT_BO_DUMP);
-}
-
 #endif /* __MSM_GEM_H__ */
diff --git a/drivers/gpu/drm/msm/msm_rd.c b/drivers/gpu/drm/msm/msm_rd.c
index 39138e190cb9..edbcb93410a9 100644
--- a/drivers/gpu/drm/msm/msm_rd.c
+++ b/drivers/gpu/drm/msm/msm_rd.c
@@ -308,21 +308,11 @@ void msm_rd_debugfs_cleanup(struct msm_drm_private *priv)
        priv->hangrd = NULL;
 }
 
-static void snapshot_buf(struct msm_rd_state *rd,
-               struct msm_gem_submit *submit, int idx,
-               uint64_t iova, uint32_t size, bool full)
+static void snapshot_buf(struct msm_rd_state *rd, struct drm_gem_object *obj,
+                        uint64_t iova, bool full, size_t offset, size_t size)
 {
-       struct drm_gem_object *obj = submit->bos[idx].obj;
-       unsigned offset = 0;
        const char *buf;
 
-       if (iova) {
-               offset = iova - submit->bos[idx].iova;
-       } else {
-               iova = submit->bos[idx].iova;
-               size = obj->size;
-       }
-
        /*
         * Always write the GPUADDR header so can get a complete list of all the
         * buffers in the cmd
@@ -333,10 +323,6 @@ static void snapshot_buf(struct msm_rd_state *rd,
        if (!full)
                return;
 
-       /* But only dump the contents of buffers marked READ */
-       if (!(submit->bos[idx].flags & MSM_SUBMIT_BO_READ))
-               return;
-
        buf = msm_gem_get_vaddr_active(obj);
        if (IS_ERR(buf))
                return;
@@ -352,6 +338,7 @@ static void snapshot_buf(struct msm_rd_state *rd,
 void msm_rd_dump_submit(struct msm_rd_state *rd, struct msm_gem_submit *submit,
                const char *fmt, ...)
 {
+       extern bool rd_full;
        struct task_struct *task;
        char msg[256];
        int i, n;
@@ -385,16 +372,25 @@ void msm_rd_dump_submit(struct msm_rd_state *rd, struct 
msm_gem_submit *submit,
 
        rd_write_section(rd, RD_CMD, msg, ALIGN(n, 4));
 
-       for (i = 0; i < submit->nr_bos; i++)
-               snapshot_buf(rd, submit, i, 0, 0, should_dump(submit, i));
+       for (i = 0; i < submit->nr_bos; i++) {
+               struct drm_gem_object *obj = submit->bos[i].obj;
+               bool dump = rd_full || (submit->bos[i].flags & 
MSM_SUBMIT_BO_DUMP);
+
+               snapshot_buf(rd, obj, submit->bos[i].iova, dump, 0, obj->size);
+       }
 
        for (i = 0; i < submit->nr_cmds; i++) {
                uint32_t szd  = submit->cmd[i].size; /* in dwords */
+               int idx = submit->cmd[i].idx;
+               bool dump = rd_full || (submit->bos[idx].flags & 
MSM_SUBMIT_BO_DUMP);
 
                /* snapshot cmdstream bo's (if we haven't already): */
-               if (!should_dump(submit, i)) {
-                       snapshot_buf(rd, submit, submit->cmd[i].idx,
-                                       submit->cmd[i].iova, szd * 4, true);
+               if (!dump) {
+                       struct drm_gem_object *obj = submit->bos[idx].obj;
+                       size_t offset = submit->cmd[i].iova - 
submit->bos[idx].iova;
+
+                       snapshot_buf(rd, obj, submit->cmd[i].iova, true,
+                                    offset, szd * 4);
                }
        }
 
-- 
2.48.1

Reply via email to