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
> 


Reply via email to