From 23254f7a1d556bc2358ca07bc42a893a34eff13e Mon Sep 17 00:00:00 2001 From: Lancelot SIX Date: Thu, 20 Mar 2025 17:37:22 +0000 Subject: [PATCH] trap_handler.s: Clear PERF_SNAPSHOT/HOST_TRAP before returning Make sure to clear the HOST_TRAP and PERF_SNAPSHOT bits before returning from the second level trap handler. As those bits are sticky, this ensures future re-entry to the trap handler (for context save for example) will not be confused with a sampling trap. Change-Id: I05e5e58779a650b324ac6e30d574dc6931340f13 Signed-off-by: Lancelot SIX [ROCm/ROCR-Runtime commit: eece210a5c735c722f234b36d9049a78d808e5c6] --- .../hsa-runtime/core/runtime/trap_handler/trap_handler.s | 3 +++ 1 file changed, 3 insertions(+) diff --git a/projects/rocr-runtime/runtime/hsa-runtime/core/runtime/trap_handler/trap_handler.s b/projects/rocr-runtime/runtime/hsa-runtime/core/runtime/trap_handler/trap_handler.s index 66bc82ec21..8b37ab8f00 100644 --- a/projects/rocr-runtime/runtime/hsa-runtime/core/runtime/trap_handler/trap_handler.s +++ b/projects/rocr-runtime/runtime/hsa-runtime/core/runtime/trap_handler/trap_handler.s @@ -54,6 +54,7 @@ .set SQ_WAVE_TRAPSTS_XNACK_ERROR_SHIFT , 28 .set SQ_WAVE_TRAPSTS_MATH_EXCP , 0x7F .set SQ_WAVE_TRAPSTS_PERF_SNAPSHOT_SHIFT , 26 +.set SQ_WAVE_TRAPSTS_HOST_TRAP_SHIFT , 22 .set SQ_WAVE_MODE_EXCP_EN_SHIFT , 12 .set SQ_WAVE_MODE_EXCP_EN_SIZE , 8 .set TRAP_ID_ABORT , 2 @@ -284,6 +285,7 @@ trap_entry: s_load_dwordx2 ttmp[2:3], ttmp[14:15], 0 glc // ttmp[14:15]=*host_trap_buffers .if .amdgcn.gfx_generation_minor >= 4 + s_setreg_imm32_b32 hwreg(HW_REG_TRAPSTS, SQ_WAVE_TRAPSTS_HOST_TRAP_SHIFT, 1), 0 s_bitset0_b32 ttmp13, TTMP13_PCS_IS_STOCHASTIC s_bitset1_b32 ttmp13, TTMP13_PCS_IS_HOSTTRAP // set bit 22 in TTMP13 .else @@ -323,6 +325,7 @@ trap_entry: s_cbranch_scc0 .no_skip_debugtrap // Handle stochastic trap + s_setreg_imm32_b32 hwreg(HW_REG_TRAPSTS, SQ_WAVE_TRAPSTS_PERF_SNAPSHOT_SHIFT, 1), 0 s_load_dwordx2 ttmp[2:3], ttmp[14:15], 0x8 glc // ttmp[14:15]=*stoch_trap_buf s_bitset0_b32 ttmp13, TTMP13_PCS_IS_HOSTTRAP s_bitset1_b32 ttmp13, TTMP13_PCS_IS_STOCHASTIC // set bit 25 in TTMP13