kfdtest: fix trap on wave start and end

The debugger override will set the initial request mask to the
previously set request mask so use a different mask to assert
enablement.
Trap on wave start and end also run back to back, so fix the
previous override mask check as well.

In addition, unlike instruction traps, trap on wave start and end
will not require a rewind of the program counter on wave exit.
This commit is contained in:
Jonathan Kim
2025-03-21 17:13:32 -04:00
committed by Kim, Jonathan
parent d8d27d4fd6
commit c710a06ee0
2 changed files with 9 additions and 5 deletions
+4 -5
View File
@@ -361,10 +361,8 @@ TEST_F(KFDDBGTest, HitTrapOnWaveStartEndEvent) {
for (int i = 0; i < 2; i++) {
uint32_t enableMask = !!!(i % 2) ? KFD_DBG_TRAP_MASK_TRAP_ON_WAVE_START :
KFD_DBG_TRAP_MASK_TRAP_ON_WAVE_END;
uint32_t supportedMask = enableMask;
debug->SetWaveLaunchOverride(KFD_DBG_TRAP_OVERRIDE_OR,
&enableMask,
&supportedMask);
uint32_t supportedMask = enableMask, reqMask = enableMask;
debug->SetWaveLaunchOverride(KFD_DBG_TRAP_OVERRIDE_OR, &reqMask, &supportedMask);
if (!!!(supportedMask & enableMask)) {
EXPECT_SUCCESS(queue.Destroy());
@@ -374,7 +372,8 @@ TEST_F(KFDDBGTest, HitTrapOnWaveStartEndEvent) {
goto exit;
}
ASSERT_EQ(enableMask, 0); // previous set mask
// previous set mask
ASSERT_EQ(reqMask, !!!(i % 2) ? 0 : KFD_DBG_TRAP_MASK_TRAP_ON_WAVE_START);
Dispatch *dispatch;
dispatch = new Dispatch(isaBuf);
@@ -1130,6 +1130,11 @@ const char *TrapHandlerIsa =
s_waitcnt lgkmcnt(0)
s_mov_b32 m0, ttmp2
v_mov_b32 v4, ttmp1
.if (.amdgcn.gfx_generation_number >= 12)
s_getreg_b32 ttmp14, hwreg(HW_REG_EXCP_FLAG_PRIV)
s_and_b32 ttmp2, ttmp14, 0x300
s_cbranch_scc1 RESTORE_AND_EXIT
.endif
/* restore and increment program counter to skip shader trap jump*/
s_add_u32 ttmp0, ttmp0, 4
s_addc_u32 ttmp1, ttmp1, 0