From: Alexey Kardashevskiy <a...@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 <a...@ozlabs.ru> Signed-off-by: David Gibson <da...@gibson.dropbear.id.au> --- hw/spapr_pci.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) 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); -- 1.7.10.4