aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBjorn Helgaas <bhelgaas@google.com>2013-08-06 16:57:23 -0400
committerBjorn Helgaas <bhelgaas@google.com>2013-08-06 16:57:23 -0400
commite3ec221b9370e964b9e001788bc68766469191a5 (patch)
tree9c9dff20a658f72ae731b45419fedce9b739498c
parentcbe2bb4f2bc14876ab9e1729933a7453ded250d1 (diff)
parent2d1d66780ecd12c9518835303f5302fc5262d49b (diff)
Merge branch 'pci/wei-resource-cleanups' into next
* pci/wei-resource-cleanups: PCI: Align bridge I/O windows as required by downstream devices & bridges PCI: Fix types in pbus_size_io() PCI: Add comments for pbus_size_mem() parameters PCI: Enumerate subordinate buses, not devices, in pci_bus_get_depth()
-rw-r--r--drivers/pci/setup-bus.c25
1 files changed, 11 insertions, 14 deletions
diff --git a/drivers/pci/setup-bus.c b/drivers/pci/setup-bus.c
index d254e2379533..8333c92c2027 100644
--- a/drivers/pci/setup-bus.c
+++ b/drivers/pci/setup-bus.c
@@ -747,14 +747,14 @@ static void pbus_size_io(struct pci_bus *bus, resource_size_t min_size,
747{ 747{
748 struct pci_dev *dev; 748 struct pci_dev *dev;
749 struct resource *b_res = find_free_bus_resource(bus, IORESOURCE_IO); 749 struct resource *b_res = find_free_bus_resource(bus, IORESOURCE_IO);
750 unsigned long size = 0, size0 = 0, size1 = 0; 750 resource_size_t size = 0, size0 = 0, size1 = 0;
751 resource_size_t children_add_size = 0; 751 resource_size_t children_add_size = 0;
752 resource_size_t min_align, io_align, align; 752 resource_size_t min_align, align;
753 753
754 if (!b_res) 754 if (!b_res)
755 return; 755 return;
756 756
757 io_align = min_align = window_alignment(bus, IORESOURCE_IO); 757 min_align = window_alignment(bus, IORESOURCE_IO);
758 list_for_each_entry(dev, &bus->devices, bus_list) { 758 list_for_each_entry(dev, &bus->devices, bus_list) {
759 int i; 759 int i;
760 760
@@ -781,9 +781,6 @@ static void pbus_size_io(struct pci_bus *bus, resource_size_t min_size,
781 } 781 }
782 } 782 }
783 783
784 if (min_align > io_align)
785 min_align = io_align;
786
787 size0 = calculate_iosize(size, min_size, size1, 784 size0 = calculate_iosize(size, min_size, size1,
788 resource_size(b_res), min_align); 785 resource_size(b_res), min_align);
789 if (children_add_size > add_size) 786 if (children_add_size > add_size)
@@ -807,8 +804,9 @@ static void pbus_size_io(struct pci_bus *bus, resource_size_t min_size,
807 add_to_list(realloc_head, bus->self, b_res, size1-size0, 804 add_to_list(realloc_head, bus->self, b_res, size1-size0,
808 min_align); 805 min_align);
809 dev_printk(KERN_DEBUG, &bus->self->dev, "bridge window " 806 dev_printk(KERN_DEBUG, &bus->self->dev, "bridge window "
810 "%pR to %pR add_size %lx\n", b_res, 807 "%pR to %pR add_size %llx\n", b_res,
811 &bus->busn_res, size1-size0); 808 &bus->busn_res,
809 (unsigned long long)size1-size0);
812 } 810 }
813} 811}
814 812
@@ -838,6 +836,8 @@ static inline resource_size_t calculate_mem_align(resource_size_t *aligns,
838 * pbus_size_mem() - size the memory window of a given bus 836 * pbus_size_mem() - size the memory window of a given bus
839 * 837 *
840 * @bus : the bus 838 * @bus : the bus
839 * @mask: mask the resource flag, then compare it with type
840 * @type: the type of free resource from bridge
841 * @min_size : the minimum memory window that must to be allocated 841 * @min_size : the minimum memory window that must to be allocated
842 * @add_size : additional optional memory window 842 * @add_size : additional optional memory window
843 * @realloc_head : track the additional memory window on this list 843 * @realloc_head : track the additional memory window on this list
@@ -1300,15 +1300,12 @@ static void pci_bus_dump_resources(struct pci_bus *bus)
1300static int __init pci_bus_get_depth(struct pci_bus *bus) 1300static int __init pci_bus_get_depth(struct pci_bus *bus)
1301{ 1301{
1302 int depth = 0; 1302 int depth = 0;
1303 struct pci_dev *dev; 1303 struct pci_bus *child_bus;
1304 1304
1305 list_for_each_entry(dev, &bus->devices, bus_list) { 1305 list_for_each_entry(child_bus, &bus->children, node){
1306 int ret; 1306 int ret;
1307 struct pci_bus *b = dev->subordinate;
1308 if (!b)
1309 continue;
1310 1307
1311 ret = pci_bus_get_depth(b); 1308 ret = pci_bus_get_depth(child_bus);
1312 if (ret + 1 > depth) 1309 if (ret + 1 > depth)
1313 depth = ret + 1; 1310 depth = ret + 1;
1314 } 1311 }