public inbox for pve-devel@lists.proxmox.com
 help / color / mirror / Atom feed
* [pve-devel] [PATCH kernel] fix #3552: cherry-pick PCI probe fixes
@ 2021-08-12 12:50 Fabian Grünbichler
  2021-08-26 16:26 ` [pve-devel] applied: " Thomas Lamprecht
  0 siblings, 1 reply; 2+ messages in thread
From: Fabian Grünbichler @ 2021-08-12 12:50 UTC (permalink / raw)
  To: pve-devel

breaking some NVME setups. these should be picked up by one of the next
Ubuntu kernel releases, since both the breaking change and the fix are
authored by Canonical devs.

Signed-off-by: Fabian Grünbichler <f.gruenbichler@proxmox.com>
---
apply before pulling in next Ubuntu tag in case it is not contained

 ...sce-host-bridge-contiguous-apertures.patch | 102 ++++++++++++++++
 ...I-Coalesce-host-bridge-contiguous-ap.patch | 111 ++++++++++++++++++
 2 files changed, 213 insertions(+)
 create mode 100644 patches/kernel/0008-Revert-PCI-Coalesce-host-bridge-contiguous-apertures.patch
 create mode 100644 patches/kernel/0009-PCI-Reinstate-PCI-Coalesce-host-bridge-contiguous-ap.patch

diff --git a/patches/kernel/0008-Revert-PCI-Coalesce-host-bridge-contiguous-apertures.patch b/patches/kernel/0008-Revert-PCI-Coalesce-host-bridge-contiguous-apertures.patch
new file mode 100644
index 0000000..a3eb9a7
--- /dev/null
+++ b/patches/kernel/0008-Revert-PCI-Coalesce-host-bridge-contiguous-apertures.patch
@@ -0,0 +1,102 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Fabian=20Gr=C3=BCnbichler?= <f.gruenbichler@proxmox.com>
+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 <f.gruenbichler@proxmox.com>
+---
+ 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 <linux/hypervisor.h>
+ #include <linux/irqdomain.h>
+ #include <linux/pm_runtime.h>
+-#include <linux/list_sort.h>
+ #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);
diff --git a/patches/kernel/0009-PCI-Reinstate-PCI-Coalesce-host-bridge-contiguous-ap.patch b/patches/kernel/0009-PCI-Reinstate-PCI-Coalesce-host-bridge-contiguous-ap.patch
new file mode 100644
index 0000000..de41df8
--- /dev/null
+++ b/patches/kernel/0009-PCI-Reinstate-PCI-Coalesce-host-bridge-contiguous-ap.patch
@@ -0,0 +1,111 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From: Kai-Heng Feng <kai.heng.feng@canonical.com>
+Date: Tue, 13 Jul 2021 20:50:07 +0800
+Subject: [PATCH] PCI: Reinstate "PCI: Coalesce host bridge contiguous
+ apertures"
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Built-in graphics on HP EliteDesk 805 G6 doesn't work because graphics
+can't get the BAR it needs:
+  pci_bus 0000:00: root bus resource [mem 0x10020200000-0x100303fffff window]
+  pci_bus 0000:00: root bus resource [mem 0x10030400000-0x100401fffff window]
+
+  pci 0000:00:08.1:   bridge window [mem 0xd2000000-0xd23fffff]
+  pci 0000:00:08.1:   bridge window [mem 0x10030000000-0x100401fffff 64bit pref]
+  pci 0000:00:08.1: can't claim BAR 15 [mem 0x10030000000-0x100401fffff 64bit pref]: no compatible bridge window
+  pci 0000:00:08.1: [mem 0x10030000000-0x100401fffff 64bit pref] clipped to [mem 0x10030000000-0x100303fffff 64bit pref]
+  pci 0000:00:08.1:   bridge window [mem 0x10030000000-0x100303fffff 64bit pref]
+  pci 0000:07:00.0: can't claim BAR 0 [mem 0x10030000000-0x1003fffffff 64bit pref]: no compatible bridge window
+  pci 0000:07:00.0: can't claim BAR 2 [mem 0x10040000000-0x100401fffff 64bit pref]: no compatible bridge window
+
+However, the root bus has two contiguous apertures that can contain the
+child resource requested.
+
+Coalesce contiguous apertures so we can allocate from the entire contiguous
+region.
+
+This is the second take of commit 65db04053efe ("PCI: Coalesce host
+bridge contiguous apertures"). The original approach sorts the apertures
+by address, but that makes NVMe stop working on QEMU ppc:sam460ex:
+  PCI host bridge to bus 0002:00
+  pci_bus 0002:00: root bus resource [io  0x0000-0xffff]
+  pci_bus 0002:00: root bus resource [mem 0xd80000000-0xdffffffff] (bus address [0x80000000-0xffffffff])
+  pci_bus 0002:00: root bus resource [mem 0xc0ee00000-0xc0eefffff] (bus address [0x00000000-0x000fffff])
+
+After the offending commit:
+  PCI host bridge to bus 0002:00
+  pci_bus 0002:00: root bus resource [io  0x0000-0xffff]
+  pci_bus 0002:00: root bus resource [mem 0xc0ee00000-0xc0eefffff] (bus address [0x00000000-0x000fffff])
+  pci_bus 0002:00: root bus resource [mem 0xd80000000-0xdffffffff] (bus address [0x80000000-0xffffffff])
+
+Since the apertures on HP EliteDesk 805 G6 are already in ascending
+order, doing a precautious sorting is not necessary.
+
+Remove the sorting part to avoid the regression on ppc:sam460ex.
+
+Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=212013
+Cc: Guenter Roeck <linux@roeck-us.net>
+Suggested-by: Bjorn Helgaas <bhelgaas@google.com>
+Signed-off-by: Kai-Heng Feng <kai.heng.feng@canonical.com>
+Signed-off-by: Fabian Grünbichler <f.gruenbichler@proxmox.com>
+---
+ drivers/pci/probe.c | 31 +++++++++++++++++++++++++++----
+ 1 file changed, 27 insertions(+), 4 deletions(-)
+
+diff --git a/drivers/pci/probe.c b/drivers/pci/probe.c
+index be51670572fa..133f5d2b189d 100644
+--- a/drivers/pci/probe.c
++++ b/drivers/pci/probe.c
+@@ -877,11 +877,11 @@ static void pci_set_bus_msi_domain(struct pci_bus *bus)
+ static int pci_register_host_bridge(struct pci_host_bridge *bridge)
+ {
+ 	struct device *parent = bridge->dev.parent;
+-	struct resource_entry *window, *n;
++	struct resource_entry *window, *next, *n;
+ 	struct pci_bus *bus, *b;
+-	resource_size_t offset;
++	resource_size_t offset, next_offset;
+ 	LIST_HEAD(resources);
+-	struct resource *res;
++	struct resource *res, *next_res;
+ 	char addr[64], *fmt;
+ 	const char *name;
+ 	int err;
+@@ -959,11 +959,34 @@ 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");
+ 
++	/* Coalesce contiguous windows */
++	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);
-- 
2.30.2





^ permalink raw reply	[flat|nested] 2+ messages in thread

* [pve-devel] applied: Re: [PATCH kernel] fix #3552: cherry-pick PCI probe fixes
  2021-08-12 12:50 [pve-devel] [PATCH kernel] fix #3552: cherry-pick PCI probe fixes Fabian Grünbichler
@ 2021-08-26 16:26 ` Thomas Lamprecht
  0 siblings, 0 replies; 2+ messages in thread
From: Thomas Lamprecht @ 2021-08-26 16:26 UTC (permalink / raw)
  To: Proxmox VE development discussion, Fabian Grünbichler

On 12/08/2021 14:50, Fabian Grünbichler wrote:
> breaking some NVME setups. these should be picked up by one of the next
> Ubuntu kernel releases, since both the breaking change and the fix are
> authored by Canonical devs.
> 
> Signed-off-by: Fabian Grünbichler <f.gruenbichler@proxmox.com>
> ---
> apply before pulling in next Ubuntu tag in case it is not contained
> 

As our rebase script normally can handle those just fine I went for it to ensure
we do not forget them.

>  ...sce-host-bridge-contiguous-apertures.patch | 102 ++++++++++++++++
>  ...I-Coalesce-host-bridge-contiguous-ap.patch | 111 ++++++++++++++++++
>  2 files changed, 213 insertions(+)
>  create mode 100644 patches/kernel/0008-Revert-PCI-Coalesce-host-bridge-contiguous-apertures.patch
>  create mode 100644 patches/kernel/0009-PCI-Reinstate-PCI-Coalesce-host-bridge-contiguous-ap.patch
> 
>

applied, thanks!




^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2021-08-26 16:26 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-08-12 12:50 [pve-devel] [PATCH kernel] fix #3552: cherry-pick PCI probe fixes Fabian Grünbichler
2021-08-26 16:26 ` [pve-devel] applied: " Thomas Lamprecht

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
Service provided by Proxmox Server Solutions GmbH | Privacy | Legal