From: Klaus Jensen Date: Wed, 18 Mar 2026 09:26:58 +0000 (+0100) Subject: hw/nvme: fix admin cq msix setup X-Git-Url: http://git.ipfire.org/gitweb/?a=commitdiff_plain;h=2293d8b4bd88d3f29730cfd608935f77247919b6;p=thirdparty%2Fqemu.git hw/nvme: fix admin cq msix setup If MSI-X is not enabled when the admin completion queue is created, msix_vector_use() is not called. But, if MSI-X is subsequently enabled, msix_notify() will fail to fire the interrupt because the use count for the vector remains at 0. msix_vector_use/unuse should be called if MSI-X is *present*, not *enabled*. Fix this. Cc: qemu-stable@nongnu.org Reported-by: Andreas Hindborg Signed-off-by: Klaus Jensen --- diff --git a/hw/nvme/ctrl.c b/hw/nvme/ctrl.c index 5b03929451..815f39173c 100644 --- a/hw/nvme/ctrl.c +++ b/hw/nvme/ctrl.c @@ -5519,7 +5519,7 @@ static void nvme_free_cq(NvmeCQueue *cq, NvmeCtrl *n) event_notifier_set_handler(&cq->notifier, NULL); event_notifier_cleanup(&cq->notifier); } - if (msix_enabled(pci) && cq->irq_enabled) { + if (msix_present(pci) && cq->irq_enabled) { msix_vector_unuse(pci, cq->vector); } if (cq->cqid) { @@ -5560,7 +5560,7 @@ static void nvme_init_cq(NvmeCQueue *cq, NvmeCtrl *n, uint64_t dma_addr, { PCIDevice *pci = PCI_DEVICE(n); - if (msix_enabled(pci) && irq_enabled) { + if (msix_present(pci) && irq_enabled) { msix_vector_use(pci, vector); }