ddebug: dump driver state into a separate file

Due to asynchronous execution, it's not clear which of the draws the state
may refer to.

This also works around an issue encountered with radeonsi where dumping
the driver state itself caused a hang.

Reviewed-by: Marek Olšák <marek.olsak@amd.com>
This commit is contained in:
Nicolai Hähnle 2019-02-26 16:34:34 +01:00
parent b7fab7b02d
commit ac0b60fa47
1 changed files with 12 additions and 5 deletions

View File

@ -988,11 +988,6 @@ dd_report_hang(struct dd_context *dctx)
dd_write_header(f, dscreen->screen, record->draw_state.base.apitrace_call_number);
dd_write_record(f, record);
if (!encountered_hang) {
dd_dump_driver_state(dctx, f, PIPE_DUMP_DEVICE_STATUS_REGISTERS);
dd_dump_dmesg(f);
}
fclose(f);
}
@ -1004,6 +999,18 @@ dd_report_hang(struct dd_context *dctx)
if (num_later)
fprintf(stderr, "... and %u additional draws.\n", num_later);
char name[512];
dd_get_debug_filename_and_mkdir(name, sizeof(name), false);
FILE *f = fopen(name, "w");
if (!f) {
fprintf(stderr, "fopen failed\n");
} else {
dd_write_header(f, dscreen->screen, 0);
dd_dump_driver_state(dctx, f, PIPE_DUMP_DEVICE_STATUS_REGISTERS);
dd_dump_dmesg(f);
fclose(f);
}
fprintf(stderr, "\nDone.\n");
dd_kill_process();
}