[PATCH umr 06/17] gfx10+: warn when halt_waves isn't used
Nicolai Hähnle
nicolai.haehnle at amd.com
Tue Jun 6 09:17:14 UTC 2023
gfx10+ are particularly sensitive and are prone to producing completely
nonsensical information if trying to read from non-halted waves.
On gfx11, we really ought to take SQ_WAVE_VALID_AND_IDLE into account.
Rumor has it that reading from active waves can even lead to hangs,
though I've never witnessed that personally.
Signed-off-by: Nicolai Hähnle <nicolai.haehnle at amd.com>
---
src/app/print_waves.c | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/src/app/print_waves.c b/src/app/print_waves.c
index 04a4447..89f4abb 100644
--- a/src/app/print_waves.c
+++ b/src/app/print_waves.c
@@ -376,22 +376,25 @@ static void umr_print_waves_gfx_10_11(struct umr_asic *asic)
struct umr_wave_data *wd, *owd;
int first = 1, col = 0, ring_halted = 0, use_ring = 1;
struct umr_shaders_pgm *shader = NULL;
struct umr_packet_stream *stream = NULL;
struct {
uint32_t vmid, size;
uint64_t addr;
} ib_addr;
int start = -1, stop = -1;
- if (asic->options.halt_waves)
+ if (asic->options.halt_waves) {
umr_sq_cmd_halt_waves(asic, UMR_SQ_CMD_HALT);
+ } else {
+ fprintf(stderr, "[WARNING]: Wave listing is unreliable if waves aren't halted; use -o halt_waves\n");
+ }
// don't scan for shader info by reading the ring if no_disasm is
// requested. This is useful for when the ring or IBs contain
// invalid or racy data that cannot be reliably parsed.
if (!asic->options.no_disasm && strcmp(asic->options.ring_name, "none")) {
if (sscanf(asic->options.ring_name, "%"SCNx32"@%"SCNx64".%"SCNx32, &ib_addr.vmid, &ib_addr.addr, &ib_addr.size) == 3)
use_ring = 0;
if (asic->options.halt_waves) {
// warn users if they don't specify a ring on gfx10 hardware
--
2.40.0
More information about the amd-gfx
mailing list