nvme: Fix spurious interrupts
PATCH 1/1 nvme: Fix spurious interrupts
The code had asserted an interrupt every time it was requested to check for new completion queue entries.This can result in spurious interrupts seen by the guest OS.
Fix this by asserting an interrupt only if there are un-acknowledged completion queue entries available.
--- hw/block/nvme.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)
hw/block/nvme.c +3 -1
@@ -272,7 +272,9 @@ static void nvme_post_cqes(void *opaque) sizeof(req->cqe));QTAILQ_INSERT_TAIL (&sq->req_list, req, entry); } -nvme_irq_assert (n, cq); +if (cq->tail != cq->head) { +nvme_irq_assert (n, cq); + } }static void nvme_enqueue_req_completion (NvmeCQueue *cq,NvmeRequest *req)
Signature · 1 line
2.14.4
Quoted 9 lines · Keith Busch
The code had asserted an interrupt every time it was requested to check for new completion queue entries.This can result in spurious interrupts seen by the guest OS.
Fix this by asserting an interrupt only if there are un-acknowledged completion queue entries available.
Reported-by Guenter Roeck <[email protected]>Signed-off-by Keith Busch <[email protected]>
Quoted 22 lines
--- hw/block/nvme.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)hw/block/nvme.c +3
-1@@ -272,7 +272,9 @@ static void nvme_post_cqes(void *opaque) sizeof(req->cqe));QTAILQ_INSERT_TAIL (&sq->req_list, req, entry); } -nvme_irq_assert (n, cq); +if (cq->tail != cq->head) { +nvme_irq_assert (n, cq); + } }static void nvme_enqueue_req_completion (NvmeCQueue *cq,NvmeRequest *req)Signature · 1 line
2.14.4
Kevin Wolf
AppliedAm 26.11.2018 um 18:17 hat Keith Busch geschrieben:
Quoted 9 lines
The code had asserted an interrupt every time it was requested to check for new completion queue entries.This can result in spurious interrupts seen by the guest OS.
Fix this by asserting an interrupt only if there are un-acknowledged completion queue entries available.
Reported-by Guenter Roeck <[email protected]>Signed-off-by Keith Busch <[email protected]>
Thanks, applied to the block branch.
Kevin