From: Klaus Jensen <k.jen...@samsung.com> This is a re-spin of Jinhao's irqfd support series that fixes msix vector masking/unmasking to work correctly.
I kept being bugged out about that msi route not getting updated, so I hit the code into submission with a hammer. I finally noticed the core issue: 1. The vector notifiers was never set because msix is not enabled at the point where nvme_init_pci() is called. Move this call to nvme_start_ctrl(). Since the unmask callback was suddenly getting called now, another fix was needed: 2. Call kvm_irqchip_add_irqfd_notifier_gsi() in the unmask handler - not in nvme_init_irq_notifier(). The vectors may potentially be masked/unmasked and shall cause a pair of add_irqfd and remove_irqfd calls. Removing it from nvme_init_irq_notifier() makes sure we do not try to double add. Now it does what it is supposed to; no hacks required :) Jinhao Fan (2): hw/nvme: support irq(de)assertion with eventfd hw/nvme: use KVM irqfd when available hw/nvme/ctrl.c | 261 ++++++++++++++++++++++++++++++++++++++++--- hw/nvme/nvme.h | 6 + hw/nvme/trace-events | 3 + 3 files changed, 253 insertions(+), 17 deletions(-) -- 2.37.2