linux-pci.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] PCI: Fix pci_claim_bridge_resource() resource claiming
@ 2015-09-10  9:33 Lorenzo Pieralisi
  2015-09-18 22:30 ` Bjorn Helgaas
  0 siblings, 1 reply; 5+ messages in thread
From: Lorenzo Pieralisi @ 2015-09-10  9:33 UTC (permalink / raw)
  To: linux-pci; +Cc: Bjorn Helgaas, Yinghai Lu, lorenzo.pieralisi

Commit 8505e729a2f6eb ("PCI: Add pci_claim_bridge_resource() to clip
window if necessary") introduced a new API to claim bridge resources.
pci_claim_bridge_resource() tries to claim a bridge resource, and if
the claiming fails the function tries to clip the resource to make
it fit within the parent resource window.
If the clipping succeeds the bridge aperture is set-up accordingly
and pci_claim_bridge_resource() tries to claim the resource again.

Commit c770cb4cb505 ("PCI: Mark invalid BARs as unassigned") added
code that sets the IORESOURCE_UNSET flag on claiming failure.

This means that the second resource claiming after window clipping will
always fail, since the resource flags contain IORESOURCE_UNSET,
previously set on failure by pci_claim_resource(), so the subsequent
pci_claim_resource() call ends up spitting a log message and return
failure with no chance whatsoever to succeed.

This patch clears the IORESOURCE_UNSET in the bridge resource flags
after clipping the bridge window successfully, so that the subsequent
pci_claim_resource() has a chance to succeed.

Fixes: c770cb4cb505 ("PCI: Mark invalid BARs as unassigned")
Signed-off-by: Yinghai Lu <yinghai@kernel.org>
Signed-off-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
Cc: Bjorn Helgaas <bhelgaas@google.com>
Cc: <stable@vger.kernel.org> # 4.1+
---
 drivers/pci/setup-bus.c | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/drivers/pci/setup-bus.c b/drivers/pci/setup-bus.c
index 508cc56..6de55d0 100644
--- a/drivers/pci/setup-bus.c
+++ b/drivers/pci/setup-bus.c
@@ -733,6 +733,13 @@ int pci_claim_bridge_resource(struct pci_dev *bridge, int i)
 		return -EINVAL;
 	}
 
+	/*
+	 * Clear the IORESOURCE_UNSET flag set by the previous
+	 * pci_claim_resource() failure so that the resource
+	 * claiming can actually be carried out
+	 */
+	bridge->resource[i].flags &= ~IORESOURCE_UNSET;
+
 	if (pci_claim_resource(bridge, i) == 0)
 		return 0;	/* claimed a smaller window */
 
-- 
2.2.1


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

end of thread, other threads:[~2015-09-21  9:57 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-09-10  9:33 [PATCH] PCI: Fix pci_claim_bridge_resource() resource claiming Lorenzo Pieralisi
2015-09-18 22:30 ` Bjorn Helgaas
2015-09-19  5:27   ` Yinghai Lu
2015-09-21  1:32   ` Yinghai Lu
2015-09-21  9:58   ` Lorenzo Pieralisi

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).