Yu Zhao wrote:
Kenji Kaneshige wrote:
Yu Zhao wrote:
For devices attached to the root bus, we can't trigger Secondary Bus
Reset because there is no bridge device associated with the bus. So
need to check bus->self again NULL first before using it.
Signed-off-by: Yu Zhao <yu.zhao@xxxxxxxxx>
---
drivers/pci/pci.c | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c
index 6c93af5..20351a9 100644
--- a/drivers/pci/pci.c
+++ b/drivers/pci/pci.c
@@ -2171,7 +2171,7 @@ static int pci_parent_bus_reset(struct pci_dev
*dev, int probe)
u16 ctrl;
struct pci_dev *pdev;
- if (dev->subordinate)
+ if (dev->subordinate || !dev->bus->self)
We should use pci_is_root_bus(dev->bus) instead.
Some devices (e.g. Virtual Function) might not have intermediate bridge.
So I prefer check the bus->self instead of bus->parent.
I understand the problem happens not only on the device
attached to the root bus. I think the if statement need
to be
if (dev->subordinate ||
!dev->bus->self || pci_is_root_bus(bus->self))
Thanks,
Kenji Kaneshige
--
To unsubscribe from this list: send the line "unsubscribe linux-pci" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html