[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PULL 10/10] vfio: Expose a VFIO PCI device's group for EEH
From: |
Alex Williamson |
Subject: |
[Qemu-devel] [PULL 10/10] vfio: Expose a VFIO PCI device's group for EEH |
Date: |
Mon, 05 Oct 2015 14:37:59 -0600 |
User-agent: |
StGit/0.17.1-dirty |
From: David Gibson <address@hidden>
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 it will need to discover from VFIO which group a given
device belongs to.
This exposes a new vfio_pci_device_group() function for this purpose.
Signed-off-by: David Gibson <address@hidden>
Reviewed-by: Laurent Vivier <address@hidden>
Signed-off-by: Alex Williamson <address@hidden>
---
hw/vfio/pci.c | 14 ++++++++++++++
include/hw/vfio/vfio-pci.h | 11 +++++++++++
2 files changed, 25 insertions(+)
create mode 100644 include/hw/vfio/vfio-pci.h
diff --git a/hw/vfio/pci.c b/hw/vfio/pci.c
index dcabb6d..49ae834 100644
--- a/hw/vfio/pci.c
+++ b/hw/vfio/pci.c
@@ -35,6 +35,8 @@
#include "pci.h"
#include "trace.h"
+#include "hw/vfio/vfio-pci.h"
+
#define MSIX_CAP_LENGTH 12
static void vfio_disable_interrupts(VFIOPCIDevice *vdev);
@@ -2312,6 +2314,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;
+}
+
static int vfio_initfn(PCIDevice *pdev)
{
VFIOPCIDevice *vdev = DO_UPCAST(VFIOPCIDevice, pdev, pdev);
diff --git a/include/hw/vfio/vfio-pci.h b/include/hw/vfio/vfio-pci.h
new file mode 100644
index 0000000..32105f7
--- /dev/null
+++ b/include/hw/vfio/vfio-pci.h
@@ -0,0 +1,11 @@
+#ifndef VFIO_PCI_H
+#define VFIO_PCI_H
+
+#include "qemu/typedefs.h"
+
+/* We expose the concept of a VFIOGroup, though not its internals */
+typedef struct VFIOGroup VFIOGroup;
+
+extern VFIOGroup *vfio_pci_device_group(PCIDevice *pdev);
+
+#endif /* VFIO_PCI_H */
- [Qemu-devel] [PULL 04/10] vfio: Remove unneeded union from VFIOContainer, (continued)
- [Qemu-devel] [PULL 04/10] vfio: Remove unneeded union from VFIOContainer, Alex Williamson, 2015/10/08
- [Qemu-devel] [PULL 05/10] vfio: Generalize vfio_listener_region_add failure path, Alex Williamson, 2015/10/08
- Re: [Qemu-devel] [PULL 00/10] VFIO updates for 2015-10-05, Peter Maydell, 2015/10/08
- [Qemu-devel] [PULL 03/10] hw/vfio/platform: do not set resamplefd for edge-sensitive IRQS, Alex Williamson, 2015/10/08
- [Qemu-devel] [PULL 08/10] memory: Allow replay of IOMMU mapping notifications, Alex Williamson, 2015/10/08
- [Qemu-devel] [PULL 09/10] vfio: Allow hotplug of containers onto existing guest IOMMU mappings, Alex Williamson, 2015/10/08
- [Qemu-devel] [PULL 06/10] vfio: Check guest IOVA ranges against host IOMMU capabilities, Alex Williamson, 2015/10/08
- [Qemu-devel] [PULL 07/10] vfio: Record host IOMMU's available IO page sizes, Alex Williamson, 2015/10/08
- [Qemu-devel] [PULL 10/10] vfio: Expose a VFIO PCI device's group for EEH,
Alex Williamson <=