Re: 2.3.3[78]: kernel oops in pci_fixup_compaq

From: Martin Mares (mj@suse.cz)
Date: Tue Jan 11 2000 - 17:41:10 EST


Hello,

> No, but it is an 8way machine, and to my knowledge, all 8way machines with
> the possible exception of the very early Hitachi machines use a
> combination of the Profusion chipset to allow 8 processors to be in the
> same box, and some Compaq North Bridge chips that do the hot plug PCI.
> The function that is oopsing is called specifically because your machine
> has those Compaq Hot Plug PCI chipset north bridge chips in it. Now, why
> it's oopsing is beyond me because I'm behind the 2.3 kernel series...

   Please try this patch.

                                Have a nice fortnight

-- 
Martin `MJ' Mares <mj@ucw.cz> <mj@suse.cz> http://atrey.karlin.mff.cuni.cz/~mj/
"while (*p++ = *q++);"   -- Dennis M. Ritchie

--- arch/i386/kernel/pci-pc.c.mj Tue Jan 11 23:37:47 2000 +++ arch/i386/kernel/pci-pc.c Tue Jan 11 23:37:55 2000 @@ -22,7 +22,8 @@ unsigned int pci_probe = PCI_PROBE_BIOS | PCI_PROBE_CONF1 | PCI_PROBE_CONF2; -static struct pci_bus *pci_root_bus; +static struct pci_bus *pcibios_root_bus; +static struct pci_ops *pcibios_bus_ops; /* * IRQ routing table provided by the BIOS @@ -794,9 +795,9 @@ static void __init pcibios_fixup_peer_bridges(void) { struct list_head *ln; - struct pci_bus *b = pci_root_bus; + struct pci_bus *b = pcibios_root_bus; int n, cnt=-1; - struct pci_ops *ops = pci_root_bus->ops; + struct pci_ops *ops = pcibios_bus_ops; #ifdef CONFIG_PCI_DIRECT /* @@ -876,9 +877,9 @@ pci_read_config_byte(d, reg++, &subb); DBG("i450NX PXB %d: %02x/%02x/%02x\n", pxb, busno, suba, subb); if (busno) - pci_scan_bus(busno, pci_root_bus->ops, NULL); /* Bus A */ + pci_scan_bus(busno, pcibios_bus_ops, NULL); /* Bus A */ if (suba < subb) - pci_scan_bus(suba+1, pci_root_bus->ops, NULL); /* Bus B */ + pci_scan_bus(suba+1, pcibios_bus_ops, NULL); /* Bus B */ } } @@ -891,7 +892,7 @@ u8 busno; pci_read_config_byte(d, 0x44, &busno); printk("PCI: RCC host bridge: secondary bus %02x\n", busno); - pci_scan_bus(busno, pci_root_bus->ops, NULL); + pci_scan_bus(busno, pcibios_bus_ops, NULL); } static void __init pci_fixup_compaq(struct pci_dev *d) @@ -903,7 +904,7 @@ u8 busno; pci_read_config_byte(d, 0xc8, &busno); printk("PCI: Compaq host bridge: secondary bus %02x\n", busno); - pci_scan_bus(busno, pci_root_bus->ops, NULL); + pci_scan_bus(busno, pcibios_bus_ops, NULL); } static void __init pci_fixup_umc_ide(struct pci_dev *d) @@ -1012,7 +1013,7 @@ * It might be a secondary bus, but in this case its parent is already * known (ascending bus order) and therefore pci_scan_bus returns immediately. */ - if (busmap[i] && pci_scan_bus(i, pci_root_bus->ops, NULL)) + if (busmap[i] && pci_scan_bus(i, pcibios_bus_ops, NULL)) printk("PCI: Discovered primary peer bus %02x [IRQ]\n", i); } @@ -1189,7 +1190,6 @@ { struct pci_ops *bios = NULL; struct pci_ops *dir = NULL; - struct pci_ops *ops; #ifdef CONFIG_PCI_BIOS if ((pci_probe & PCI_PROBE_BIOS) && ((bios = pci_find_bios()))) { @@ -1202,16 +1202,16 @@ dir = pci_check_direct(); #endif if (dir) - ops = dir; + pcibios_bus_ops = dir; else if (bios) - ops = bios; + pcibios_bus_ops = bios; else { printk("PCI: No PCI bus detected\n"); return; } printk("PCI: Probing PCI hardware\n"); - pci_root_bus = pci_scan_bus(0, ops, NULL); + pcibios_root_bus = pci_scan_bus(0, pcibios_bus_ops, NULL); pcibios_fixup_irqs(); if (pci_probe & PCI_PEER_FIXUP)

- 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/



This archive was generated by hypermail 2b29 : Sat Jan 15 2000 - 21:00:19 EST