Make sure the PCI path doesn't point to itself. --- src/pci.c | 5 +++-- 1 files changed, 3 insertions(+), 2 deletions(-)
diff --git a/src/pci.c b/src/pci.c index 45f210d..944a393 100644 --- a/src/pci.c +++ b/src/pci.c @@ -194,7 +194,7 @@ pci_path_setup(void) PCIpaths = malloc_tmp(sizeof(*PCIpaths) * 256); if (!PCIpaths) return; - memset(PCIpaths, 0, sizeof(PCIpaths)); + memset(PCIpaths, 0, sizeof(*PCIpaths) * 256);
int roots = 0; int bdf, max; @@ -209,7 +209,8 @@ pci_path_setup(void) if (v == PCI_HEADER_TYPE_BRIDGE || v == PCI_HEADER_TYPE_CARDBUS) { v = pci_config_readl(bdf, PCI_PRIMARY_BUS); int childbus = (v >> 8) & 0xff; - PCIpaths[childbus] = bdf | PP_PCIBRIDGE; + if (childbus > bus) + PCIpaths[childbus] = bdf | PP_PCIBRIDGE; } } }