@@ -694,6 +694,7 @@ static int nvme_init(BlockDriverState *bs, const char *device, int namespace,
uint64_t timeout_ms;
uint64_t deadline, now;
Error *local_err = NULL;
+ unsigned irq_count = MSIX_IRQ_COUNT;
qemu_co_mutex_init(&s->dma_map_lock);
qemu_co_queue_init(&s->dma_flush_queue);
@@ -779,9 +780,13 @@ static int nvme_init(BlockDriverState *bs, const char *device, int namespace,
}
}
- ret = qemu_vfio_pci_init_irq(s->vfio, s->irq_notifier,
- VFIO_PCI_MSIX_IRQ_INDEX, errp);
+ ret = qemu_vfio_pci_init_msix_irqs(s->vfio, s->irq_notifier,
+ &irq_count, errp);
if (ret) {
+ if (ret == -EOVERFLOW) {
+ error_append_hint(errp, "%u IRQs requested but only %u available\n",
+ MSIX_IRQ_COUNT, irq_count);
+ }
goto out;
}
aio_set_event_notifier(bdrv_get_aio_context(bs),