On 05/21/2012 04:13 PM, Jan Kiszka wrote:
> Add a PCI IRQ path discovery function that walks from a given device to
> the host bridge, returning the IRQ number that is reported to the
> attached interrupt controller. For this purpose, another PCI bridge
> callback function is introduced: map_host_irq. It is so far only
> implemented by the PIIX3, other host bridges can be added later on as
> required.
>
> Will be used for KVM PCI device assignment.

This is similar to the memory API, which converts a memory region
hierarchy to a flat list and fires notifiers whenever it changes.

> +int pci_device_get_host_irq(PCIDevice *pci_dev, int irq_num)
> +{
> +    PCIBus *bus;
> +
> +    for (;;) {
> +        bus = pci_dev->bus;
> +        irq_num = bus->map_irq(pci_dev, irq_num);
> +        if (bus->map_host_irq) {
> +            break;
> +        }
> +        pci_dev = bus->parent_dev;
> +        assert(pci_dev);
> +    }
> +    return bus->map_host_irq(bus->irq_opaque, irq_num);
> +}
> +

My personal preference is to avoid infinite loops with breaks, I'd write
this as a do/while (without the assert).  Or maybe supply all buses with
a default map_host_irq that recurses back into
pci_device_get_host_irq().  But this is not an objection to the patch.

-- 
error compiling committee.c: too many arguments to function


Reply via email to