@@ -1646,8 +1646,6 @@ static void tcg_handle_interrupt(CPUState *env, int mask)
old_mask = env->interrupt_request;
env->interrupt_request |= mask;
- if (kvm_enabled() && !kvm_irqchip_in_kernel())
- kvm_update_interrupt_request(env);
/*
* If called from iothread context, wake the target cpu in
@@ -683,7 +683,6 @@ static CPUPhysMemoryClient kvm_cpu_phys_memory_client = {
.log_stop = kvm_log_stop,
};
-#ifdef OBSOLETE_KVM_IMPL
static void kvm_handle_interrupt(CPUState *env, int mask)
{
env->interrupt_request |= mask;
@@ -691,8 +690,10 @@ static void kvm_handle_interrupt(CPUState *env, int mask)
if (!qemu_cpu_is_self(env)) {
qemu_cpu_kick(env);
}
+ kvm_update_interrupt_request(env);
}
+#ifdef OBSOLETE_KVM_IMPL
int kvm_init(void)
{
static const char upgrade_note[] =
@@ -1409,6 +1409,8 @@ static int kvm_create_context(void)
kvm_init_ap();
+ cpu_interrupt_handler = kvm_handle_interrupt;
+
return 0;
}
Instead of hooking into tcg_handler_interrupt, set cpu_interrupt_handler just like upstream and move kvm_update_interrupt_request to kvm_handle_interrupt. It's not worth keeping the check for !irqchip, we will only rarely get here in the in-kernel irqchip case. Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com> --- exec.c | 2 -- kvm-all.c | 3 ++- qemu-kvm.c | 2 ++ 3 files changed, 4 insertions(+), 3 deletions(-)