On Tue, Jul 11, 2017 at 18:59:37 +0100, Alex Bennée wrote: > Previously DISAS_JUMP did ensure this but with the optimisation of > 8a6b28c7 (optimize indirect branches) we might not leave the loop. > This means if any pending interrupts are cleared by changing IRQ flags > we might never get around to servicing them. You usually notice this > by seeing the lookup_tb_ptr() helper gainfully chaining TBs together > while cpu->interrupt_request remains high and the exit_request has not > been set. > > This breaks amongst other things the OPTEE test suite which executes > an eret from the secure world after a non-secure world IRQ has gone > pending which then never gets serviced. > > Instead of using the previously implied semantics of DISAS_JUMP we use > DISAS_EXIT which will always exit the run-loop. > > CC: Etienne Carriere <etienne.carri...@linaro.org> > CC: Joakim Bech <joakim.b...@linaro.org> > CC: Peter Maydell <peter.mayd...@linaro.org> > CC: Emilio G. Cota <c...@braap.org> > Signed-off-by: Alex Bennée <alex.ben...@linaro.org> > Reviewed-by: Richard Henderson <r...@twiddle.net>
Reviewed-by: Emilio G. Cota <c...@braap.org> E.