[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-ppc] [RFC PATCH 09/14] vfio: Expose a VFIO PCI device's group for
From: |
David Gibson |
Subject: |
[Qemu-ppc] [RFC PATCH 09/14] vfio: Expose a VFIO PCI device's group for EEH |
Date: |
Sat, 19 Sep 2015 17:18:32 +1000 |
The Enhanced Error Handling (EEH) interface in PAPR operates on units of a
Partitionable Endpoint (PE). For VFIO devices, the PE boundaries the guest
sees must match the PE (i.e. IOMMU group) boundaries on the host. To
implement this VFIO needs to expose to EEH the IOMMU group each VFIO device
belongs to.
Add a vfio_pci_device_group() function to the VFIO/EEH interface for this
purpose.
Signed-off-by: David Gibson <address@hidden>
---
hw/vfio/pci.c | 13 +++++++++++++
include/hw/vfio/vfio-eeh.h | 1 +
2 files changed, 14 insertions(+)
diff --git a/hw/vfio/pci.c b/hw/vfio/pci.c
index 73d34b9..29f9467 100644
--- a/hw/vfio/pci.c
+++ b/hw/vfio/pci.c
@@ -41,6 +41,7 @@
#include "trace.h"
#include "hw/vfio/vfio.h"
#include "hw/vfio/vfio-common.h"
+#include "hw/vfio/vfio-eeh.h"
struct VFIOPCIDevice;
@@ -3351,6 +3352,18 @@ static void vfio_unregister_req_notifier(VFIOPCIDevice
*vdev)
vdev->req_enabled = false;
}
+VFIOGroup *vfio_pci_device_group(PCIDevice *pdev)
+{
+ VFIOPCIDevice *vdev;
+
+ if (!object_dynamic_cast(OBJECT(pdev), "vfio-pci")) {
+ return NULL;
+ }
+
+ vdev = DO_UPCAST(VFIOPCIDevice, pdev, pdev);
+ return vdev->vbasedev.group;
+}
+
/*
* AMD Radeon PCI config reset, based on Linux:
* drivers/gpu/drm/radeon/ci_smc.c:ci_is_smc_running()
diff --git a/include/hw/vfio/vfio-eeh.h b/include/hw/vfio/vfio-eeh.h
index d7356f2..0ea87e1 100644
--- a/include/hw/vfio/vfio-eeh.h
+++ b/include/hw/vfio/vfio-eeh.h
@@ -38,5 +38,6 @@
typedef struct VFIOGroup VFIOGroup;
int vfio_eeh_op(VFIOGroup *group, uint32_t op);
+VFIOGroup *vfio_pci_device_group(PCIDevice *pdev);
#endif /* VFIO_EEH_H */
--
2.4.3
- [Qemu-ppc] [RFC PATCH 00/14] Allow EEH on "normal" sPAPR PCI host bridge, David Gibson, 2015/09/19
- [Qemu-ppc] [RFC PATCH 03/14] spapr_pci: Expose and generalize spapr_phb_check_vfio_group(), David Gibson, 2015/09/19
- [Qemu-ppc] [RFC PATCH 04/14] spapr_pci: Fold spapr_phb_vfio_eeh_configure() into spapr_pci code, David Gibson, 2015/09/19
- [Qemu-ppc] [RFC PATCH 09/14] vfio: Expose a VFIO PCI device's group for EEH,
David Gibson <=
- [Qemu-ppc] [RFC PATCH 02/14] spapr_pci: Switch EEH to vfio_eeh_op() interface, David Gibson, 2015/09/19
- [Qemu-ppc] [RFC PATCH 14/14] vfio: Eliminate vfio_container_ioctl(), David Gibson, 2015/09/19
- [Qemu-ppc] [RFC PATCH 05/14] spapr_pci: Fold spapr_phb_vfio_eeh_reset() into spapr_pci code, David Gibson, 2015/09/19
- [Qemu-ppc] [RFC PATCH 06/14] spapr_pci: Fold spapr_phb_vfio_eeh_get_state() into spapr_pci code, David Gibson, 2015/09/19
- [Qemu-ppc] [RFC PATCH 08/14] spapr_pci: Fold spapr_phb_vfio_eeh_configure() into spapr_pci code, David Gibson, 2015/09/19
- [Qemu-ppc] [RFC PATCH 11/14] spapr_pci: Allow EEH on spapr-pci-host-bridge, David Gibson, 2015/09/19