[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <20211103184939.45263-5-jim2101024@gmail.com>
Date: Wed, 3 Nov 2021 14:49:34 -0400
From: Jim Quinlan <jim2101024@...il.com>
To: linux-pci@...r.kernel.org,
Nicolas Saenz Julienne <nsaenz@...nel.org>,
Rob Herring <robh@...nel.org>, Mark Brown <broonie@...nel.org>,
bcm-kernel-feedback-list@...adcom.com, jim2101024@...il.com,
james.quinlan@...adcom.com
Cc: Bjorn Helgaas <bhelgaas@...gle.com>,
linux-kernel@...r.kernel.org (open list)
Subject: [PATCH v7 4/7] PCI: pci_alloc_child_bus() return NULL if ->add_bus() returns -ENOLINK
Currently, if the call to the pci_ops add_bus() method returns an error, a
WARNING and dev_err() occurs. We keep this behavior for all errors except
-ENOLINK; for -ENOLINK we want to skip the WARNING and immediately return
NULL. The argument for this case is that one does not want to continue
enumerating if pcie-link has not been established. The real reason is that
without doing this the pcie-brcmstb.c driver panics when the dev/id is
read, as this controller panics on such accesses rather than returning
0xffffffff.
It appears that there are only a few uses of the pci_ops add_bus() method
in the kernel and none of them currently return -ENOLINK so it should be
safe to do this.
Signed-off-by: Jim Quinlan <jim2101024@...il.com>
---
drivers/pci/probe.c | 3 +++
1 file changed, 3 insertions(+)
diff --git a/drivers/pci/probe.c b/drivers/pci/probe.c
index d9fc02a71baa..fdc3f42634b7 100644
--- a/drivers/pci/probe.c
+++ b/drivers/pci/probe.c
@@ -1122,6 +1122,9 @@ static struct pci_bus *pci_alloc_child_bus(struct pci_bus *parent,
if (child->ops->add_bus) {
ret = child->ops->add_bus(child);
+ /* Don't return the child if w/o pcie link-up */
+ if (ret == -ENOLINK)
+ return NULL;
if (WARN_ON(ret < 0))
dev_err(&child->dev, "failed to add bus: %d\n", ret);
}
--
2.17.1
Powered by blists - more mailing lists