On Tue, 31 Dec 2019 08:39:15 -0500 Peter Xu <pet...@redhat.com> wrote:
> The kvm irqchip notifier is only registered if the device supports > INTx, however it's unconditionally removed. If the assigned device > does not support INTx, this will cause QEMU to crash when unplugging > the device from the system. Change it to conditionally remove the > notifier only if the notify hook is setup. > > CC: Eduardo Habkost <ehabk...@redhat.com> > CC: David Gibson <da...@gibson.dropbear.id.au> > CC: Alex Williamson <alex.william...@redhat.com> > Reported-by: yangh...@redhat.com > Fixes: c5478fea27 ("vfio/pci: Respond to KVM irqchip change notifier", > 2019-11-26) > Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1782678 > Signed-off-by: Peter Xu <pet...@redhat.com> > --- > hw/vfio/pci.c | 4 +++- > 1 file changed, 3 insertions(+), 1 deletion(-) > > diff --git a/hw/vfio/pci.c b/hw/vfio/pci.c > index 2d40b396f2..337a173ce7 100644 > --- a/hw/vfio/pci.c > +++ b/hw/vfio/pci.c > @@ -3076,7 +3076,9 @@ static void vfio_exitfn(PCIDevice *pdev) > vfio_unregister_req_notifier(vdev); > vfio_unregister_err_notifier(vdev); > pci_device_set_intx_routing_notifier(&vdev->pdev, NULL); > - kvm_irqchip_remove_change_notifier(&vdev->irqchip_change_notifier); > + if (vdev->irqchip_change_notifier.notify) { > + kvm_irqchip_remove_change_notifier(&vdev->irqchip_change_notifier); > + } > vfio_disable_interrupts(vdev); > if (vdev->intx.mmap_timer) { > timer_free(vdev->intx.mmap_timer); Thanks, Peter! Sent a pull request with David and Greg's R-b, stable tag, and debug credit to Eduardo as I think he spotted the issue first. Thanks, Alex