Peter Maydell <peter.mayd...@linaro.org> writes: > On 2 February 2017 at 12:17, Alex Bennée <alex.ben...@linaro.org> wrote: >> Peter Maydell <peter.mayd...@linaro.org> writes: >>> Your longjump is effectively skipping the normal "end of the TB" code, >>> which is what usually does the set_condexec for you. At the end of a >>> TB the expectation is that everything's been sync'd back to the CPU >>> state structure. >> >> Hmm so as long as the tlb flush helpers don't set ARM_CP_SUPPRESS_TB_END >> things should just work normally? > > If they're register writes, yes -- we end the TB on writes but not > on reads (on the assumption that only writes might modify state that > requires a TB end). If the TLB instructions are reads then we can > add a "force TB end" flag. > >> Is shouldn't matter if the TB with the >> flush is chained to a new TB as the exit_request test should fire before >> any more state changing operations happen? > > I think so, but again if you know that you're always going to exit > the TB then there's no point setting it up so it might chain.
So setting s->is_jmp = DISAS_JUMP ensures that? -- Alex Bennée