From: Chen Fan <chen.fan.f...@cn.fujitsu.com> mark the host bus be in reset. avoid multiple devices trigger the host bus reset many times.
Signed-off-by: Chen Fan <chen.fan.f...@cn.fujitsu.com> --- hw/vfio/pci.c | 6 ++++++ include/hw/vfio/vfio-common.h | 1 + 2 files changed, 7 insertions(+) diff --git a/hw/vfio/pci.c b/hw/vfio/pci.c index ee88db3..aa0d945 100644 --- a/hw/vfio/pci.c +++ b/hw/vfio/pci.c @@ -2249,6 +2249,11 @@ static int vfio_pci_hot_reset(VFIOPCIDevice *vdev, bool single) trace_vfio_pci_hot_reset(vdev->vbasedev.name, single ? "one" : "multi"); + if (vdev->vbasedev.bus_in_reset) { + vdev->vbasedev.bus_in_reset = false; + return 0; + } + vfio_pci_pre_reset(vdev); vdev->vbasedev.needs_reset = false; @@ -2312,6 +2317,7 @@ static int vfio_pci_hot_reset(VFIOPCIDevice *vdev, bool single) } vfio_pci_pre_reset(tmp); tmp->vbasedev.needs_reset = false; + tmp->vbasedev.bus_in_reset = true; multi = true; break; } diff --git a/include/hw/vfio/vfio-common.h b/include/hw/vfio/vfio-common.h index f037f3c..44b19d7 100644 --- a/include/hw/vfio/vfio-common.h +++ b/include/hw/vfio/vfio-common.h @@ -95,6 +95,7 @@ typedef struct VFIODevice { bool reset_works; bool needs_reset; bool no_mmap; + bool bus_in_reset; VFIODeviceOps *ops; unsigned int num_irqs; unsigned int num_regions; -- 1.9.3