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;
 
        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, ...)
 
        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);
                }
 
  */
 #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 */