]> git.ipfire.org Git - thirdparty/qemu.git/commit
hw/nvme: fix pin-based interrupt behavior (again)
authorKlaus Jensen <k.jensen@samsung.com>
Thu, 17 Jun 2021 18:55:42 +0000 (20:55 +0200)
committerMichael Roth <michael.roth@amd.com>
Thu, 14 Oct 2021 22:13:53 +0000 (17:13 -0500)
commit6576f6ab8726e52fbd9060224670683bc3e613d6
tree01f2f86623b9b67236515af3916672fe909cae6d
parentbef905cd8a3eb0753262703ecebf2fae0658154b
hw/nvme: fix pin-based interrupt behavior (again)

Jakub noticed[1] that, when using pin-based interrupts, the device will
unconditionally deasssert when any CQEs are acknowledged. However, the
pin should not be deasserted if other completion queues still holds
unacknowledged CQEs.

The bug is an artifact of commit ca247d35098d ("hw/block/nvme: fix
pin-based interrupt behavior") which fixed one bug but introduced
another. This is the third time someone tries to fix pin-based
interrupts (see commit 5e9aa92eb1a5 ("hw/block: Fix pin-based interrupt
behaviour of NVMe"))...

Third time's the charm, so fix it, again, by keeping track of how many
CQs have unacknowledged CQEs and only deassert when all are cleared.

  [1]: <20210610114624.304681-1-jakub.jermar@kernkonzept.com>

Cc: qemu-stable@nongnu.org
Fixes: ca247d35098d ("hw/block/nvme: fix pin-based interrupt behavior")
Reported-by: Jakub Jermář <jakub.jermar@kernkonzept.com>
Signed-off-by: Klaus Jensen <k.jensen@samsung.com>
Reviewed-by: Keith Busch <kbusch@kernel.org>
(cherry picked from commit 83d7ed5c570d4c1d5163951b3057cac2ae7da4ff)
*avoid dependency on 88eea45c ("hw/nvme: move nvme emulation out of hw/block")
Signed-off-by: Michael Roth <michael.roth@amd.com>
hw/block/nvme.c
hw/block/nvme.h