From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([208.118.235.92]:52907) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1SWTiy-0001Bo-EA for qemu-devel@nongnu.org; Mon, 21 May 2012 10:36:44 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1SWTis-0004Uh-7u for qemu-devel@nongnu.org; Mon, 21 May 2012 10:36:39 -0400 Received: from mx1.redhat.com ([209.132.183.28]:55527) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1SWTir-0004UI-Vq for qemu-devel@nongnu.org; Mon, 21 May 2012 10:36:34 -0400 Message-ID: <4FBA52E9.3060808@redhat.com> Date: Mon, 21 May 2012 17:36:25 +0300 From: Avi Kivity MIME-Version: 1.0 References: <4FBA3F8B.9060103@siemens.com> In-Reply-To: <4FBA3F8B.9060103@siemens.com> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] [PATCH 1/2] pci: Add pci_device_get_host_irq List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Jan Kiszka Cc: Alex Williamson , Marcelo Tosatti , qemu-devel , "Michael S. Tsirkin" 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