aboutsummaryrefslogtreecommitdiff
path: root/hw/block
diff options
context:
space:
mode:
authorLogan Gunthorpe <logang@deltatee.com>2018-11-21 11:10:13 -0700
committerKevin Wolf <kwolf@redhat.com>2018-11-22 19:37:31 +0100
commitad3a7e4555bc50036a5257a6c1ed652ab0d1b650 (patch)
treecc7df71df3099b461daae00b23668c54d6117478 /hw/block
parent71a86ddece548860f040d565204cf1bf59d74663 (diff)
downloadqemu-ad3a7e4555bc50036a5257a6c1ed652ab0d1b650.zip
qemu-ad3a7e4555bc50036a5257a6c1ed652ab0d1b650.tar.gz
qemu-ad3a7e4555bc50036a5257a6c1ed652ab0d1b650.tar.bz2
nvme: fix bug with PCI IRQ pins on teardown
When the submission and completion queues are being torn down the IRQ will be asserted for the completion queue when the submsission queue is deleted. Then when the completion queue is deleted it stays asserted. Thus, on systems that do not use MSI, no further interrupts can be triggered on the host. Linux sees this as a long delay when unbinding the nvme device. Eventually the interrupt timeout occurs and it continues. To fix this we ensure we deassert the IRQ for a CQ when it is deleted. Signed-off-by: Logan Gunthorpe <logang@deltatee.com> Signed-off-by: Kevin Wolf <kwolf@redhat.com>
Diffstat (limited to 'hw/block')
-rw-r--r--hw/block/nvme.c1
1 files changed, 1 insertions, 0 deletions
diff --git a/hw/block/nvme.c b/hw/block/nvme.c
index 01f3e85..9fbe567 100644
--- a/hw/block/nvme.c
+++ b/hw/block/nvme.c
@@ -554,6 +554,7 @@ static uint16_t nvme_del_cq(NvmeCtrl *n, NvmeCmd *cmd)
trace_nvme_err_invalid_del_cq_notempty(qid);
return NVME_INVALID_QUEUE_DEL;
}
+ nvme_irq_deassert(n, cq);
trace_nvme_del_cq(qid);
nvme_free_cq(cq, n);
return NVME_SUCCESS;