From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([140.186.70.92]:39112) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1R1b8p-0005aE-7R for qemu-devel@nongnu.org; Thu, 08 Sep 2011 05:43:31 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1R1b8k-00074F-Pb for qemu-devel@nongnu.org; Thu, 08 Sep 2011 05:43:27 -0400 Received: from mx1.redhat.com ([209.132.183.28]:10452) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1R1b8k-00073v-IZ for qemu-devel@nongnu.org; Thu, 08 Sep 2011 05:43:22 -0400 Message-ID: <4E688E32.7060207@redhat.com> Date: Thu, 08 Sep 2011 11:43:14 +0200 From: Gerd Hoffmann MIME-Version: 1.0 References: <4E4D2C9F.6040805@redhat.com> <4E4DF0A0.6000108@cn.fujitsu.com> <4E4E808C.4000205@redhat.com> <4E51C945.6070103@cn.fujitsu.com> <4E51F5FD.4030905@redhat.com> <4E6045E0.2090701@cn.fujitsu.com> <4E6335E4.6040705@redhat.com> <4E658E2F.6050302@cn.fujitsu.com> <4E65CF9E.20004@redhat.com> <4E66F56D.9070709@cn.fujitsu.com> <20110907115223.GD9337@redhat.com> <4E685D85.6030806@cn.fujitsu.com> <4E686E0C.7090906@cn.fujitsu.com> In-Reply-To: <4E686E0C.7090906@cn.fujitsu.com> Content-Type: multipart/mixed; boundary="------------020109070705010306030603" Subject: Re: [Qemu-devel] [PATCH] pci: add standard bridge device List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Wen Congyang Cc: Kevin Wolf , Isaku Yamahata , qemu-devel@nongnu.org, Avi Kivity , "Michael S. Tsirkin" This is a multi-part message in MIME format. --------------020109070705010306030603 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Hi, > I modify the code like this, and the PCI_INTERRUPT_LINE register is set, and I can bind > it to uio_pci_generic: > --- a/src/pciinit.c > +++ b/src/pciinit.c > @@ -575,6 +575,8 @@ static int pci_bios_init_root_regions(u32 start, u32 end) > pci_bios_init_bus_bases(&busses[0]); > - pci_bios_map_device_in_bus(0 /* host bus */); > + for (bus = 0; bus<= MaxPCIBus; bus++) { > + pci_bios_map_device_in_bus(bus /* host bus */); No. pci_bios_map_device_in_bus goes down recursively when it finds a bridge, so it should cover all devices already. > - pci_bios_init_device_in_bus(0 /* host bus */); > + pci_bios_init_device_in_bus(bus /* host bus */); > + } That is correct. Can be done easier though by just not limiting device initialization to a specific bus like in the attached patch. Does that one work for you? cheers, Gerd --------------020109070705010306030603 Content-Type: text/plain; name="fix" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="fix" diff --git a/src/pciinit.c b/src/pciinit.c index 597c8ea..676e35e 100644 --- a/src/pciinit.c +++ b/src/pciinit.c @@ -45,7 +45,7 @@ static struct pci_bus { } *busses; static int busses_count; -static void pci_bios_init_device_in_bus(int bus); +static void pci_bios_init_device_all(void); static void pci_bios_check_device_in_bus(int bus); static void pci_bios_init_bus_bases(struct pci_bus *bus); static void pci_bios_map_device_in_bus(int bus); @@ -254,15 +254,10 @@ static void pci_bios_init_device(struct pci_device *pci) pci_init_device(pci_device_tbl, pci, NULL); } -static void pci_bios_init_device_in_bus(int bus) +static void pci_bios_init_device_all(void) { struct pci_device *pci; foreachpci(pci) { - u8 pci_bus = pci_bdf_to_bus(pci->bdf); - if (pci_bus < bus) - continue; - if (pci_bus > bus) - break; pci_bios_init_device(pci); } } @@ -605,7 +600,7 @@ pci_setup(void) pci_bios_init_bus_bases(&busses[0]); pci_bios_map_device_in_bus(0 /* host bus */); - pci_bios_init_device_in_bus(0 /* host bus */); + pci_bios_init_device_all(); struct pci_device *pci; foreachpci(pci) { --------------020109070705010306030603--