cc->do_interrupt is a TCG callback used in accel/tcg only, call instead directly the arm_cpu_do_interrupt for the injection of exeptions from KVM, so that
do_interrupt can be exported to TCG-only operations in the CPUClass. Signed-off-by: Claudio Fontana <[email protected]> --- target/arm/helper.c | 4 ++++ target/arm/kvm64.c | 4 ++-- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/target/arm/helper.c b/target/arm/helper.c index 38cd35c049..bebaabf525 100644 --- a/target/arm/helper.c +++ b/target/arm/helper.c @@ -9895,6 +9895,10 @@ static void handle_semihosting(CPUState *cs) * Do any appropriate logging, handle PSCI calls, and then hand off * to the AArch64-entry or AArch32-entry function depending on the * target exception level's register width. + * + * Note: this is used for both TCG (as the do_interrupt tcg op), + * and KVM to re-inject guest debug exceptions, and to + * inject a Synchronous-External-Abort. */ void arm_cpu_do_interrupt(CPUState *cs) { diff --git a/target/arm/kvm64.c b/target/arm/kvm64.c index f74bac2457..2b17e4203d 100644 --- a/target/arm/kvm64.c +++ b/target/arm/kvm64.c @@ -960,7 +960,7 @@ static void kvm_inject_arm_sea(CPUState *c) env->exception.syndrome = esr; - cc->do_interrupt(c); + arm_cpu_do_interrupt(c); } #define AARCH64_CORE_REG(x) (KVM_REG_ARM64 | KVM_REG_SIZE_U64 | \ @@ -1545,7 +1545,7 @@ bool kvm_arm_handle_debug(CPUState *cs, struct kvm_debug_exit_arch *debug_exit) env->exception.vaddress = debug_exit->far; env->exception.target_el = 1; qemu_mutex_lock_iothread(); - cc->do_interrupt(cs); + arm_cpu_do_interrupt(cs); qemu_mutex_unlock_iothread(); return false; -- 2.26.2
