Patchwork [07/20] pci: remove pci_sub_bus() by open coding.

login
register
mail settings
Submitter Isaku Yamahata
Date Nov. 12, 2009, 5:58 a.m.
Message ID <1258005528-25383-8-git-send-email-yamahata@valinux.co.jp>
Download mbox | patch
Permalink /patch/38212/
State New
Headers show

Comments

Isaku Yamahata - Nov. 12, 2009, 5:58 a.m.
Because pci_sub_bus() is used only once so eliminate it
by open coding as suggested by "Michael S. Tsirkin" <mst@redhat.com>.

Signed-off-by: Isaku Yamahata <yamahata@valinux.co.jp>
---
 hw/pci.c |   12 ++++--------
 1 files changed, 4 insertions(+), 8 deletions(-)
Michael S. Tsirkin - Nov. 12, 2009, 10:45 a.m.
On Thu, Nov 12, 2009 at 02:58:35PM +0900, Isaku Yamahata wrote:
> Because pci_sub_bus() is used only once so eliminate it
> by open coding as suggested by "Michael S. Tsirkin" <mst@redhat.com>.
> 
> Signed-off-by: Isaku Yamahata <yamahata@valinux.co.jp>

Acked-by: Michael S. Tsirkin <mst@redhat.com>

As a separate note.  I wonder whether we can handle host bridge in a way
that is more uniform with pci bridges, so we don't have to special-case
it in e.g. pci_bus_num.
Not sure yet how to do this or whether this is a good idea at all.

> ---
>  hw/pci.c |   12 ++++--------
>  1 files changed, 4 insertions(+), 8 deletions(-)
> 
> diff --git a/hw/pci.c b/hw/pci.c
> index 4169d4f..bdd4063 100644
> --- a/hw/pci.c
> +++ b/hw/pci.c
> @@ -239,13 +239,6 @@ int pci_bus_num(PCIBus *s)
>      return s->parent_dev->config[PCI_SECONDARY_BUS];
>  }
>  
> -static uint8_t pci_sub_bus(PCIBus *s)
> -{
> -    if (!s->parent_dev)
> -        return 255;     /* pci host bridge */
> -    return s->parent_dev->config[PCI_SUBORDINATE_BUS];
> -}
> -
>  static int get_pci_config_device(QEMUFile *f, void *pv, size_t size)
>  {
>      PCIDevice *s = container_of(pv, PCIDevice, config);
> @@ -1179,7 +1172,10 @@ PCIBus *pci_find_bus(PCIBus *bus, int bus_num)
>  
>      /* try child bus */
>      QLIST_FOREACH(sec, &bus->child, sibling) {
> -        if (pci_bus_num(sec) <= bus_num && bus_num <= pci_sub_bus(sec)) {
> +
> +        if (!bus->parent_dev /* pci host bridge */
> +            || (pci_bus_num(sec) <= bus_num &&
> +                bus->parent_dev->config[PCI_SUBORDINATE_BUS])) {
>              return pci_find_bus(sec, bus_num);
>          }
>      }
> -- 
> 1.6.0.2
Isaku Yamahata - Nov. 12, 2009, 1 p.m.
On Thu, Nov 12, 2009 at 12:45:08PM +0200, Michael S. Tsirkin wrote:
> On Thu, Nov 12, 2009 at 02:58:35PM +0900, Isaku Yamahata wrote:
> > Because pci_sub_bus() is used only once so eliminate it
> > by open coding as suggested by "Michael S. Tsirkin" <mst@redhat.com>.
> > 
> > Signed-off-by: Isaku Yamahata <yamahata@valinux.co.jp>
> 
> Acked-by: Michael S. Tsirkin <mst@redhat.com>
> 
> As a separate note.  I wonder whether we can handle host bridge in a way
> that is more uniform with pci bridges, so we don't have to special-case
> it in e.g. pci_bus_num.
> Not sure yet how to do this or whether this is a good idea at all.

PCI host device has header type of 0, normal device.
So it doesn't have secondary bus register.

Patch

diff --git a/hw/pci.c b/hw/pci.c
index 4169d4f..bdd4063 100644
--- a/hw/pci.c
+++ b/hw/pci.c
@@ -239,13 +239,6 @@  int pci_bus_num(PCIBus *s)
     return s->parent_dev->config[PCI_SECONDARY_BUS];
 }
 
-static uint8_t pci_sub_bus(PCIBus *s)
-{
-    if (!s->parent_dev)
-        return 255;     /* pci host bridge */
-    return s->parent_dev->config[PCI_SUBORDINATE_BUS];
-}
-
 static int get_pci_config_device(QEMUFile *f, void *pv, size_t size)
 {
     PCIDevice *s = container_of(pv, PCIDevice, config);
@@ -1179,7 +1172,10 @@  PCIBus *pci_find_bus(PCIBus *bus, int bus_num)
 
     /* try child bus */
     QLIST_FOREACH(sec, &bus->child, sibling) {
-        if (pci_bus_num(sec) <= bus_num && bus_num <= pci_sub_bus(sec)) {
+
+        if (!bus->parent_dev /* pci host bridge */
+            || (pci_bus_num(sec) <= bus_num &&
+                bus->parent_dev->config[PCI_SUBORDINATE_BUS])) {
             return pci_find_bus(sec, bus_num);
         }
     }