]> git.proxmox.com Git - mirror_ubuntu-focal-kernel.git/commitdiff
drm/msm/gpu: add submit flag to hint which buffers should be dumped
authorRob Clark <robdclark@gmail.com>
Tue, 23 Oct 2018 18:42:37 +0000 (14:42 -0400)
committerRob Clark <robdclark@gmail.com>
Tue, 11 Dec 2018 18:07:04 +0000 (13:07 -0500)
To lower CPU  overhead, future userspace will be switching to pinning
iova and avoiding the use of relocs, and only include cmds table entries
for IB1 level cmdstream (but not IB2 or state-groups).

This leaves the kernel unsure what to dump for rd/hangrd cmdstream
dumping.  So add a MSM_SUBMIT_BO_DUMP flag so userspace can indicate
buffers that contain cmdstream (or are otherwise important to dump).

Signed-off-by: Rob Clark <robdclark@gmail.com>
drivers/gpu/drm/msm/msm_gem_submit.c
drivers/gpu/drm/msm/msm_rd.c
include/uapi/drm/msm_drm.h

index a43e91e70bd9528933a4d58d91916e8f2be3c69c..3cbed4acb0f4edb8825db3410d3be58bb1c592a9 100644 (file)
@@ -114,8 +114,11 @@ static int submit_lookup_objects(struct msm_gem_submit *submit,
                        pagefault_disable();
                }
 
+/* at least one of READ and/or WRITE flags should be set: */
+#define MANDATORY_FLAGS (MSM_SUBMIT_BO_READ | MSM_SUBMIT_BO_WRITE)
+
                if ((submit_bo.flags & ~MSM_SUBMIT_BO_FLAGS) ||
-                       !(submit_bo.flags & MSM_SUBMIT_BO_FLAGS)) {
+                       !(submit_bo.flags & MANDATORY_FLAGS)) {
                        DRM_ERROR("invalid flags: %x\n", submit_bo.flags);
                        ret = -EINVAL;
                        goto out_unlock;
index cca9334584391d97a4026f6ae48bfdb8d7f12ae9..b5672061ae08544280fb8f10a453564da7d68efd 100644 (file)
@@ -345,6 +345,12 @@ static void snapshot_buf(struct msm_rd_state *rd,
        msm_gem_put_vaddr(&obj->base);
 }
 
+static bool
+should_dump(struct msm_gem_submit *submit, int idx)
+{
+       return rd_full || (submit->bos[idx].flags & MSM_SUBMIT_BO_DUMP);
+}
+
 /* called under struct_mutex */
 void msm_rd_dump_submit(struct msm_rd_state *rd, struct msm_gem_submit *submit,
                const char *fmt, ...)
@@ -386,15 +392,16 @@ 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; rd_full && i < submit->nr_bos; i++)
-               snapshot_buf(rd, submit, i, 0, 0);
+       for (i = 0; i < submit->nr_bos; i++)
+               if (should_dump(submit, i))
+                       snapshot_buf(rd, submit, i, 0, 0);
 
        for (i = 0; i < submit->nr_cmds; i++) {
                uint64_t iova = submit->cmd[i].iova;
                uint32_t szd  = submit->cmd[i].size; /* in dwords */
 
                /* snapshot cmdstream bo's (if we haven't already): */
-               if (!rd_full) {
+               if (!should_dump(submit, i)) {
                        snapshot_buf(rd, submit, submit->cmd[i].idx,
                                        submit->cmd[i].iova, szd * 4);
                }
index c06d0a5bdd808235850c2d3ac54c2eb07ef561b1..3c3af92c4b3ed6c9d3100a85aeff340203983a0c 100644 (file)
@@ -188,8 +188,11 @@ struct drm_msm_gem_submit_cmd {
  */
 #define MSM_SUBMIT_BO_READ             0x0001
 #define MSM_SUBMIT_BO_WRITE            0x0002
+#define MSM_SUBMIT_BO_DUMP             0x0004
 
-#define MSM_SUBMIT_BO_FLAGS            (MSM_SUBMIT_BO_READ | MSM_SUBMIT_BO_WRITE)
+#define MSM_SUBMIT_BO_FLAGS            (MSM_SUBMIT_BO_READ | \
+                                       MSM_SUBMIT_BO_WRITE | \
+                                       MSM_SUBMIT_BO_DUMP)
 
 struct drm_msm_gem_submit_bo {
        __u32 flags;          /* in, mask of MSM_SUBMIT_BO_x */