On Sunday 26 December 2021 23:13:11 Martin Mareš wrote: > Hi! > > > + else if (i < 7+6+4) > > + { > > + /* > > + * If kernel was compiled without CONFIG_PCI_IOV option then after > > + * the ROM line for configured bridge device (that which had set > > + * subordinary bus number to non-zero value) are four additional lines > > + * which describe resources behind bridge. For PCI-to-PCI bridges they > > + * are: IO, MEM, PREFMEM and empty. For CardBus bridges they are: IO0, > > + * IO1, MEM0 and MEM1. For unconfigured bridges and other devices > > + * there is no additional line after the ROM line. If kernel was > > + * compiled with CONFIG_PCI_IOV option then after the ROM line and > > + * before the first bridge resource line are six additional lines > > + * which describe IOV resources. Read all remaining lines in resource > > + * file and based on the number of remaining lines (0, 4, 6, 10) parse > > + * resources behind bridge. > > + */ > > + lines[i-7].flags = flags; > > + lines[i-7].base_addr = start; > > + lines[i-7].size = size; > > + } > > + } > > + if (i == 7+4 || i == 7+6+4) > > This looks crazy: is there any other way how to tell what the bridge entries mean? > Checking the number of entries looks very brittle. I do not know any other way. Just for reference, here is a link to the function resource_show() and DEVICE_COUNT_RESOURCE enum: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/drivers/pci/pci-sysfs.c?h=v5.15#n136 https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/include/linux/pci.h?h=v5.15#n94