Message ID | 20190622210310.180905-2-helgaas@kernel.org (mailing list archive) |
---|---|
State | Mainlined, archived |
Commit | 5c6bcc344b18dfb3b0ddcca6c26f6858879f73bf |
Headers | show |
Series | PCI: Simplify pci_bus_distribute_available_resources() | expand |
On Sat, Jun 22, 2019 at 04:03:10PM -0500, Bjorn Helgaas wrote: > From: Bjorn Helgaas <bhelgaas@google.com> > > Reorder pci_bus_distribute_available_resources() to group related code > together. No functional change intended. > > Link: https://lore.kernel.org/r/PS2P216MB0642C7A485649D2D787A1C6F80000@PS2P216MB0642.KORP216.PROD.OUTLOOK.COM > Based-on-patch-by: Nicholas Johnson <nicholas.johnson-opensource@outlook.com.au> > [bhelgaas: extracted from larger patch] > Signed-off-by: Bjorn Helgaas <bhelgaas@google.com> Reviewed-by: Mika Westerberg <mika.westerberg@linux.intel.com>
On 2019-06-22 3:03 p.m., Bjorn Helgaas wrote: > From: Bjorn Helgaas <bhelgaas@google.com> > > Reorder pci_bus_distribute_available_resources() to group related code > together. No functional change intended. > > Link: https://lore.kernel.org/r/PS2P216MB0642C7A485649D2D787A1C6F80000@PS2P216MB0642.KORP216.PROD.OUTLOOK.COM > Based-on-patch-by: Nicholas Johnson <nicholas.johnson-opensource@outlook.com.au> > [bhelgaas: extracted from larger patch] > Signed-off-by: Bjorn Helgaas <bhelgaas@google.com> Looks correct to me: Reviewed-by: Logan Gunthorpe <logang@deltatee.com> > --- > > The original order was: > > 1) remaining_io = available_io > > 2) for_each_pci_bridge(dev, bus) > # count hotplug_bridges, normal_bridges > > 3) for_each_pci_bridge(dev, bus) > if (!dev->is_hotplug_bridge) > # reduce remaining_io by dev window > > 4) if (hotplug_bridges + normal_bridges == 1) > # distribute available_io to the single bridge > # return > > 5) for_each_pci_bridge(dev, bus) > # distribute remaining_io to hotplug bridges > > Blocks 2 and 4 don't require remaining_io, so do them first. Blocks 1, 3, > 5 deal with remaining_io, so group them together. > --- > drivers/pci/setup-bus.c | 50 ++++++++++++++++++++--------------------- > 1 file changed, 25 insertions(+), 25 deletions(-) > > diff --git a/drivers/pci/setup-bus.c b/drivers/pci/setup-bus.c > index 0cdd5ff389de..af28af898e42 100644 > --- a/drivers/pci/setup-bus.c > +++ b/drivers/pci/setup-bus.c > @@ -1860,16 +1860,6 @@ static void pci_bus_distribute_available_resources(struct pci_bus *bus, > extend_bridge_window(bridge, mmio_pref_res, add_list, > available_mmio_pref); > > - /* > - * Calculate the total amount of extra resource space we can > - * pass to bridges below this one. This is basically the > - * extra space reduced by the minimal required space for the > - * non-hotplug bridges. > - */ > - remaining_io = available_io; > - remaining_mmio = available_mmio; > - remaining_mmio_pref = available_mmio_pref; > - > /* > * Calculate how many hotplug bridges and normal bridges there > * are on this bus. We will distribute the additional available > @@ -1882,6 +1872,31 @@ static void pci_bus_distribute_available_resources(struct pci_bus *bus, > normal_bridges++; > } > > + /* > + * There is only one bridge on the bus so it gets all available > + * resources which it can then distribute to the possible hotplug > + * bridges below. > + */ > + if (hotplug_bridges + normal_bridges == 1) { > + dev = list_first_entry(&bus->devices, struct pci_dev, bus_list); > + if (dev->subordinate) { > + pci_bus_distribute_available_resources(dev->subordinate, > + add_list, available_io, available_mmio, > + available_mmio_pref); > + } > + return; > + } > + > + /* > + * Calculate the total amount of extra resource space we can > + * pass to bridges below this one. This is basically the > + * extra space reduced by the minimal required space for the > + * non-hotplug bridges. > + */ > + remaining_io = available_io; > + remaining_mmio = available_mmio; > + remaining_mmio_pref = available_mmio_pref; > + > for_each_pci_bridge(dev, bus) { > const struct resource *res; > > @@ -1905,21 +1920,6 @@ static void pci_bus_distribute_available_resources(struct pci_bus *bus, > remaining_mmio_pref -= resource_size(res); > } > > - /* > - * There is only one bridge on the bus so it gets all available > - * resources which it can then distribute to the possible hotplug > - * bridges below. > - */ > - if (hotplug_bridges + normal_bridges == 1) { > - dev = list_first_entry(&bus->devices, struct pci_dev, bus_list); > - if (dev->subordinate) { > - pci_bus_distribute_available_resources(dev->subordinate, > - add_list, available_io, available_mmio, > - available_mmio_pref); > - } > - return; > - } > - > /* > * Go over devices on this bus and distribute the remaining > * resource space between hotplug bridges. >
diff --git a/drivers/pci/setup-bus.c b/drivers/pci/setup-bus.c index 0cdd5ff389de..af28af898e42 100644 --- a/drivers/pci/setup-bus.c +++ b/drivers/pci/setup-bus.c @@ -1860,16 +1860,6 @@ static void pci_bus_distribute_available_resources(struct pci_bus *bus, extend_bridge_window(bridge, mmio_pref_res, add_list, available_mmio_pref); - /* - * Calculate the total amount of extra resource space we can - * pass to bridges below this one. This is basically the - * extra space reduced by the minimal required space for the - * non-hotplug bridges. - */ - remaining_io = available_io; - remaining_mmio = available_mmio; - remaining_mmio_pref = available_mmio_pref; - /* * Calculate how many hotplug bridges and normal bridges there * are on this bus. We will distribute the additional available @@ -1882,6 +1872,31 @@ static void pci_bus_distribute_available_resources(struct pci_bus *bus, normal_bridges++; } + /* + * There is only one bridge on the bus so it gets all available + * resources which it can then distribute to the possible hotplug + * bridges below. + */ + if (hotplug_bridges + normal_bridges == 1) { + dev = list_first_entry(&bus->devices, struct pci_dev, bus_list); + if (dev->subordinate) { + pci_bus_distribute_available_resources(dev->subordinate, + add_list, available_io, available_mmio, + available_mmio_pref); + } + return; + } + + /* + * Calculate the total amount of extra resource space we can + * pass to bridges below this one. This is basically the + * extra space reduced by the minimal required space for the + * non-hotplug bridges. + */ + remaining_io = available_io; + remaining_mmio = available_mmio; + remaining_mmio_pref = available_mmio_pref; + for_each_pci_bridge(dev, bus) { const struct resource *res; @@ -1905,21 +1920,6 @@ static void pci_bus_distribute_available_resources(struct pci_bus *bus, remaining_mmio_pref -= resource_size(res); } - /* - * There is only one bridge on the bus so it gets all available - * resources which it can then distribute to the possible hotplug - * bridges below. - */ - if (hotplug_bridges + normal_bridges == 1) { - dev = list_first_entry(&bus->devices, struct pci_dev, bus_list); - if (dev->subordinate) { - pci_bus_distribute_available_resources(dev->subordinate, - add_list, available_io, available_mmio, - available_mmio_pref); - } - return; - } - /* * Go over devices on this bus and distribute the remaining * resource space between hotplug bridges.