@@ -1983,7 +1983,6 @@ static void i915_dump_lrc_obj(struct seq_file *m,
int i;
int j;
unsigned long ggtt_offset = 0;
- int hws_page_index;
seq_printf(m, "CONTEXT: %s %u\n", ring->name,
intel_execlists_ctx_id(ctx_obj));
@@ -1999,27 +1998,51 @@ static void i915_dump_lrc_obj(struct seq_file *m,
}
i = 0;
- hws_page_index = LRC_PPHWSP_PN;
for_each_sg_page(ctx_obj->pages->sgl, &sg_iter,
ctx_obj->pages->nents, 0) {
if (dump_type == LRC_CONTEXT_DUMP) {
- if (i < hws_page_index) {
+ if (i < LRC_PPHWSP_PN) {
++i;
continue;
- } else if (i > hws_page_index)
+ } else if (i > LRC_PPHWSP_PN)
break;
}
page = sg_page_iter_page(&sg_iter);
if (!WARN_ON(page == NULL)) {
+ int run_length = 0;
+ unsigned long page_offset = ggtt_offset + i*PAGE_SIZE;
+
reg_state = kmap_atomic(page);
+ seq_printf(m, "Context object Page: %d\n", i);
for (j = 0; j < PAGE_SIZE / sizeof(u32); j += 4) {
+ if (reg_state[j + 0] == 0 && reg_state[j + 1] == 0 &&
+ reg_state[j + 2] == 0 && reg_state[j + 3] == 0) {
+ run_length += 4;
+ continue;
+ }
+
+ if (run_length > 0) {
+ seq_printf(m, "\t[0x%08lx - 0x%08lx]: 0x00000000\n",
+ page_offset + (j * 4) - (run_length * 4),
+ page_offset + (j * 4) - 1);
+
+ run_length = 0;
+ }
+
seq_printf(m, "\t[0x%08lx] 0x%08x 0x%08x 0x%08x 0x%08x\n",
- ggtt_offset + 4096 + (j * 4),
- reg_state[j], reg_state[j + 1],
+ page_offset + (j * 4),
+ reg_state[j + 0], reg_state[j + 1],
reg_state[j + 2], reg_state[j + 3]);
}
+
+ if (run_length > 0) {
+ seq_printf(m, "\t[0x%08lx - 0x%08lx]: 0x00000000\n",
+ page_offset + (j * 4) - (run_length * 4),
+ page_offset + (j * 4) - 1);
+ run_length = 0;
+ }
kunmap_atomic(reg_state);
}
++i;