qemu-devel
[Top][All Lists]
Advanced

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

[Qemu-devel] [PATCH v1 2/3] sPAPR: Implement sPAPRPHBClass::format_errin


From: Gavin Shan
Subject: [Qemu-devel] [PATCH v1 2/3] sPAPR: Implement sPAPRPHBClass::format_errinjct_cmd
Date: Mon, 23 Jun 2014 12:22:02 +1000

The patch implements sPAPRPHBClass::format_errinjct_cmd to do the
address translation (BUID+PE number to IOMMU group ID) and then
come up with the formatted string for PCI error injection.

Signed-off-by: Gavin Shan <address@hidden>
---
 hw/ppc/spapr_pci_vfio.c | 19 +++++++++++++++++++
 1 file changed, 19 insertions(+)

diff --git a/hw/ppc/spapr_pci_vfio.c b/hw/ppc/spapr_pci_vfio.c
index 0a1e902..1f9f0bf 100644
--- a/hw/ppc/spapr_pci_vfio.c
+++ b/hw/ppc/spapr_pci_vfio.c
@@ -227,6 +227,24 @@ static int spapr_phb_vfio_eeh_handler(sPAPRPHBState *sphb, 
int req, int opt)
                                 VFIO_EEH_PE_OP, &op);
 }
 
+static char *format_errinjct_cmd(sPAPRPHBState *sphb, sPAPRErrInjctIOA *ioa)
+{
+    sPAPRPHBVFIOState *svphb = SPAPR_PCI_VFIO_HOST_BRIDGE(sphb);
+    char *pstr = NULL;
+
+    /* Invalid IOMMU group ID ? */
+    if (svphb->iommugroupid == -1) {
+        goto out;
+    }
+
+    /* Formatted string */
+    pstr = g_strdup_printf("%x:%lx:%lx:%x:%x",
+                           ioa->ei_token, ioa->addr, ioa->mask,
+                           svphb->iommugroupid, ioa->func);
+out:
+    return pstr;
+}
+
 static void spapr_phb_vfio_reset(DeviceState *qdev)
 {
     /* Do nothing */
@@ -241,6 +259,7 @@ static void spapr_phb_vfio_class_init(ObjectClass *klass, 
void *data)
     dc->reset = spapr_phb_vfio_reset;
     spc->finish_realize = spapr_phb_vfio_finish_realize;
     spc->eeh_handler = spapr_phb_vfio_eeh_handler;
+    spc->format_errinjct_cmd = format_errinjct_cmd;
 }
 
 static const TypeInfo spapr_phb_vfio_info = {
-- 
1.8.3.2




reply via email to

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