diff options
author | Bjorn Helgaas <bhelgaas@google.com> | 2013-08-06 16:57:23 -0400 |
---|---|---|
committer | Bjorn Helgaas <bhelgaas@google.com> | 2013-08-06 16:57:23 -0400 |
commit | e3ec221b9370e964b9e001788bc68766469191a5 (patch) | |
tree | 9c9dff20a658f72ae731b45419fedce9b739498c | |
parent | cbe2bb4f2bc14876ab9e1729933a7453ded250d1 (diff) | |
parent | 2d1d66780ecd12c9518835303f5302fc5262d49b (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.c | 25 |
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) | |||
1300 | static int __init pci_bus_get_depth(struct pci_bus *bus) | 1300 | static 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 | } |