[PATCH stable] x86 PCI: call dmi_check_pciprobe()

From: Matt Domsch
Date: Mon May 05 2008 - 23:00:18 EST


This is a backport of the noted commit which is in 2.6.26-rc1
now. This is necessary to enable pci=bfsort automatically on a number
of Dell and HP servers, as well as pci=assign-busses for a few other
systems, which was broken between 2.6.22 and 2.6.23.

commit 0df18ff366853cdf31e5238764ec5c63e6b5a398
Author: Yinghai Lu <yhlu.kernel@xxxxxxxxx>
Date: Mon Apr 14 15:40:37 2008 -0700

x86 PCI: call dmi_check_pciprobe()

this change:

| commit 08f1c192c3c32797068bfe97738babb3295bbf42
| Author: Muli Ben-Yehuda <muli@xxxxxxxxxx>
| Date: Sun Jul 22 00:23:39 2007 +0300
|
| x86-64: introduce struct pci_sysdata to facilitate sharing of ->sysdata
|
| This patch introduces struct pci_sysdata to x86 and x86-64, and
| converts the existing two users (NUMA, Calgary) to use it.
|
| This lays the groundwork for having other users of sysdata, such as
| the PCI domains work.
|
| The Calgary bits are tested, the NUMA bits just look ok.

replaces pcibios_scan_root with pci_scan_bus_parented...

but in pcibios_scan_root we have a DMI check:

dmi_check_system(pciprobe_dmi_table);

when when have several peer root buses this could be called multiple
times (which is bad), so move that call to pci_access_init().

Signed-off-by: Yinghai Lu <yhlu.kernel@xxxxxxxxx>
Signed-off-by: Ingo Molnar <mingo@xxxxxxx>
Signed-off-by: Thomas Gleixner <tglx@xxxxxxxxxxxxx>
Signed-off-by: Jesse Barnes <jbarnes@xxxxxxxxxxxxxxxx>


Signed-off-by: Matt Domsch <Matt_Domsch@xxxxxxxx>

--
Matt Domsch
Linux Technology Strategist, Dell Office of the CTO
linux.dell.com & www.dell.com/linux

diff -urNp --exclude-from=/home/mdomsch/excludes --minimal linux-2.6.25.1.orig/arch/x86/pci/common.c linux-2.6.25.1/arch/x86/pci/common.c
--- linux-2.6.25.1.orig/arch/x86/pci/common.c 2008-05-01 16:45:25.000000000 -0500
+++ linux-2.6.25.1/arch/x86/pci/common.c 2008-05-05 20:49:52.000000000 -0500
@@ -372,13 +372,16 @@ static struct dmi_system_id __devinitdat
{}
};

+void __init dmi_check_pciprobe(void)
+{
+ dmi_check_system(pciprobe_dmi_table);
+}
+
struct pci_bus * __devinit pcibios_scan_root(int busnum)
{
struct pci_bus *bus = NULL;
struct pci_sysdata *sd;

- dmi_check_system(pciprobe_dmi_table);
-
while ((bus = pci_find_next_bus(bus)) != NULL) {
if (bus->number == busnum) {
/* Already scanned */
diff -urNp --exclude-from=/home/mdomsch/excludes --minimal linux-2.6.25.1.orig/arch/x86/pci/init.c linux-2.6.25.1/arch/x86/pci/init.c
--- linux-2.6.25.1.orig/arch/x86/pci/init.c 2008-05-01 16:45:25.000000000 -0500
+++ linux-2.6.25.1/arch/x86/pci/init.c 2008-05-05 20:51:02.000000000 -0500
@@ -32,6 +32,8 @@ static __init int pci_access_init(void)
printk(KERN_ERR
"PCI: Fatal: No config space access function found\n");

+ dmi_check_pciprobe();
+
return 0;
}
arch_initcall(pci_access_init);
diff -urNp --exclude-from=/home/mdomsch/excludes --minimal linux-2.6.25.1.orig/arch/x86/pci/pci.h linux-2.6.25.1/arch/x86/pci/pci.h
--- linux-2.6.25.1.orig/arch/x86/pci/pci.h 2008-05-01 16:45:25.000000000 -0500
+++ linux-2.6.25.1/arch/x86/pci/pci.h 2008-05-05 20:50:29.000000000 -0500
@@ -39,6 +39,8 @@ enum pci_bf_sort_state {
pci_dmi_bf,
};

+extern void __init dmi_check_pciprobe(void);
+
/* pci-i386.c */

extern unsigned int pcibios_max_latency;
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/