From: Richard Henderson Date: Wed, 26 Jul 2023 19:58:08 +0000 (-0700) Subject: accel/tcg: Clear tcg_ctx->gen_tb on buffer overflow X-Git-Tag: qemu-xen-4.20.0~608^2~5 X-Git-Url: http://xenbits.xensource.com/gitweb?a=commitdiff_plain;h=ad17868eb162a5466d8ad43e5ccb428776403308;p=qemu-xen.git accel/tcg: Clear tcg_ctx->gen_tb on buffer overflow On overflow of code_gen_buffer, we unlock the guest pages we had been translating, but failed to clear gen_tb. On restart, if we cannot allocate a TB, we exit to the main loop to perform the flush of all TBs as soon as possible. With garbage in gen_tb, we hit an assert: ../src/accel/tcg/tb-maint.c:348:page_unlock__debug: \ assertion failed: (page_is_locked(pd)) Fixes: deba78709ae8 ("accel/tcg: Always lock pages before translation") Signed-off-by: Richard Henderson --- diff --git a/accel/tcg/translate-all.c b/accel/tcg/translate-all.c index a1782db5dd..b2d4e22c17 100644 --- a/accel/tcg/translate-all.c +++ b/accel/tcg/translate-all.c @@ -374,6 +374,7 @@ TranslationBlock *tb_gen_code(CPUState *cpu, "Restarting code generation for " "code_gen_buffer overflow\n"); tb_unlock_pages(tb); + tcg_ctx->gen_tb = NULL; goto buffer_overflow; case -2: