Re: [PATCH] PCI bus detection bug

Martin Mares (mj@ucw.cz)
Thu, 18 Feb 1999 22:36:39 +0100


Hello,

> The PCI code in Linux-2.2 doesn't seem to find peer busses very well,
> specifically when they are not numbered sequentially. I've seen this
> problem on a few different Compaq systems with hot-plug pci. The fix
> is rather trivial:
>
> --- linux/arch/i386/kernel/bios32.c.orig Thu Feb 18 00:45:56 1999
> +++ linux/arch/i386/kernel/bios32.c Thu Feb 18 00:46:11 1999
> @@ -985,8 +985,6 @@
> l == PCI_CLASS_BRIDGE_HOST)
> cnt++;
> }
> - if (cnt-- <= 0)
> - break;
> if (found) {
> printk("PCI: Discovered primary peer bus %02x\n", n);
> b = kmalloc(sizeof(*b), GFP_KERNEL);
>
> I'm a bit curious about this code. Although comments at the top of
> pcibios_fixup_peer_bridges seem to suggest that a lot of BIOSes will
> number busses using the first free value they can find (probably resulting
> in busses being numbered sequentially), the comments also seem to
> indicate that this behavior is not required. Yet this code seems to
> enforce sequentially numbered peer busses...

This "fix" breaks a lot of systems with partial PCI slot number decoding
and other nasties.

The primary problem is that there exists no reliable way how to detect
peer PCI busses since the chipset designers have screwed the peer bridges
completely.

Please download new alpha version of pciutils from
ftp://atrey.karlin.mff.cuni.cz/pub/linux/pci/alpha and send me results
of 'lspci -H1 -vvxM', I'll look at it. (It will possibly take a bit longer
for me to analyse it since I'm leaving for a week tomorrow, but I already
think I have some solution.)

Have a nice fortnight

-- 
Martin `MJ' Mares   <mj@ucw.cz>   http://atrey.karlin.mff.cuni.cz/~mj/
Faculty of Math and Physics, Charles University, Prague, Czech Rep., Earth
"Is there a life before death?"

- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.rutgers.edu Please read the FAQ at http://www.tux.org/lkml/