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)) {
exit(1);
}
} else {
- return;
+ return -EOPNOTSUPP;
}
if (kvm_check_extension(s, KVM_CAP_IRQFD) <= 0) {
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)
}
if (s->kernel_irqchip_allowed) {
+ /* ignore return from this function */
do_kvm_irqchip_create(s);
}