diff --git a/accel/kvm/kvm-all.c b/accel/kvm/kvm-all.c index 774499d34f..92af42503b 100644 --- a/accel/kvm/kvm-all.c +++ b/accel/kvm/kvm-all.c @@ -2575,7 +2575,7 @@ void kvm_irqchip_set_qemuirq_gsi(KVMState *s, qemu_irq irq, int gsi) g_hash_table_insert(s->gsimap, irq, GINT_TO_POINTER(gsi)); } -static void do_kvm_irqchip_create(KVMState *s) +static int do_kvm_irqchip_create(KVMState *s) { int ret; if (kvm_check_extension(s, KVM_CAP_IRQCHIP)) { @@ -2587,7 +2587,7 @@ static void do_kvm_irqchip_create(KVMState *s) exit(1); } } else { - return; + return -EOPNOTSUPP; } if (kvm_check_extension(s, KVM_CAP_IRQFD) <= 0) { @@ -2610,13 +2610,17 @@ static void do_kvm_irqchip_create(KVMState *s) fprintf(stderr, "Create kernel irqchip failed: %s\n", strerror(-ret)); exit(1); } + + return 0; } static void kvm_irqchip_create(KVMState *s) { assert(s->kernel_irqchip_split != ON_OFF_AUTO_AUTO); - do_kvm_irqchip_create(s); + if (do_kvm_irqchip_create(s) < 0) { + return; + } kvm_kernel_irqchip = true; /* If we have an in-kernel IRQ chip then we must have asynchronous * interrupt delivery (though the reverse is not necessarily true) @@ -2835,6 +2839,7 @@ static int kvm_reset_vmfd(MachineState *ms) } if (s->kernel_irqchip_allowed) { + /* ignore return from this function */ do_kvm_irqchip_create(s); }