Patchwork [16/16] pseries: Generate unique LIOBNs for PCI host bridges

login
register
mail settings
Submitter David Gibson
Date Oct. 30, 2012, 3:25 a.m.
Message ID <1351567512-17278-17-git-send-email-david@gibson.dropbear.id.au>
Download mbox | patch
Permalink /patch/195282/
State New
Headers show

Comments

David Gibson - Oct. 30, 2012, 3:25 a.m.
From: Alexey Kardashevskiy <aik@ozlabs.ru>

In future (with VFIO) we will have multiple PCI host bridges on
pseries.  Each one needs a unique LIOBN (IOMMU id).  At the moment we
derive these from the pci domain number, but the whole notion of
domain numbers on the qemu side is bogus and in any case they're not
actually uniquely allocated at this point.

This patch, therefore uses a simple sequence counter to generate
unique LIOBNs for PCI host bridges.

Signed-off-by: Alexey Kardashevskiy <aik@ozlabs.ru>
Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
---
 hw/spapr_pci.c |    3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

Patch

diff --git a/hw/spapr_pci.c b/hw/spapr_pci.c
index 3c5b855..f6544d7 100644
--- a/hw/spapr_pci.c
+++ b/hw/spapr_pci.c
@@ -521,6 +521,7 @@  static int spapr_phb_init(SysBusDevice *s)
     char *namebuf;
     int i;
     PCIBus *bus;
+    static int phbnum;
 
     sphb->dtbusname = g_strdup_printf("pci@%" PRIx64, sphb->buid);
     namebuf = alloca(strlen(sphb->dtbusname) + 32);
@@ -572,7 +573,7 @@  static int spapr_phb_init(SysBusDevice *s)
                            PCI_DEVFN(0, 0), PCI_NUM_PINS);
     phb->bus = bus;
 
-    sphb->dma_liobn = SPAPR_PCI_BASE_LIOBN | (pci_find_domain(bus) << 16);
+    sphb->dma_liobn = SPAPR_PCI_BASE_LIOBN | (++phbnum << 16);
     sphb->dma_window_start = 0;
     sphb->dma_window_size = 0x40000000;
     sphb->dma = spapr_tce_new_dma_context(sphb->dma_liobn, sphb->dma_window_size);