|
Fabiano Fidêncio |
492d6c |
From 0446f8121723b134ca1d1ed0b73e96d4a0a8689d Mon Sep 17 00:00:00 2001
|
|
Fabiano Fidêncio |
492d6c |
From: Peter Xu <peterx@redhat.com>
|
|
Fabiano Fidêncio |
492d6c |
Date: Mon, 6 Jan 2020 13:34:45 -0700
|
|
Fabiano Fidêncio |
492d6c |
Subject: [PATCH] vfio/pci: Don't remove irqchip notifier if not registered
|
|
Fabiano Fidêncio |
492d6c |
|
|
Fabiano Fidêncio |
492d6c |
The kvm irqchip notifier is only registered if the device supports
|
|
Fabiano Fidêncio |
492d6c |
INTx, however it's unconditionally removed. If the assigned device
|
|
Fabiano Fidêncio |
492d6c |
does not support INTx, this will cause QEMU to crash when unplugging
|
|
Fabiano Fidêncio |
492d6c |
the device from the system. Change it to conditionally remove the
|
|
Fabiano Fidêncio |
492d6c |
notifier only if the notify hook is setup.
|
|
Fabiano Fidêncio |
492d6c |
|
|
Fabiano Fidêncio |
492d6c |
CC: Eduardo Habkost <ehabkost@redhat.com>
|
|
Fabiano Fidêncio |
492d6c |
CC: David Gibson <david@gibson.dropbear.id.au>
|
|
Fabiano Fidêncio |
492d6c |
CC: Alex Williamson <alex.williamson@redhat.com>
|
|
Fabiano Fidêncio |
492d6c |
Cc: qemu-stable@nongnu.org # v4.2
|
|
Fabiano Fidêncio |
492d6c |
Reported-by: yanghliu@redhat.com
|
|
Fabiano Fidêncio |
492d6c |
Debugged-by: Eduardo Habkost <ehabkost@redhat.com>
|
|
Fabiano Fidêncio |
492d6c |
Fixes: c5478fea27ac ("vfio/pci: Respond to KVM irqchip change notifier")
|
|
Fabiano Fidêncio |
492d6c |
Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1782678
|
|
Fabiano Fidêncio |
492d6c |
Signed-off-by: Peter Xu <peterx@redhat.com>
|
|
Fabiano Fidêncio |
492d6c |
Reviewed-by: David Gibson <david@gibson.dropbear.id.au>
|
|
Fabiano Fidêncio |
492d6c |
Reviewed-by: Greg Kurz <groug@kaod.org>
|
|
Fabiano Fidêncio |
492d6c |
Signed-off-by: Alex Williamson <alex.williamson@redhat.com>
|
|
Fabiano Fidêncio |
492d6c |
---
|
|
Fabiano Fidêncio |
492d6c |
hw/vfio/pci.c | 4 +++-
|
|
Fabiano Fidêncio |
492d6c |
1 file changed, 3 insertions(+), 1 deletion(-)
|
|
Fabiano Fidêncio |
492d6c |
|
|
Fabiano Fidêncio |
492d6c |
diff --git a/hw/vfio/pci.c b/hw/vfio/pci.c
|
|
Fabiano Fidêncio |
492d6c |
index 2d40b396f2..337a173ce7 100644
|
|
Fabiano Fidêncio |
492d6c |
--- a/hw/vfio/pci.c
|
|
Fabiano Fidêncio |
492d6c |
+++ b/hw/vfio/pci.c
|
|
Fabiano Fidêncio |
492d6c |
@@ -3076,7 +3076,9 @@ static void vfio_exitfn(PCIDevice *pdev)
|
|
Fabiano Fidêncio |
492d6c |
vfio_unregister_req_notifier(vdev);
|
|
Fabiano Fidêncio |
492d6c |
vfio_unregister_err_notifier(vdev);
|
|
Fabiano Fidêncio |
492d6c |
pci_device_set_intx_routing_notifier(&vdev->pdev, NULL);
|
|
Fabiano Fidêncio |
492d6c |
- kvm_irqchip_remove_change_notifier(&vdev->irqchip_change_notifier);
|
|
Fabiano Fidêncio |
492d6c |
+ if (vdev->irqchip_change_notifier.notify) {
|
|
Fabiano Fidêncio |
492d6c |
+ kvm_irqchip_remove_change_notifier(&vdev->irqchip_change_notifier);
|
|
Fabiano Fidêncio |
492d6c |
+ }
|
|
Fabiano Fidêncio |
492d6c |
vfio_disable_interrupts(vdev);
|
|
Fabiano Fidêncio |
492d6c |
if (vdev->intx.mmap_timer) {
|
|
Fabiano Fidêncio |
492d6c |
timer_free(vdev->intx.mmap_timer);
|
|
Fabiano Fidêncio |
492d6c |
--
|
|
Fabiano Fidêncio |
492d6c |
2.25.1
|
|
Fabiano Fidêncio |
492d6c |
|