mirror of
https://github.com/qemu/qemu.git
synced 2026-07-08 17:46:10 +00:00
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 <a.hindborg@samsung.com> Signed-off-by: Klaus Jensen <k.jensen@samsung.com>
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user