linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v2 4/4] PCI: Allow extend_bridge_window() to shrink resource if necessary
@ 2020-01-15 17:58 Nicholas Johnson
  2020-01-16 10:23 ` Mika Westerberg
  0 siblings, 1 reply; 2+ messages in thread
From: Nicholas Johnson @ 2020-01-15 17:58 UTC (permalink / raw)
  To: linux-kernel
  Cc: linux-pci, Bjorn Helgaas, Mika Westerberg,
	Benjamin Herrenschmidt, Logan Gunthorpe, Nicholas Johnson

Remove checks for resource size in extend_bridge_window(). This is
necessary to allow the pci_bus_distribute_available_resources() to
function when the kernel parameter pci=hpmemsize=nn[KMG] is used to
allocate resources. Because the kernel parameter sets the size of all
hotplug bridges to be the same, there are problems when nested hotplug
bridges are encountered. Fitting a downstream hotplug bridge with size X
and normal bridges with non-zero size Y into parent hotplug bridge with
size X is impossible, and hence the downstream hotplug bridge needs to
shrink to fit into its parent.

Add check for if bridge is extended or shrunken and reflect that in the
call to pci_dbg().

Do not change resource size if new size is zero (if we have run out of a
bridge window resource) to prevent the PCI resource assignment code from
attempting to assign a zero-sized resource. If this happens, we are
running out of resource space, anyway, so not shrinking the resource
will not deny space for other resources. This prevents the following
from happening:

pcieport 0000:07:04.0: can't enable device: BAR 13 [io  0x1000-0x0fff] not claimed

Signed-off-by: Nicholas Johnson <nicholas.johnson-opensource@outlook.com.au>
---
 drivers/pci/setup-bus.c | 16 ++++++++++++----
 1 file changed, 12 insertions(+), 4 deletions(-)

diff --git a/drivers/pci/setup-bus.c b/drivers/pci/setup-bus.c
index 50d14921a..074501a75 100644
--- a/drivers/pci/setup-bus.c
+++ b/drivers/pci/setup-bus.c
@@ -1836,16 +1836,24 @@ static void adjust_bridge_window(struct pci_dev *bridge, struct resource *res,
 				 struct list_head *add_list,
 				 resource_size_t new_size)
 {
-	resource_size_t add_size;
+	resource_size_t add_size, size = resource_size(res);
 
 	if (res->parent)
 		return;
 
-	if (resource_size(res) >= new_size)
+	if (!new_size)
 		return;
 
-	add_size = new_size - resource_size(res);
-	pci_dbg(bridge, "bridge window %pR extended by %pa\n", res, &add_size);
+	if (new_size > size) {
+		add_size = new_size - size;
+		pci_dbg(bridge, "bridge window %pR extended by %pa\n", res,
+			&add_size);
+	} else if (new_size < size) {
+		add_size = size - new_size;
+		pci_dbg(bridge, "bridge window %pR shrunken by %pa\n", res,
+			&add_size);
+	}
+
 	res->end = res->start + new_size - 1;
 	remove_from_list(add_list, res);
 }
-- 
2.25.0


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

* Re: [PATCH v2 4/4] PCI: Allow extend_bridge_window() to shrink resource if necessary
  2020-01-15 17:58 [PATCH v2 4/4] PCI: Allow extend_bridge_window() to shrink resource if necessary Nicholas Johnson
@ 2020-01-16 10:23 ` Mika Westerberg
  0 siblings, 0 replies; 2+ messages in thread
From: Mika Westerberg @ 2020-01-16 10:23 UTC (permalink / raw)
  To: Nicholas Johnson
  Cc: linux-kernel, linux-pci, Bjorn Helgaas, Benjamin Herrenschmidt,
	Logan Gunthorpe

On Wed, Jan 15, 2020 at 05:58:05PM +0000, Nicholas Johnson wrote:
> Remove checks for resource size in extend_bridge_window(). This is
> necessary to allow the pci_bus_distribute_available_resources() to
> function when the kernel parameter pci=hpmemsize=nn[KMG] is used to
> allocate resources. Because the kernel parameter sets the size of all
> hotplug bridges to be the same, there are problems when nested hotplug
> bridges are encountered. Fitting a downstream hotplug bridge with size X
> and normal bridges with non-zero size Y into parent hotplug bridge with
> size X is impossible, and hence the downstream hotplug bridge needs to
> shrink to fit into its parent.
> 
> Add check for if bridge is extended or shrunken and reflect that in the
> call to pci_dbg().
> 
> Do not change resource size if new size is zero (if we have run out of a
> bridge window resource) to prevent the PCI resource assignment code from
> attempting to assign a zero-sized resource. If this happens, we are
> running out of resource space, anyway, so not shrinking the resource
> will not deny space for other resources. This prevents the following
> from happening:
> 
> pcieport 0000:07:04.0: can't enable device: BAR 13 [io  0x1000-0x0fff] not claimed
> 
> Signed-off-by: Nicholas Johnson <nicholas.johnson-opensource@outlook.com.au>

Reviewed-by: Mika Westerberg <mika.westerberg@linux.intel.com>

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

end of thread, other threads:[~2020-01-16 10:23 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-01-15 17:58 [PATCH v2 4/4] PCI: Allow extend_bridge_window() to shrink resource if necessary Nicholas Johnson
2020-01-16 10:23 ` Mika Westerberg

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).