mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-01-02 18:10:17 +01:00
freedreno/crashdec: Find potential fault buffers
Denote if a buffer we know about is covering the fault address (kernel issue), or if the fault address is within the 2 * size range, indicating that the buffer is potentially the one the GPU read past the end of. Signed-off-by: Rob Clark <robdclark@chromium.org> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/27700>
This commit is contained in:
parent
32db7a9533
commit
bcc5ddcc3b
4 changed files with 583 additions and 536 deletions
|
|
@ -16,8 +16,8 @@ ringbuffer:
|
|||
wptr: 56
|
||||
size: 32768
|
||||
bos:
|
||||
- iova: 0x0000000100000000
|
||||
size: 4096
|
||||
- iova: 0x0000000100000000-0x0000000100001000
|
||||
size: 4096 (0x1000)
|
||||
registers:
|
||||
00800005 RBBM_STATUS: { GPU_BUSY_IGN_AHB | CP_BUSY | CP_AHB_BUSY_CX_MASTER }
|
||||
00000000 RBBM_STATUS1: 0
|
||||
|
|
|
|||
|
|
@ -17,116 +17,116 @@ ringbuffer:
|
|||
wptr: 83
|
||||
size: 32768
|
||||
bos:
|
||||
- iova: 0x0000000100000000
|
||||
size: 532480
|
||||
- iova: 0x0000000100000000-0x0000000100082000
|
||||
size: 532480 (0x82000)
|
||||
name:
|
||||
- iova: 0x0000000100082000
|
||||
size: 40960
|
||||
- iova: 0x0000000100082000-0x000000010008c000
|
||||
size: 40960 (0xa000)
|
||||
name:
|
||||
- iova: 0x000000010008c000
|
||||
size: 32768
|
||||
- iova: 0x000000010008c000-0x0000000100094000
|
||||
size: 32768 (0x8000)
|
||||
name:
|
||||
- iova: 0x0000000100094000
|
||||
size: 24576
|
||||
- iova: 0x0000000100094000-0x000000010009a000
|
||||
size: 24576 (0x6000)
|
||||
name:
|
||||
- iova: 0x000000010009a000
|
||||
size: 8192
|
||||
- iova: 0x000000010009a000-0x000000010009c000
|
||||
size: 8192 (0x2000)
|
||||
name:
|
||||
- iova: 0x000000010009c000
|
||||
size: 40960
|
||||
- iova: 0x000000010009c000-0x00000001000a6000
|
||||
size: 40960 (0xa000)
|
||||
name:
|
||||
- iova: 0x00000001000a6000
|
||||
size: 32768
|
||||
- iova: 0x00000001000a6000-0x00000001000ae000
|
||||
size: 32768 (0x8000)
|
||||
name:
|
||||
- iova: 0x00000001000ae000
|
||||
size: 24576
|
||||
- iova: 0x00000001000ae000-0x00000001000b4000
|
||||
size: 24576 (0x6000)
|
||||
name:
|
||||
- iova: 0x00000001000b4000
|
||||
size: 8192
|
||||
- iova: 0x00000001000b4000-0x00000001000b6000
|
||||
size: 8192 (0x2000)
|
||||
name:
|
||||
- iova: 0x00000001000b6000
|
||||
size: 20480
|
||||
- iova: 0x00000001000b6000-0x00000001000bb000
|
||||
size: 20480 (0x5000)
|
||||
name:
|
||||
- iova: 0x00000001000bb000
|
||||
size: 16384
|
||||
- iova: 0x00000001000bb000-0x00000001000bf000
|
||||
size: 16384 (0x4000)
|
||||
name:
|
||||
- iova: 0x00000001000bf000
|
||||
size: 40960
|
||||
- iova: 0x00000001000bf000-0x00000001000c9000
|
||||
size: 40960 (0xa000)
|
||||
name:
|
||||
- iova: 0x00000001000c9000
|
||||
size: 32768
|
||||
- iova: 0x00000001000c9000-0x00000001000d1000
|
||||
size: 32768 (0x8000)
|
||||
name:
|
||||
- iova: 0x00000001000d1000
|
||||
size: 20480
|
||||
- iova: 0x00000001000d1000-0x00000001000d6000
|
||||
size: 20480 (0x5000)
|
||||
name:
|
||||
- iova: 0x00000001000d6000
|
||||
size: 16384
|
||||
- iova: 0x00000001000d6000-0x00000001000da000
|
||||
size: 16384 (0x4000)
|
||||
name:
|
||||
- iova: 0x00000001000da000
|
||||
size: 20480
|
||||
- iova: 0x00000001000da000-0x00000001000df000
|
||||
size: 20480 (0x5000)
|
||||
name:
|
||||
- iova: 0x00000001000df000
|
||||
size: 16384
|
||||
- iova: 0x00000001000df000-0x00000001000e3000
|
||||
size: 16384 (0x4000)
|
||||
name:
|
||||
- iova: 0x00000001000e3000
|
||||
size: 16384
|
||||
- iova: 0x00000001000e3000-0x00000001000e7000
|
||||
size: 16384 (0x4000)
|
||||
name:
|
||||
- iova: 0x00000001000e7000
|
||||
size: 1048576
|
||||
- iova: 0x00000001000e7000-0x00000001001e7000
|
||||
size: 1048576 (0x100000)
|
||||
name:
|
||||
- iova: 0x00000001001e7000
|
||||
size: 131072
|
||||
- iova: 0x00000001001e7000-0x0000000100207000
|
||||
size: 131072 (0x20000)
|
||||
name:
|
||||
- iova: 0x0000000100207000
|
||||
size: 4096
|
||||
- iova: 0x0000000100207000-0x0000000100208000
|
||||
size: 4096 (0x1000)
|
||||
name:
|
||||
- iova: 0x0000000100208000
|
||||
size: 16384
|
||||
- iova: 0x0000000100208000-0x000000010020c000
|
||||
size: 16384 (0x4000)
|
||||
name:
|
||||
- iova: 0x000000010020c000
|
||||
size: 8192
|
||||
- iova: 0x000000010020c000-0x000000010020e000
|
||||
size: 8192 (0x2000)
|
||||
name:
|
||||
- iova: 0x000000010020e000
|
||||
size: 4096
|
||||
- iova: 0x000000010020e000-0x000000010020f000
|
||||
size: 4096 (0x1000)
|
||||
name:
|
||||
- iova: 0x000000010020f000
|
||||
size: 16384
|
||||
- iova: 0x000000010020f000-0x0000000100213000
|
||||
size: 16384 (0x4000)
|
||||
name:
|
||||
- iova: 0x0000000100213000
|
||||
size: 8192
|
||||
- iova: 0x0000000100213000-0x0000000100215000
|
||||
size: 8192 (0x2000)
|
||||
name:
|
||||
- iova: 0x0000000100215000
|
||||
size: 4096
|
||||
- iova: 0x0000000100215000-0x0000000100216000
|
||||
size: 4096 (0x1000)
|
||||
name:
|
||||
- iova: 0x0000000100216000
|
||||
size: 16384
|
||||
- iova: 0x0000000100216000-0x000000010021a000
|
||||
size: 16384 (0x4000)
|
||||
name:
|
||||
- iova: 0x000000010021a000
|
||||
size: 8192
|
||||
- iova: 0x000000010021a000-0x000000010021c000
|
||||
size: 8192 (0x2000)
|
||||
name:
|
||||
- iova: 0x000000010021c000
|
||||
size: 4096
|
||||
- iova: 0x000000010021c000-0x000000010021d000
|
||||
size: 4096 (0x1000)
|
||||
name:
|
||||
- iova: 0x000000010021d000
|
||||
size: 16384
|
||||
- iova: 0x000000010021d000-0x0000000100221000
|
||||
size: 16384 (0x4000)
|
||||
name:
|
||||
- iova: 0x0000000100221000
|
||||
size: 8192
|
||||
- iova: 0x0000000100221000-0x0000000100223000
|
||||
size: 8192 (0x2000)
|
||||
name:
|
||||
- iova: 0x0000000100223000
|
||||
size: 16384
|
||||
- iova: 0x0000000100223000-0x0000000100227000
|
||||
size: 16384 (0x4000)
|
||||
name:
|
||||
- iova: 0x0000000100227000
|
||||
size: 16384
|
||||
- iova: 0x0000000100227000-0x000000010022b000
|
||||
size: 16384 (0x4000)
|
||||
name:
|
||||
- iova: 0x000000010022b000
|
||||
size: 8192
|
||||
- iova: 0x000000010022b000-0x000000010022d000
|
||||
size: 8192 (0x2000)
|
||||
name:
|
||||
- iova: 0x000000010022d000
|
||||
size: 16384
|
||||
- iova: 0x000000010022d000-0x0000000100231000
|
||||
size: 16384 (0x4000)
|
||||
name:
|
||||
- iova: 0x0000000100231000
|
||||
size: 32768
|
||||
- iova: 0x0000000100231000-0x0000000100239000
|
||||
size: 32768 (0x8000)
|
||||
name:
|
||||
gmu-log:
|
||||
iova: 0x0000000060009000
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load diff
|
|
@ -46,6 +46,9 @@ struct rnn *rnn_gmu;
|
|||
struct rnn *rnn_control;
|
||||
struct rnn *rnn_pipe;
|
||||
|
||||
static uint64_t fault_iova;
|
||||
static bool has_fault_iova;
|
||||
|
||||
struct cffdec_options options = {
|
||||
.draw_filter = -1,
|
||||
};
|
||||
|
|
@ -429,6 +432,24 @@ dump_cmdstream(void)
|
|||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Decode optional 'fault-info' section. We only get this section if
|
||||
* the devcoredump was triggered by an iova fault:
|
||||
*/
|
||||
|
||||
static void
|
||||
decode_fault_info(void)
|
||||
{
|
||||
foreach_line_in_section (line) {
|
||||
if (startswith(line, " - far:")) {
|
||||
parseline(line, " - far: %" PRIx64, &fault_iova);
|
||||
has_fault_iova = true;
|
||||
}
|
||||
|
||||
printf("%s", line);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Decode 'bos' (buffers) section:
|
||||
*/
|
||||
|
|
@ -442,8 +463,32 @@ decode_bos(void)
|
|||
foreach_line_in_section (line) {
|
||||
if (startswith(line, " - iova:")) {
|
||||
parseline(line, " - iova: %" PRIx64, &iova);
|
||||
continue;
|
||||
} else if (startswith(line, " size:")) {
|
||||
parseline(line, " size: %u", &size);
|
||||
|
||||
/*
|
||||
* This is a bit convoluted, vs just printing the lines as
|
||||
* they come. But we want to have both the iova and size
|
||||
* so we can print the end address of the buffer
|
||||
*/
|
||||
|
||||
uint64_t end = iova + size;
|
||||
|
||||
printf(" - iova: 0x%016" PRIx64 "-0x%016" PRIx64, iova, end);
|
||||
|
||||
if (has_fault_iova) {
|
||||
if ((iova <= fault_iova) && (fault_iova < end)) {
|
||||
/* Fault address was within what should be a mapped buffer!! */
|
||||
printf("\t==");
|
||||
} else if ((iova <= fault_iova) && (fault_iova < (end + size))) {
|
||||
/* Fault address was near this mapped buffer */
|
||||
printf("\t>=");
|
||||
}
|
||||
}
|
||||
printf("\n");
|
||||
printf(" size: %u (0x%x)\n", size, size);
|
||||
continue;
|
||||
} else if (startswith(line, " data: !!ascii85 |")) {
|
||||
uint32_t *buf = popline_ascii85(size / 4);
|
||||
|
||||
|
|
@ -797,6 +842,8 @@ decode(void)
|
|||
} else {
|
||||
rnn_control = NULL;
|
||||
}
|
||||
} else if (startswith(line, "fault-info:")) {
|
||||
decode_fault_info();
|
||||
} else if (startswith(line, "bos:")) {
|
||||
decode_bos();
|
||||
} else if (startswith(line, "ringbuffer:")) {
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue