From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fabian=20Gr=C3=BCnbichler?= Date: Mon, 2 Aug 2021 10:22:30 +0200 Subject: [PATCH] Revert "PCI: Coalesce host bridge contiguous apertures" MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This reverts commit c2ff8072deba40887560dc73dd2e558ec539ea09. was reverted upstream because of reports similar to Link: https://bugzilla.proxmox.com/show_bug.cgi?id=3552 Link: https://lore.kernel.org/r/20210709231529.GA3270116@roeck-us.net Signed-off-by: Fabian Grünbichler --- drivers/pci/probe.c | 49 ++++----------------------------------------- 1 file changed, 4 insertions(+), 45 deletions(-) diff --git a/drivers/pci/probe.c b/drivers/pci/probe.c index 04664d4fe4be..be51670572fa 100644 --- a/drivers/pci/probe.c +++ b/drivers/pci/probe.c @@ -19,7 +19,6 @@ #include #include #include -#include #include "pci.h" #define CARDBUS_LATENCY_TIMER 176 /* secondary latency timer */ @@ -875,30 +874,14 @@ static void pci_set_bus_msi_domain(struct pci_bus *bus) dev_set_msi_domain(&bus->dev, d); } -static int res_cmp(void *priv, struct list_head *a, struct list_head *b) -{ - struct resource_entry *entry1, *entry2; - - entry1 = container_of(a, struct resource_entry, node); - entry2 = container_of(b, struct resource_entry, node); - - if (entry1->res->flags != entry2->res->flags) - return entry1->res->flags > entry2->res->flags; - - if (entry1->offset != entry2->offset) - return entry1->offset > entry2->offset; - - return entry1->res->start > entry2->res->start; -} - static int pci_register_host_bridge(struct pci_host_bridge *bridge) { struct device *parent = bridge->dev.parent; - struct resource_entry *window, *next, *n; + struct resource_entry *window, *n; struct pci_bus *bus, *b; - resource_size_t offset, next_offset; + resource_size_t offset; LIST_HEAD(resources); - struct resource *res, *next_res; + struct resource *res; char addr[64], *fmt; const char *name; int err; @@ -976,35 +959,11 @@ static int pci_register_host_bridge(struct pci_host_bridge *bridge) if (nr_node_ids > 1 && pcibus_to_node(bus) == NUMA_NO_NODE) dev_warn(&bus->dev, "Unknown NUMA node; performance will be reduced\n"); - /* Sort and coalesce contiguous windows */ - list_sort(NULL, &resources, res_cmp); - resource_list_for_each_entry_safe(window, n, &resources) { - if (list_is_last(&window->node, &resources)) - break; - - next = list_next_entry(window, node); - offset = window->offset; - res = window->res; - next_offset = next->offset; - next_res = next->res; - - if (res->flags != next_res->flags || offset != next_offset) - continue; - - if (res->end + 1 == next_res->start) { - next_res->start = res->start; - res->flags = res->start = res->end = 0; - } - } - /* Add initial resources to the bus */ resource_list_for_each_entry_safe(window, n, &resources) { + list_move_tail(&window->node, &bridge->windows); offset = window->offset; res = window->res; - if (!res->end) - continue; - - list_move_tail(&window->node, &bridge->windows); if (res->flags & IORESOURCE_BUS) pci_bus_insert_busn_res(bus, bus->number, res->end);