Move BQL_LOCK_GUARD() to the top of hex_check_interrupts. There was a race with hex_interrupt_update on other vCPU threads when enabling MTTCG.
Signed-off-by: Brian Cain <[email protected]> --- target/hexagon/hex_interrupts.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/target/hexagon/hex_interrupts.c b/target/hexagon/hex_interrupts.c index 03e1f28da9b..340007dd545 100644 --- a/target/hexagon/hex_interrupts.c +++ b/target/hexagon/hex_interrupts.c @@ -386,17 +386,19 @@ bool hex_check_interrupts(CPUHexagonState *env) { CPUState *cs = env_cpu(env); bool int_handled = false; - bool ssr_ex = get_ssr_ex(env); + bool ssr_ex; int max_ints = 32; bool schedcfgen; + BQL_LOCK_GUARD(); + + ssr_ex = get_ssr_ex(env); + /* Early exit if nothing pending */ if (get_ipend(env) == 0) { restore_state(env, false); return false; } - - BQL_LOCK_GUARD(); /* Only check priorities when schedcfgen is set */ schedcfgen = get_schedcfgen(env); for (int i = 0; i < max_ints; i++) { -- 2.34.1
