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:
committed by
Kim, Jonathan
parent
d8d27d4fd6
commit
c710a06ee0
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user