On 13.11.2012, at 03:47, David Gibson wrote: > 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>
I don't really like the idea of having a global variable just because our domain ID generation seems to not work as expected. Michael, any comments here? Alex > --- > 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 >