[PATCH umr 06/17] gfx10+: warn when halt_waves isn't used

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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@xxxxxxx>
---
 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




[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux