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