[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [v15 11/15] vfio: add hot reset callback
From: |
Cao jin |
Subject: |
[Qemu-devel] [v15 11/15] vfio: add hot reset callback |
Date: |
Tue, 5 Jan 2016 09:20:52 +0800 |
From: Chen Fan <address@hidden>
For Vfio device, Once need to recovery devices by bus reset such as AER,
we always need to reset the host bus to recovery the devices under the bus,
so we need to specify to do host bus reset.
---
hw/vfio/pci.c | 15 +++++++++++++++
hw/vfio/pci.h | 1 +
2 files changed, 16 insertions(+)
diff --git a/hw/vfio/pci.c b/hw/vfio/pci.c
index ff25c9b..ee88db3 100644
--- a/hw/vfio/pci.c
+++ b/hw/vfio/pci.c
@@ -1914,6 +1914,8 @@ static int vfio_check_host_bus_reset(VFIOPCIDevice *vdev)
/* List all affected devices by bus reset */
devices = &info->devices[0];
+ vdev->single_depend_dev = (info->count == 1);
+
/* Verify that we have all the groups required */
for (i = 0; i < info->count; i++) {
PCIHostDeviceAddress host;
@@ -3035,6 +3037,18 @@ post_reset:
vfio_pci_post_reset(vdev);
}
+static void vfio_pci_device_hot_reset(DeviceState *dev)
+{
+ PCIDevice *pdev = DO_UPCAST(PCIDevice, qdev, dev);
+ VFIOPCIDevice *vdev = DO_UPCAST(VFIOPCIDevice, pdev, pdev);
+
+ if (vdev->features & VFIO_FEATURE_ENABLE_AER) {
+ vfio_pci_hot_reset(vdev, vdev->single_depend_dev);
+ } else {
+ vfio_pci_reset(dev);
+ }
+}
+
static void vfio_instance_init(Object *obj)
{
PCIDevice *pci_dev = PCI_DEVICE(obj);
@@ -3082,6 +3096,7 @@ static void vfio_pci_dev_class_init(ObjectClass *klass,
void *data)
PCIDeviceClass *pdc = PCI_DEVICE_CLASS(klass);
dc->reset = vfio_pci_reset;
+ dc->hot_reset = vfio_pci_device_hot_reset;
dc->props = vfio_pci_dev_properties;
dc->vmsd = &vfio_pci_vmstate;
dc->desc = "VFIO-based PCI device assignment";
diff --git a/hw/vfio/pci.h b/hw/vfio/pci.h
index b385f07..6186e62 100644
--- a/hw/vfio/pci.h
+++ b/hw/vfio/pci.h
@@ -142,6 +142,7 @@ typedef struct VFIOPCIDevice {
bool no_kvm_intx;
bool no_kvm_msi;
bool no_kvm_msix;
+ bool single_depend_dev;
NotifierWithReturn hotplug_notifier;
} VFIOPCIDevice;
--
1.9.3
- [Qemu-devel] [v15 00/15] vfio-pci: pass the aer error to guest, Cao jin, 2016/01/04
- [Qemu-devel] [v15 02/15] vfio: squeeze out vfio_pci_do_hot_reset for support bus reset, Cao jin, 2016/01/04
- [Qemu-devel] [v15 01/15] vfio: extract vfio_get_hot_reset_info as a single function, Cao jin, 2016/01/04
- [Qemu-devel] [v15 04/15] vfio: make the 4 bytes aligned for capability size, Cao jin, 2016/01/04
- [Qemu-devel] [v15 06/15] aer: impove pcie_aer_init to support vfio device, Cao jin, 2016/01/04
- [Qemu-devel] [v15 07/15] vfio: add aer support for vfio device, Cao jin, 2016/01/04
- [Qemu-devel] [v15 15/15] vfio: add 'aer' property to expose aercap, Cao jin, 2016/01/04
- [Qemu-devel] [v15 09/15] add check reset mechanism when hotplug vfio device, Cao jin, 2016/01/04
- [Qemu-devel] [v15 11/15] vfio: add hot reset callback,
Cao jin <=
- [Qemu-devel] [v15 10/15] pci: Introduce device hot reset, Cao jin, 2016/01/04
- [Qemu-devel] [v15 13/15] pcie_aer: expose pcie_aer_msg() interface, Cao jin, 2016/01/04
- [Qemu-devel] [v15 14/15] vfio-pci: pass the aer error to guest, Cao jin, 2016/01/04
- [Qemu-devel] [v15 03/15] pcie: modify the capability size assert, Cao jin, 2016/01/04
- [Qemu-devel] [v15 12/15] vfio: add bus in reset flag, Cao jin, 2016/01/04
[Qemu-devel] [v15 05/15] vfio: add pcie extanded capability support, Cao jin, 2016/01/04