qemu/target/arm
Alex Bennée b29fd33db5 target/arm: use DISAS_EXIT for eret handling
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.carriere@linaro.org>
CC: Joakim Bech <joakim.bech@linaro.org>
CC: Jaroslaw Pelczar <j.pelczar@samsung.com>
CC: Peter Maydell <peter.maydell@linaro.org>
CC: Emilio G. Cota <cota@braap.org>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Reviewed-by: Richard Henderson <rth@twiddle.net>
Message-id: 20170713141928.25419-7-alex.bennee@linaro.org
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
2017-07-17 13:36:07 +01:00
..
arch_dump.c
arm-powerctl.c target-arm/powerctl: defer cpu reset work to CPU context 2017-02-24 10:32:46 +00:00
arm-powerctl.h target-arm/powerctl: defer cpu reset work to CPU context 2017-02-24 10:32:46 +00:00
arm-semi.c
arm_ldst.h Fix Thumb-1 BE32 execution and disassembly. 2017-02-07 18:29:59 +00:00
cpu-qom.h
cpu.c target/arm: Make Cortex-M3 and M4 default to 8 PMSA regions 2017-07-17 13:36:07 +01:00
cpu.h ARM: KVM: Enable in-kernel timers with user space gic 2017-07-11 11:21:26 +01:00
cpu64.c target-arm: Enable EL2 feature bit on A53 and A57 2017-01-20 11:15:10 +00:00
crypto_helper.c
gdbstub.c
gdbstub64.c
helper-a64.c target-arm: Use clrsb helper 2017-01-10 08:47:48 -08:00
helper-a64.h target-arm: Use clrsb helper 2017-01-10 08:47:48 -08:00
helper.c target-arm: v7M: ignore writes to CONTROL.SPSEL from Thread mode 2017-07-11 11:21:26 +01:00
helper.h target-arm: Use clz opcode 2017-01-10 08:06:11 -08:00
internals.h arm: Move excnames[] array into arm_log_exceptions() 2017-04-20 17:39:17 +01:00
iwmmxt_helper.c
kvm-consts.h arm: add trailing ; after MISMATCH_CHECK 2017-02-01 03:37:18 +02:00
kvm-stub.c
kvm.c ARM: KVM: Enable in-kernel timers with user space gic 2017-07-11 11:21:26 +01:00
kvm32.c
kvm64.c arm/kvm: Remove trailing newlines from error_report() 2017-04-20 17:39:17 +01:00
kvm_arm.h
machine.c arm: add MPU support to M profile CPUs 2017-06-02 11:51:48 +01:00
Makefile.objs
monitor.c
neon_helper.c
op_addsub.h
op_helper.c arm: Add support for M profile CPUs having different MMU index semantics 2017-06-02 11:51:47 +01:00
psci.c shutdown: Add source information to SHUTDOWN and RESET 2017-05-23 13:28:17 +02:00
trace-events
translate-a64.c target/arm: use DISAS_EXIT for eret handling 2017-07-17 13:36:07 +01:00
translate.c target/arm: use DISAS_EXIT for eret handling 2017-07-17 13:36:07 +01:00
translate.h target/arm/translate.h: expand comment on DISAS_EXIT 2017-07-17 13:36:07 +01:00