59 lines
2.4 KiB
Diff
59 lines
2.4 KiB
Diff
From e4631c00d8e9ee3608ef3196cbe8bec4841ee988 Mon Sep 17 00:00:00 2001
|
|
From: Peter Xu <peterx@redhat.com>
|
|
Date: Wed, 8 Jan 2020 15:04:57 +0000
|
|
Subject: [PATCH 2/5] vfio/pci: Don't remove irqchip notifier if not registered
|
|
|
|
RH-Author: Peter Xu <peterx@redhat.com>
|
|
Message-id: <20200108150457.12324-2-peterx@redhat.com>
|
|
Patchwork-id: 93291
|
|
O-Subject: [RHEL-AV-8.2.0 qemu-kvm PATCH 1/1] vfio/pci: Don't remove irqchip notifier if not registered
|
|
Bugzilla: 1782678
|
|
RH-Acked-by: Alex Williamson <alex.williamson@redhat.com>
|
|
RH-Acked-by: Cornelia Huck <cohuck@redhat.com>
|
|
RH-Acked-by: Auger Eric <eric.auger@redhat.com>
|
|
RH-Acked-by: Jens Freimann <jfreimann@redhat.com>
|
|
|
|
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>
|
|
(cherry picked from commit 0446f8121723b134ca1d1ed0b73e96d4a0a8689d)
|
|
Signed-off-by: Peter Xu <peterx@redhat.com>
|
|
Signed-off-by: Danilo C. L. de Paula <ddepaula@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 309535f..d717520 100644
|
|
--- a/hw/vfio/pci.c
|
|
+++ b/hw/vfio/pci.c
|
|
@@ -3100,7 +3100,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);
|
|
--
|
|
1.8.3.1
|
|
|