| |
@@ -0,0 +1,45 @@
|
| |
+ From 0446f8121723b134ca1d1ed0b73e96d4a0a8689d Mon Sep 17 00:00:00 2001
|
| |
+ From: Peter Xu <peterx@redhat.com>
|
| |
+ Date: Mon, 6 Jan 2020 13:34:45 -0700
|
| |
+ Subject: [PATCH] vfio/pci: Don't remove irqchip notifier if not registered
|
| |
+
|
| |
+ 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 <ehabkost@redhat.com>
|
| |
+ CC: David Gibson <david@gibson.dropbear.id.au>
|
| |
+ CC: Alex Williamson <alex.williamson@redhat.com>
|
| |
+ Cc: qemu-stable@nongnu.org # v4.2
|
| |
+ Reported-by: yanghliu@redhat.com
|
| |
+ Debugged-by: Eduardo Habkost <ehabkost@redhat.com>
|
| |
+ Fixes: c5478fea27ac ("vfio/pci: Respond to KVM irqchip change notifier")
|
| |
+ Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1782678
|
| |
+ Signed-off-by: Peter Xu <peterx@redhat.com>
|
| |
+ Reviewed-by: David Gibson <david@gibson.dropbear.id.au>
|
| |
+ Reviewed-by: Greg Kurz <groug@kaod.org>
|
| |
+ Signed-off-by: Alex Williamson <alex.williamson@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);
|
| |
+ --
|
| |
+ 2.25.1
|
| |
+
|
| |
Fix segfault with SR-IOV hot-{plug,unplug} (bz #1814017)
This patch should also be backported to f32 branch.
Signed-off-by: Fabiano Fidêncio fidencio@redhat.com