qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Qemu-devel] [RFC PATCH 09/14] vfio: Expose a VFIO PCI device's group fo


From: David Gibson
Subject: [Qemu-devel] [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




reply via email to

[Prev in Thread] Current Thread [Next in Thread]