aboutsummaryrefslogtreecommitdiffstats
path: root/pci
diff options
context:
space:
mode:
authorGreg Kroah-Hartman <gregkh@suse.de>2006-03-15 16:09:21 -0800
committerGreg Kroah-Hartman <gregkh@suse.de>2006-03-15 16:09:21 -0800
commitb145c013148c2b86c6c077a7b8950b6d5e753510 (patch)
treefc597f10290cb0aecada3a6a378e0a1dbbf9ff50 /pci
parente5d80d56cbb9674181c3625fc3c9bcdbaa3fd5ec (diff)
downloadpatches-b145c013148c2b86c6c077a7b8950b6d5e753510.tar.gz
move pci domain patches to bad directory :(
Diffstat (limited to 'pci')
-rw-r--r--pci/pci-device-ensure-sysdata-initialised.patch167
-rw-r--r--pci/pci-fix-the-x86-pci-domain-support-fix.patch39
-rw-r--r--pci/pci-pci-cardbus-cards-hidden-needs-pci-assign-busses-to-fix.patch3
-rw-r--r--pci/x86-pci-domain-support-a-humble-fix.patch40
-rw-r--r--pci/x86-pci-domain-support-struct-pci_sysdata.patch150
-rw-r--r--pci/x86-pci-domain-support-the-meat.patch116
6 files changed, 1 insertions, 514 deletions
diff --git a/pci/pci-device-ensure-sysdata-initialised.patch b/pci/pci-device-ensure-sysdata-initialised.patch
deleted file mode 100644
index 23e54087b7f7c..0000000000000
--- a/pci/pci-device-ensure-sysdata-initialised.patch
+++ /dev/null
@@ -1,167 +0,0 @@
-From akpm@osdl.org Fri Feb 3 01:46:42 2006
-Message-Id: <200602030946.k139kKQj002413@shell0.pdx.osdl.net>
-Subject: pci device: ensure sysdata initialised
-To: greg@kroah.com
-Cc: akpm@osdl.org, apw@shadowen.org, jgarzik@pobox.com, mbligh@aracnet.com
-From: akpm@osdl.org
-Date: Fri, 03 Feb 2006 01:46:01 -0800
-
-
-From: Andy Whitcroft <apw@shadowen.org>
-
-Ensure sysdata is valid for all busses.
-
-We have been seeing panic's on NUMA systems in pci_call_probe() in
-2.6.15-rc5-mm2 and -mm3. It seems that some changes have occured to the
-meaning of the 'sysdata' for a device such that it is no longer just an
-integer containing the node, it is now a structure containing the node and
-other data. However, it seems that we do not always initialise this
-sysdata before we probe the device.
-
-Below are three examples from a boot with this checked for. The attached
-patch ensures that we supply a valid sysdata for system busses. Currently
-we take no account of the node for this bus for no ACPI configured systems.
- This is unchanged from the -mm1 code.
-
- Intel(R) PRO/1000 Network Driver - version 6.1.16-k2
- Copyright (c) 1999-2005 Intel Corporation.
- pci_call_probe: starting drv<c03d4be0> dev<dfd16800> id<c03d4734>
- pci_call_probe: dev->bus<dfce6800>
- pci_call_probe: dev->bus->sysdata<00000000>
- pci_call_probe: node<-1>
- e1000: eth0: e1000_probe: Intel(R) PRO/1000 Network Connection
-
- pci_call_probe: starting drv<c03ef220> dev<dfd17400> id<c03eed00>
- pci_call_probe: dev->bus<dfce6800>
- pci_call_probe: dev->bus->sysdata<00000000>
- pci_call_probe: node<-1>
- Linux Tulip driver version 1.1.13 (December 15, 2004)
- input: AT Translated Set 2 keyboard as /class/input/input0
- tulip0: EEPROM default media type Autosense.
- tulip0: Index #0 - Media 10baseT (#0) described by a
- 21140 non-MII (0) block.
- tulip0: Index #1 - Media 100baseTx (#3) described by a
- 21140 non-MII (0) block.
- tulip0: Index #2 - Media 10baseT-FDX (#4) described by a
- 21140 non-MII (0) block.
- tulip0: Index #3 - Media 100baseTx-FDX (#5) described by a
- 21140 non-MII (0) block.
- eth1: Digital DS21140 Tulip rev 33 at 0001fc00,
- 00:00:BC:0F:08:96, IRQ 28.
-
- pci_call_probe: starting drv<c040a360> dev<dfd14400> id<c040a0fc>
- pci_call_probe: dev->bus<dfce6600>
- pci_call_probe: dev->bus->sysdata<dfffafa0>
- pci_call_probe: node<0>
- qla1280: QLA1040 found on PCI bus 0, dev 11
-
-Signed-off-by: Andy Whitcroft <apw@shadowen.org>
-Cc: Jeff Garzik <jgarzik@pobox.com>
-Cc: "Martin J. Bligh" <mbligh@mbligh.org>
-Signed-off-by: Andrew Morton <akpm@osdl.org>
-Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
----
- arch/i386/pci/common.c | 2 ++
- arch/i386/pci/fixup.c | 8 +++++---
- arch/i386/pci/legacy.c | 3 ++-
- arch/i386/pci/numa.c | 8 +++++---
- arch/i386/pci/visws.c | 4 ++--
- include/asm-i386/pci.h | 1 +
- 6 files changed, 17 insertions(+), 9 deletions(-)
-
---- gregkh-2.6.orig/arch/i386/pci/common.c
-+++ gregkh-2.6/arch/i386/pci/common.c
-@@ -29,6 +29,8 @@ unsigned long pirq_table_addr;
- struct pci_bus *pci_root_bus;
- struct pci_raw_ops *raw_pci_ops;
-
-+struct pci_sysdata pci_default_sysdata = { .node = -1 };
-+
- static int pci_read(struct pci_bus *bus, unsigned int devfn, int where, int size, u32 *value)
- {
- return raw_pci_ops->read(pci_domain_nr(bus), bus->number,
---- gregkh-2.6.orig/arch/i386/pci/fixup.c
-+++ gregkh-2.6/arch/i386/pci/fixup.c
-@@ -25,9 +25,11 @@ static void __devinit pci_fixup_i450nx(s
- 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_ops, NULL); /* Bus A */
-+ pci_scan_bus(busno, &pci_root_ops,
-+ &pci_default_sysdata); /* Bus A */
- if (suba < subb)
-- pci_scan_bus(suba+1, &pci_root_ops, NULL); /* Bus B */
-+ pci_scan_bus(suba+1, &pci_root_ops,
-+ &pci_default_sysdata); /* Bus B */
- }
- pcibios_last_bus = -1;
- }
-@@ -42,7 +44,7 @@ static void __devinit pci_fixup_i450gx(s
- u8 busno;
- pci_read_config_byte(d, 0x4a, &busno);
- printk(KERN_INFO "PCI: i440KX/GX host bridge %s: secondary bus %02x\n", pci_name(d), busno);
-- pci_scan_bus(busno, &pci_root_ops, NULL);
-+ pci_scan_bus(busno, &pci_root_ops, &pci_default_sysdata);
- pcibios_last_bus = -1;
- }
- DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82454GX, pci_fixup_i450gx);
---- gregkh-2.6.orig/arch/i386/pci/legacy.c
-+++ gregkh-2.6/arch/i386/pci/legacy.c
-@@ -26,7 +26,8 @@ static void __devinit pcibios_fixup_peer
- l != 0x0000 && l != 0xffff) {
- DBG("Found device at %02x:%02x [%04x]\n", n, devfn, l);
- printk(KERN_INFO "PCI: Discovered peer bus %02x\n", n);
-- pci_scan_bus(n, &pci_root_ops, NULL);
-+ pci_scan_bus(n, &pci_root_ops,
-+ &pci_default_sysdata);
- break;
- }
- }
---- gregkh-2.6.orig/arch/i386/pci/numa.c
-+++ gregkh-2.6/arch/i386/pci/numa.c
-@@ -97,9 +97,11 @@ static void __devinit pci_fixup_i450nx(s
- pci_read_config_byte(d, reg++, &subb);
- DBG("i450NX PXB %d: %02x/%02x/%02x\n", pxb, busno, suba, subb);
- if (busno)
-- pci_scan_bus(QUADLOCAL2BUS(quad,busno), &pci_root_ops, NULL); /* Bus A */
-+ pci_scan_bus(QUADLOCAL2BUS(quad,busno), &pci_root_ops,
-+ &pci_default_sysdata); /* Bus A */
- if (suba < subb)
-- pci_scan_bus(QUADLOCAL2BUS(quad,suba+1), &pci_root_ops, NULL); /* Bus B */
-+ pci_scan_bus(QUADLOCAL2BUS(quad,suba+1), &pci_root_ops,
-+ &pci_default_sysdata); /* Bus B */
- }
- pcibios_last_bus = -1;
- }
-@@ -124,7 +126,7 @@ static int __init pci_numa_init(void)
- printk("Scanning PCI bus %d for quad %d\n",
- QUADLOCAL2BUS(quad,0), quad);
- pci_scan_bus(QUADLOCAL2BUS(quad,0),
-- &pci_root_ops, NULL);
-+ &pci_root_ops, &pci_default_sysdata);
- }
- return 0;
- }
---- gregkh-2.6.orig/arch/i386/pci/visws.c
-+++ gregkh-2.6/arch/i386/pci/visws.c
-@@ -102,8 +102,8 @@ static int __init pcibios_init(void)
- "bridge B (PIIX4) bus: %u\n", pci_bus1, pci_bus0);
-
- raw_pci_ops = &pci_direct_conf1;
-- pci_scan_bus(pci_bus0, &pci_root_ops, NULL);
-- pci_scan_bus(pci_bus1, &pci_root_ops, NULL);
-+ pci_scan_bus(pci_bus0, &pci_root_ops, &pci_default_sysdata);
-+ pci_scan_bus(pci_bus1, &pci_root_ops, &pci_default_sysdata);
- pci_fixup_irqs(visws_swizzle, visws_map_irq);
- pcibios_resource_survey();
- return 0;
---- gregkh-2.6.orig/include/asm-i386/pci.h
-+++ gregkh-2.6/include/asm-i386/pci.h
-@@ -9,6 +9,7 @@ struct pci_sysdata {
- int domain; /* PCI domain */
- int node; /* NUMA node */
- };
-+extern struct pci_sysdata pci_default_sysdata;
-
- #ifdef CONFIG_PCI_DOMAINS
- static inline int pci_domain_nr(struct pci_bus *bus)
diff --git a/pci/pci-fix-the-x86-pci-domain-support-fix.patch b/pci/pci-fix-the-x86-pci-domain-support-fix.patch
deleted file mode 100644
index 960720fc7cac5..0000000000000
--- a/pci/pci-fix-the-x86-pci-domain-support-fix.patch
+++ /dev/null
@@ -1,39 +0,0 @@
-From akpm@osdl.org Fri Feb 3 01:46:31 2006
-Message-Id: <200602030946.k139kIW6002410@shell0.pdx.osdl.net>
-Subject: PCI: fix the x86 pci domain support fix
-To: greg@kroah.com
-Cc: akpm@osdl.org, apw@shadowen.org, jgarzik@pobox.com, mbligh@aracnet.com
-From: akpm@osdl.org
-Date: Fri, 03 Feb 2006 01:45:58 -0800
-
-
-From: Andrew Morton <akpm@osdl.org>
-
-x86_64 needs this declared too..
-
-arch/x86_64/pci/../../i386/pci/fixup.c: In function `pci_fixup_i450nx':
-arch/x86_64/pci/../../i386/pci/fixup.c:29: error: `pci_default_sysdata' undeclared (first use in this function)
-arch/x86_64/pci/../../i386/pci/fixup.c:29: error: (Each undeclared identifier is reported only once
-arch/x86_64/pci/../../i386/pci/fixup.c:29: error: for each function it appears in.)
-arch/x86_64/pci/../../i386/pci/fixup.c: In function `pci_fixup_i450gx':
-arch/x86_64/pci/../../i386/pci/fixup.c:47: error: `pci_default_sysdata' undeclared (first use in this function)
-
-Cc: Andy Whitcroft <apw@shadowen.org>
-Cc: Jeff Garzik <jgarzik@pobox.com>
-Cc: "Martin J. Bligh" <mbligh@mbligh.org>
-Signed-off-by: Andrew Morton <akpm@osdl.org>
-Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
----
- include/asm-x86_64/pci.h | 1 +
- 1 file changed, 1 insertion(+)
-
---- gregkh-2.6.orig/include/asm-x86_64/pci.h
-+++ gregkh-2.6/include/asm-x86_64/pci.h
-@@ -10,6 +10,7 @@ struct pci_sysdata {
- int domain; /* PCI domain */
- int node; /* NUMA node */
- };
-+extern struct pci_sysdata pci_default_sysdata;
-
- #ifdef CONFIG_PCI_DOMAINS
- static inline int pci_domain_nr(struct pci_bus *bus)
diff --git a/pci/pci-pci-cardbus-cards-hidden-needs-pci-assign-busses-to-fix.patch b/pci/pci-pci-cardbus-cards-hidden-needs-pci-assign-busses-to-fix.patch
index 37f1a94a3e6ad..a759d8fa80882 100644
--- a/pci/pci-pci-cardbus-cards-hidden-needs-pci-assign-busses-to-fix.patch
+++ b/pci/pci-pci-cardbus-cards-hidden-needs-pci-assign-busses-to-fix.patch
@@ -76,7 +76,7 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
#include <asm/acpi.h>
#include <asm/segment.h>
-@@ -124,12 +125,43 @@ void __devinit pcibios_fixup_bus(struct
+@@ -120,11 +121,42 @@ void __devinit pcibios_fixup_bus(struct
pci_read_bridge_bases(b);
}
@@ -113,7 +113,6 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
struct pci_bus * __devinit pcibios_scan_root(int busnum)
{
struct pci_bus *bus = NULL;
- struct pci_sysdata *sd;
+ dmi_check_system(pciprobe_dmi_table);
+
diff --git a/pci/x86-pci-domain-support-a-humble-fix.patch b/pci/x86-pci-domain-support-a-humble-fix.patch
deleted file mode 100644
index b6712113f14d0..0000000000000
--- a/pci/x86-pci-domain-support-a-humble-fix.patch
+++ /dev/null
@@ -1,40 +0,0 @@
-From garzik@havoc.gtf.org Fri Dec 2 19:24:13 2005
-Date: Fri, 2 Dec 2005 20:39:41 -0500
-From: Jeff Garzik <jgarzik@pobox.com>
-Cc: <gregkh@suse.de>, <ak@suse.de>
-Subject: [PATCH 1/3] x86 PCI domain support: a humble fix
-Message-ID: <20051203013941.GA2663@havoc.gtf.org>
-Content-Disposition: inline
-
-From: Jeff Garzik <jgarzik@pobox.com>
-
-[x86, PCI] pass PCI domain number to PCI config read/write hooks
-
-Don't hardcode zero, since modern x86 (with special ACPI sauce)
-can support multiple "PCI segments", aka PCI domains.
-
-Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
-
----
- arch/i386/pci/common.c | 6 ++++--
- 1 file changed, 4 insertions(+), 2 deletions(-)
-
---- gregkh-2.6.orig/arch/i386/pci/common.c
-+++ gregkh-2.6/arch/i386/pci/common.c
-@@ -31,12 +31,14 @@ struct pci_raw_ops *raw_pci_ops;
-
- static int pci_read(struct pci_bus *bus, unsigned int devfn, int where, int size, u32 *value)
- {
-- return raw_pci_ops->read(0, bus->number, devfn, where, size, value);
-+ return raw_pci_ops->read(pci_domain_nr(bus), bus->number,
-+ devfn, where, size, value);
- }
-
- static int pci_write(struct pci_bus *bus, unsigned int devfn, int where, int size, u32 value)
- {
-- return raw_pci_ops->write(0, bus->number, devfn, where, size, value);
-+ return raw_pci_ops->write(pci_domain_nr(bus), bus->number,
-+ devfn, where, size, value);
- }
-
- struct pci_ops pci_root_ops = {
diff --git a/pci/x86-pci-domain-support-struct-pci_sysdata.patch b/pci/x86-pci-domain-support-struct-pci_sysdata.patch
deleted file mode 100644
index 507079820e9db..0000000000000
--- a/pci/x86-pci-domain-support-struct-pci_sysdata.patch
+++ /dev/null
@@ -1,150 +0,0 @@
-From garzik@havoc.gtf.org Fri Dec 2 19:24:13 2005
-Date: Fri, 2 Dec 2005 20:40:06 -0500
-From: Jeff Garzik <jgarzik@pobox.com>
-Cc: <gregkh@suse.de>, <ak@suse.de>
-Subject: [PATCH 2/3] x86 PCI domain support: struct pci_sysdata
-Message-ID: <20051203014006.GB2663@havoc.gtf.org>
-Content-Disposition: inline
-
-
-[x86, PCI] Switch pci_bus::sysdata from NUMA node integer to a pointer
-
-On x86[-64], struct pci_bus::sysdata is only used on NUMA platforms,
-to store the associated NUMA node.
-
-Preparing for the future when we'll want to do other things with
-sysdata, struct pci_sysdata was created. An allocated structure
-replaces the cast-pointer-to-int NUMA usage. Updated all NUMA users.
-
-From: Jeff Garzik <jgarzik@pobox.com>
-Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
-
-
----
- arch/i386/pci/acpi.c | 7 ++++---
- arch/i386/pci/common.c | 13 ++++++++++++-
- arch/x86_64/pci/k8-bus.c | 6 +++++-
- include/asm-i386/pci.h | 5 +++++
- include/asm-i386/topology.h | 2 +-
- include/asm-x86_64/pci.h | 4 ++++
- include/asm-x86_64/topology.h | 2 +-
- 7 files changed, 32 insertions(+), 7 deletions(-)
-
---- gregkh-2.6.orig/arch/i386/pci/acpi.c
-+++ gregkh-2.6/arch/i386/pci/acpi.c
-@@ -19,9 +19,10 @@ struct pci_bus * __devinit pci_acpi_scan
- if (bus != NULL) {
- int pxm = acpi_get_pxm(device->handle);
- if (pxm >= 0) {
-- bus->sysdata = (void *)(unsigned long)pxm_to_node(pxm);
-- printk("bus %d -> pxm %d -> node %ld\n",
-- busnum, pxm, (long)(bus->sysdata));
-+ struct pci_sysdata *sd = bus->sysdata;
-+ sd->node = pxm_to_node(pxm);
-+ printk("bus %d -> pxm %d -> node %d\n",
-+ busnum, pxm, sd->node);
- }
- }
- #endif
---- gregkh-2.6.orig/arch/i386/pci/common.c
-+++ gregkh-2.6/arch/i386/pci/common.c
-@@ -126,6 +126,7 @@ void __devinit pcibios_fixup_bus(struct
- struct pci_bus * __devinit pcibios_scan_root(int busnum)
- {
- struct pci_bus *bus = NULL;
-+ struct pci_sysdata *sd;
-
- while ((bus = pci_find_next_bus(bus)) != NULL) {
- if (bus->number == busnum) {
-@@ -134,9 +135,19 @@ struct pci_bus * __devinit pcibios_scan_
- }
- }
-
-+ /* Allocate per-root-bus (not per bus) arch-specific data.
-+ * TODO: leak; this memory is never freed.
-+ * It's arguable whether it's worth the trouble to care.
-+ */
-+ sd = kzalloc(sizeof(*sd), GFP_KERNEL);
-+ if (!sd) {
-+ printk(KERN_ERR "PCI: OOM, not probing PCI bus %02x\n", busnum);
-+ return NULL;
-+ }
-+
- printk(KERN_DEBUG "PCI: Probing PCI hardware (bus %02x)\n", busnum);
-
-- return pci_scan_bus_parented(NULL, busnum, &pci_root_ops, NULL);
-+ return pci_scan_bus_parented(NULL, busnum, &pci_root_ops, sd);
- }
-
- extern u8 pci_cache_line_size;
---- gregkh-2.6.orig/arch/x86_64/pci/k8-bus.c
-+++ gregkh-2.6/arch/x86_64/pci/k8-bus.c
-@@ -59,6 +59,8 @@ fill_mp_bus_to_cpumask(void)
- j <= SUBORDINATE_LDT_BUS_NUMBER(ldtbus);
- j++) {
- struct pci_bus *bus;
-+ struct pci_sysdata *sd;
-+
- long node = NODE_ID(nid);
- /* Algorithm a bit dumb, but
- it shouldn't matter here */
-@@ -67,7 +69,9 @@ fill_mp_bus_to_cpumask(void)
- continue;
- if (!node_online(node))
- node = 0;
-- bus->sysdata = (void *)node;
-+
-+ sd = bus->sysdata;
-+ sd->node = node;
- }
- }
- }
---- gregkh-2.6.orig/include/asm-i386/pci.h
-+++ gregkh-2.6/include/asm-i386/pci.h
-@@ -4,6 +4,11 @@
- #include <linux/config.h>
-
- #ifdef __KERNEL__
-+
-+struct pci_sysdata {
-+ int node; /* NUMA node */
-+};
-+
- #include <linux/mm.h> /* for struct page */
-
- /* Can be used to override the logic in pci_scan_bus for skipping
---- gregkh-2.6.orig/include/asm-i386/topology.h
-+++ gregkh-2.6/include/asm-i386/topology.h
-@@ -69,7 +69,7 @@ static inline int node_to_first_cpu(int
- return first_cpu(mask);
- }
-
--#define pcibus_to_node(bus) ((long) (bus)->sysdata)
-+#define pcibus_to_node(bus) ((struct pci_sysdata *)((bus)->sysdata))->node
- #define pcibus_to_cpumask(bus) node_to_cpumask(pcibus_to_node(bus))
-
- /* sched_domains SD_NODE_INIT for NUMAQ machines */
---- gregkh-2.6.orig/include/asm-x86_64/pci.h
-+++ gregkh-2.6/include/asm-x86_64/pci.h
-@@ -6,6 +6,10 @@
-
- #ifdef __KERNEL__
-
-+struct pci_sysdata {
-+ int node; /* NUMA node */
-+};
-+
- #include <linux/mm.h> /* for struct page */
-
- /* Can be used to override the logic in pci_scan_bus for skipping
---- gregkh-2.6.orig/include/asm-x86_64/topology.h
-+++ gregkh-2.6/include/asm-x86_64/topology.h
-@@ -25,7 +25,7 @@ extern int __node_distance(int, int);
- #define parent_node(node) (node)
- #define node_to_first_cpu(node) (first_cpu(node_to_cpumask[node]))
- #define node_to_cpumask(node) (node_to_cpumask[node])
--#define pcibus_to_node(bus) ((long)(bus->sysdata))
-+#define pcibus_to_node(bus) ((struct pci_sysdata *)((bus)->sysdata))->node
- #define pcibus_to_cpumask(bus) node_to_cpumask(pcibus_to_node(bus));
-
- #define numa_node_id() read_pda(nodenumber)
diff --git a/pci/x86-pci-domain-support-the-meat.patch b/pci/x86-pci-domain-support-the-meat.patch
deleted file mode 100644
index 0101d2b5dc03a..0000000000000
--- a/pci/x86-pci-domain-support-the-meat.patch
+++ /dev/null
@@ -1,116 +0,0 @@
-From garzik@havoc.gtf.org Fri Dec 2 19:24:13 2005
-Date: Fri, 2 Dec 2005 20:40:33 -0500
-From: Jeff Garzik <jgarzik@pobox.com>
-To: linux-kernel@vger.kernel.org
-Cc: <gregkh@suse.de>, <ak@suse.de>
-Subject: [PATCH 3/3] x86 PCI domain support: the meat
-Message-ID: <20051203014033.GC2663@havoc.gtf.org>
-Content-Disposition: inline
-
-
-[x86, PCI] add PCI domain support
-
-* Store PCI domain in struct pci_sysdata
-* Add magic inlines to pass PCI domain to read/write config hooks
-* Support ACPI's notion of PCI domains (PCI segments)
-
-From: Jeff Garzik <jgarzik@pobox.com>
-Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
-
----
- arch/i386/pci/acpi.c | 20 ++++++++++++++++++--
- include/asm-i386/pci.h | 14 ++++++++++++++
- include/asm-x86_64/pci.h | 14 ++++++++++++++
- 3 files changed, 46 insertions(+), 2 deletions(-)
-
---- gregkh-2.6.orig/arch/i386/pci/acpi.c
-+++ gregkh-2.6/arch/i386/pci/acpi.c
-@@ -8,18 +8,34 @@
- struct pci_bus * __devinit pci_acpi_scan_root(struct acpi_device *device, int domain, int busnum)
- {
- struct pci_bus *bus;
-+ struct pci_sysdata *sd;
-
-+ /* Allocate per-root-bus (not per bus) arch-specific data.
-+ * TODO: leak; this memory is never freed.
-+ * It's arguable whether it's worth the trouble to care.
-+ */
-+ sd = kzalloc(sizeof(*sd), GFP_KERNEL);
-+ if (!sd) {
-+ printk(KERN_ERR "PCI: OOM, not probing PCI bus %02x\n", busnum);
-+ return NULL;
-+ }
-+
-+#ifdef CONFIG_PCI_DOMAINS
-+ sd->domain = domain;
-+#else
- if (domain != 0) {
- printk(KERN_WARNING "PCI: Multiple domains not supported\n");
- return NULL;
- }
-+#endif /* CONFIG_PCI_DOMAINS */
-
-- bus = pcibios_scan_root(busnum);
-+ bus = pci_scan_bus_parented(NULL, busnum, &pci_root_ops, sd);
-+ if (!bus)
-+ kfree(sd);
- #ifdef CONFIG_ACPI_NUMA
- if (bus != NULL) {
- int pxm = acpi_get_pxm(device->handle);
- if (pxm >= 0) {
-- struct pci_sysdata *sd = bus->sysdata;
- sd->node = pxm_to_node(pxm);
- printk("bus %d -> pxm %d -> node %d\n",
- busnum, pxm, sd->node);
---- gregkh-2.6.orig/include/asm-i386/pci.h
-+++ gregkh-2.6/include/asm-i386/pci.h
-@@ -6,9 +6,23 @@
- #ifdef __KERNEL__
-
- struct pci_sysdata {
-+ int domain; /* PCI domain */
- int node; /* NUMA node */
- };
-
-+#ifdef CONFIG_PCI_DOMAINS
-+static inline int pci_domain_nr(struct pci_bus *bus)
-+{
-+ struct pci_sysdata *sd = bus->sysdata;
-+ return sd->domain;
-+}
-+
-+static inline int pci_proc_domain(struct pci_bus *bus)
-+{
-+ return pci_domain_nr(bus);
-+}
-+#endif /* CONFIG_PCI_DOMAINS */
-+
- #include <linux/mm.h> /* for struct page */
-
- /* Can be used to override the logic in pci_scan_bus for skipping
---- gregkh-2.6.orig/include/asm-x86_64/pci.h
-+++ gregkh-2.6/include/asm-x86_64/pci.h
-@@ -7,9 +7,23 @@
- #ifdef __KERNEL__
-
- struct pci_sysdata {
-+ int domain; /* PCI domain */
- int node; /* NUMA node */
- };
-
-+#ifdef CONFIG_PCI_DOMAINS
-+static inline int pci_domain_nr(struct pci_bus *bus)
-+{
-+ struct pci_sysdata *sd = bus->sysdata;
-+ return sd->domain;
-+}
-+
-+static inline int pci_proc_domain(struct pci_bus *bus)
-+{
-+ return pci_domain_nr(bus);
-+}
-+#endif /* CONFIG_PCI_DOMAINS */
-+
- #include <linux/mm.h> /* for struct page */
-
- /* Can be used to override the logic in pci_scan_bus for skipping