Messages in this thread | | | Date | Thu, 18 Feb 1999 22:36:39 +0100 | From | Martin Mares <> | Subject | Re: [PATCH] PCI bus detection bug |
| |
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/
| |