lkml.org 
[lkml]   [2012]   [Mar]   [12]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    From
    Date
    SubjectRe: [PATCH v2 07/37] PCI: pci_bus_size_bridges() should not size own bridge
    On Sat, Mar 10, 2012 at 12:00 AM, Yinghai Lu <yinghai@kernel.org> wrote:
    > During checking acpiphp code, found following sequence:
    >        pci_bus_size_bridges(bus);
    >        pci_bus_assign_resources(bus);
    >        pci_enable_bridges(bus);

    One of these lines is indented with tab, the others with spaces, which
    makes it not line up when using "git log". Try it sometime.

    > The problem is that when bus is not root bus, pci_bus_size_bridges would also size
    > own pci bridge bus->self if that bridge resource is not inserted before.
    > but later pci_bus_assign_resources will not allocate those size bridge res.
    >
    > So try make it less confusing, let it does not include self sizing.
    > and add with_self parameter info __pci_bus_size_bridge()

    You failed to make this less confusing. Adding words to function
    names, adding "__" prefixes, adding flags to say "include self" or not
    -- they all make things hard to read.

    > Fixes caller in pci hotplug componets.

    "components"

    >
    > Signed-off-by: Yinghai Lu <yinghai@kernel.org>
    > ---
    >  drivers/pci/hotplug/acpiphp_glue.c     |    2 +-
    >  drivers/pci/hotplug/cpci_hotplug_pci.c |    2 +-
    >  drivers/pci/hotplug/shpchp_pci.c       |    2 +-
    >  drivers/pci/setup-bus.c                |   24 +++++++++++++++---------
    >  include/linux/pci.h                    |    1 +
    >  5 files changed, 19 insertions(+), 12 deletions(-)
    >
    > diff --git a/drivers/pci/hotplug/acpiphp_glue.c b/drivers/pci/hotplug/acpiphp_glue.c
    > index 806c44f..10b2122 100644
    > --- a/drivers/pci/hotplug/acpiphp_glue.c
    > +++ b/drivers/pci/hotplug/acpiphp_glue.c
    > @@ -816,7 +816,7 @@ static int __ref enable_device(struct acpiphp_slot *slot)
    >                            dev->hdr_type == PCI_HEADER_TYPE_CARDBUS) {
    >                                max = pci_scan_bridge(bus, dev, max, pass);
    >                                if (pass && dev->subordinate)
    > -                                       pci_bus_size_bridges(dev->subordinate);
    > +                                       pci_bus_size_bridges_with_self(dev->subordinate);
    >                        }
    >                }
    >        }
    > diff --git a/drivers/pci/hotplug/cpci_hotplug_pci.c b/drivers/pci/hotplug/cpci_hotplug_pci.c
    > index ae853cc..4ef80ad 100644
    > --- a/drivers/pci/hotplug/cpci_hotplug_pci.c
    > +++ b/drivers/pci/hotplug/cpci_hotplug_pci.c
    > @@ -313,7 +313,7 @@ int __ref cpci_configure_slot(struct slot *slot)
    >                                continue;
    >                        }
    >                        child->subordinate = pci_do_scan_bus(child);
    > -                       pci_bus_size_bridges(child);
    > +                       pci_bus_size_bridges_with_self(child);
    >                }
    >                pci_dev_put(dev);
    >        }
    > diff --git a/drivers/pci/hotplug/shpchp_pci.c b/drivers/pci/hotplug/shpchp_pci.c
    > index df7e4bf..d92807b 100644
    > --- a/drivers/pci/hotplug/shpchp_pci.c
    > +++ b/drivers/pci/hotplug/shpchp_pci.c
    > @@ -85,7 +85,7 @@ int __ref shpchp_configure_device(struct slot *p_slot)
    >                                continue;
    >                        }
    >                        child->subordinate = pci_do_scan_bus(child);
    > -                       pci_bus_size_bridges(child);
    > +                       pci_bus_size_bridges_with_self(child);
    >                }
    >                pci_configure_slot(dev);
    >                pci_dev_put(dev);
    > diff --git a/drivers/pci/setup-bus.c b/drivers/pci/setup-bus.c
    > index f35a679..ec2026c 100644
    > --- a/drivers/pci/setup-bus.c
    > +++ b/drivers/pci/setup-bus.c
    > @@ -982,8 +982,8 @@ handle_done:
    >        ;
    >  }
    >
    > -void __ref __pci_bus_size_bridges(struct pci_bus *bus,
    > -                       struct list_head *realloc_head)
    > +static void __ref __pci_bus_size_bridges(struct pci_bus *bus,
    > +                       struct list_head *realloc_head, bool with_self)
    >  {
    >        struct pci_dev *dev;
    >        unsigned long mask, prefmask;
    > @@ -1001,13 +1001,13 @@ void __ref __pci_bus_size_bridges(struct pci_bus *bus,
    >
    >                case PCI_CLASS_BRIDGE_PCI:
    >                default:
    > -                       __pci_bus_size_bridges(b, realloc_head);
    > +                       __pci_bus_size_bridges(b, realloc_head, true);
    >                        break;
    >                }
    >        }
    >
    > -       /* The root bus? */
    > -       if (!bus->self)
    > +       /* Is root bus or not wanted? */
    > +       if (!bus->self || !with_self)
    >                return;
    >
    >        switch (bus->self->class >> 8) {
    > @@ -1047,9 +1047,15 @@ void __ref __pci_bus_size_bridges(struct pci_bus *bus,
    >        }
    >  }
    >
    > +void __ref pci_bus_size_bridges_with_self(struct pci_bus *bus)
    > +{
    > +       __pci_bus_size_bridges(bus, NULL, true);
    > +}
    > +EXPORT_SYMBOL(pci_bus_size_bridges_with_self);
    > +
    >  void __ref pci_bus_size_bridges(struct pci_bus *bus)
    >  {
    > -       __pci_bus_size_bridges(bus, NULL);
    > +       __pci_bus_size_bridges(bus, NULL, false);
    >  }
    >  EXPORT_SYMBOL(pci_bus_size_bridges);
    >
    > @@ -1362,7 +1368,7 @@ again:
    >        /* Depth first, calculate sizes and alignments of all
    >           subordinate buses. */
    >        list_for_each_entry(bus, &pci_root_buses, node)
    > -               __pci_bus_size_bridges(bus, add_list);
    > +               __pci_bus_size_bridges(bus, add_list, false);
    >
    >        /* Depth last, allocate resources and update the hardware. */
    >        list_for_each_entry(bus, &pci_root_buses, node)
    > @@ -1439,7 +1445,7 @@ void pci_assign_unassigned_bridge_resources(struct pci_dev *bridge)
    >                                  IORESOURCE_PREFETCH;
    >
    >  again:
    > -       __pci_bus_size_bridges(parent, &add_list);
    > +       __pci_bus_size_bridges(parent, &add_list, true);
    >        __pci_bridge_assign_resources(bridge, &add_list, &fail_head);
    >        BUG_ON(!list_empty(&add_list));
    >        tried_times++;
    > @@ -1500,7 +1506,7 @@ void pci_assign_unassigned_bus_resources(struct pci_bus *bus)
    >                    dev->hdr_type == PCI_HEADER_TYPE_CARDBUS)
    >                        if (dev->subordinate)
    >                                __pci_bus_size_bridges(dev->subordinate,
    > -                                                        &add_list);
    > +                                                &add_list, true);
    >        up_read(&pci_bus_sem);
    >        __pci_bus_assign_resources(bus, &add_list, NULL);
    >        BUG_ON(!list_empty(&add_list));
    > diff --git a/include/linux/pci.h b/include/linux/pci.h
    > index 634bbf5..87dceca 100644
    > --- a/include/linux/pci.h
    > +++ b/include/linux/pci.h
    > @@ -906,6 +906,7 @@ int pci_vpd_truncate(struct pci_dev *dev, size_t size);
    >  resource_size_t pcibios_retrieve_fw_addr(struct pci_dev *dev, int idx);
    >  void pci_bus_assign_resources(const struct pci_bus *bus);
    >  void pci_bus_size_bridges(struct pci_bus *bus);
    > +void pci_bus_size_bridges_with_self(struct pci_bus *bus);
    >  int pci_claim_resource(struct pci_dev *, int);
    >  void pci_assign_unassigned_resources(void);
    >  void pci_assign_unassigned_bridge_resources(struct pci_dev *bridge);
    > --
    > 1.7.7
    >
    --
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/

    \
     
     \ /
      Last update: 2012-03-13 03:51    [W:0.039 / U:0.080 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site