On Thu, 15 Apr 2021 at 17:25, Alex Bennée <alex.ben...@linaro.org> wrote: > > By definition a single instruction is capable of being an IO > instruction. This avoids a problem of triggering a cpu_io_recompile on > a non-recorded translation which then fails because it expects > tcg_tb_lookup() to succeed unconditionally. The normal use case > requires a TB to be able to resolve machine state. > > The other users of tcg_tb_lookup() are able to tolerate a missing TB > if the machine state has been resolved by other means - which in the > single-shot case is always true because machine state is synced at the > start of a block. > > Reported-by: Peter Maydell <peter.mayd...@linaro.org> > Signed-off-by: Alex Bennée <alex.ben...@linaro.org> > --- > accel/tcg/translate-all.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/accel/tcg/translate-all.c b/accel/tcg/translate-all.c > index ba6ab09790..b12d0898d0 100644 > --- a/accel/tcg/translate-all.c > +++ b/accel/tcg/translate-all.c > @@ -1863,7 +1863,7 @@ TranslationBlock *tb_gen_code(CPUState *cpu, > > if (phys_pc == -1) { > /* Generate a one-shot TB with 1 insn in it */ > - cflags = (cflags & ~CF_COUNT_MASK) | 1; > + cflags = (cflags & ~CF_COUNT_MASK) | CF_LAST_IO | 1; > } > > max_insns = cflags & CF_COUNT_MASK; > --
Reviewed-by: Peter Maydell <peter.mayd...@linaro.org> thanks -- PMM