--- ubuntu-gutsy.orig/arch/i386/pci/fixup.c 2008-04-09 15:17:23.000000000 +0100 +++ ubuntu-gutsy/arch/i386/pci/fixup.c 2008-04-09 15:20:05.000000000 +0100 @@ -9,6 +9,19 @@ #include "pci.h" +/* TJ: Added to work around duplicate bus-scan and subsequent PERC 2 controller failure + * See http://bugzilla.kernel.org/show_bug.cgi?id=10396 */ +static struct dmi_system_id __devinitdata i450nx_dmi_table[] = { + { + .ident = "Dell-PowerEdge-6300", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "Dell"), + DMI_MATCH(DMI_PRODUCT_NAME, "PowerEdge 6300"), + }, + }, + {} +}; + static void __devinit pci_fixup_i450nx(struct pci_dev *d) { /* @@ -17,6 +30,18 @@ int pxb, reg; u8 busno, suba, subb; + /* TJ: Added to work around duplicate bus-scan and subsequent Dell + * PERC 2 controller failure. + * See http://bugzilla.kernel.org/show_bug.cgi?id=10396 + * + * NOTE: A matching entry causes a return without *doing anything* + * - the opposite of this logic in other cases. + */ + if (dmi_check_system(i450nx_dmi_table)) { + DBG("i450NX PXB fix-up ignored - found %s\n", i450nx_dmi_table.ident); + return; /* doesn't apply to matched systems */ + } + printk(KERN_WARNING "PCI: Searching for i450NX host bridges on %s\n", pci_name(d)); reg = 0xd0; for(pxb=0; pxb<2; pxb++) {