[PATCH v7 4/7] PCI: pci_alloc_child_bus() return NULL if ->add_bus() returns -ENOLINK

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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@xxxxxxxxx>
---
 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




[Index of Archives]     [DMA Engine]     [Linux Coverity]     [Linux USB]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Greybus]

  Powered by Linux