On 11/17/21 10:47 AM, Alex Bennée wrote:
- gen_set_label(tcg_ctx->exitreq_label);
+ if (tcg_ctx->exitreq_label) {
+ gen_set_label(tcg_ctx->exitreq_label);
+ }
tcg_gen_exit_tb(tb, TB_EXIT_REQUESTED);
The exit_tb is also not reachable, and should go in with the label.
}
modified accel/tcg/cpu-exec.c
@@ -954,11 +954,16 @@ int cpu_exec(CPUState *cpu)
* after-access watchpoints. Since this request should never
* have CF_INVALID set, -1 is a convenient invalid value that
* does not require tcg headers for cpu_common_reset.
+ *
+ * As we don't want this special TB being interrupted by
+ * some sort of asynchronous event we apply CF_NOIRQ to
+ * disable the usual event checking.
*/
cflags = cpu->cflags_next_tb;
if (cflags == -1) {
cflags = curr_cflags(cpu);
} else {
+ cflags |= CF_NOIRQ;
cpu->cflags_next_tb = -1;
}
Still missing something to avoid cpu_handle_interrupt firing?
r~