* [PATCH] pcibus_to_node implementation for IA64
@ 2005-06-23 21:02 Christoph Lameter
2005-06-23 21:10 ` Jesse Barnes
` (10 more replies)
0 siblings, 11 replies; 12+ messages in thread
From: Christoph Lameter @ 2005-06-23 21:02 UTC (permalink / raw)
To: linux-ia64
pcibus_to_node provides a way for the Linux kernel to identify to which node
a certain pcibus connect to. Allocations of control structures for devices can then be
made on the node where the pci bus is located to allow local access during interrupt and
other device manipulation.
The numa aware block layer patch now in Linus tree relies on
pcibus_to_node to allocate block device control structures on the correct
node. There is a pending patch for an ethernet driver to allocate the
descriptors on the node of each ethernet device.
pcibus_to_node was implemented for IA64 by adding an additional node field
to the pci_controller structure and then have each subarchitecture set
this field.
I hope I got the implementation for HP right. Please check.
The implementation for Altix is currently only returning the correct node
id for devices that are located on nodes with memory. For devices from
nodes without memory pcibus_to_node will return -1 (undetermined) which
will then result in the fallback to old any node (or cpu local node)
allocation strategy. We will fix that as soon as we can figure out how to
get to valid Linux node numbers from the io node numbers.
Signed-off-by: Christoph Lameter <clameter@sgi.com>
Index: linux-2.6.12/include/asm-ia64/pci.h
=================================--- linux-2.6.12.orig/include/asm-ia64/pci.h 2005-06-17 12:48:29.000000000 -0700
+++ linux-2.6.12/include/asm-ia64/pci.h 2005-06-23 13:55:01.000000000 -0700
@@ -109,6 +109,7 @@ struct pci_controller {
void *acpi_handle;
void *iommu;
int segment;
+ int node; /* nearest node with memory or -1 for global allocation */
unsigned int windows;
struct pci_window *window;
Index: linux-2.6.12/include/asm-ia64/topology.h
=================================--- linux-2.6.12.orig/include/asm-ia64/topology.h 2005-06-17 12:48:29.000000000 -0700
+++ linux-2.6.12/include/asm-ia64/topology.h 2005-06-23 13:55:01.000000000 -0700
@@ -40,6 +40,11 @@
*/
#define node_to_first_cpu(node) (__ffs(node_to_cpumask(node)))
+/*
+ * Determines the node for a given pci bus
+ */
+#define pcibus_to_node(bus) PCI_CONTROLLER(bus)->node
+
void build_cpu_to_node_map(void);
/* sched_domains SD_NODE_INIT for IA64 NUMA machines */
Index: linux-2.6.12/arch/ia64/pci/pci.c
=================================--- linux-2.6.12.orig/arch/ia64/pci/pci.c 2005-06-17 12:48:29.000000000 -0700
+++ linux-2.6.12/arch/ia64/pci/pci.c 2005-06-23 13:55:01.000000000 -0700
@@ -175,6 +175,7 @@ alloc_pci_controller (int seg)
memset(controller, 0, sizeof(*controller));
controller->segment = seg;
+ controller->node = -1;
return controller;
}
Index: linux-2.6.12/arch/ia64/sn/kernel/io_init.c
=================================--- linux-2.6.12.orig/arch/ia64/sn/kernel/io_init.c 2005-06-17 12:48:29.000000000 -0700
+++ linux-2.6.12/arch/ia64/sn/kernel/io_init.c 2005-06-23 13:55:02.000000000 -0700
@@ -364,6 +364,8 @@ static void sn_pci_controller_fixup(int
nasid = NASID_GET(SN_PCIBUS_BUSSOFT(bus)->bs_base);
cnode = nasid_to_cnodeid(nasid);
+ if (cnode < num_online_nodes() && cnode < numionodes)
+ controller->node = cnode;
hubdev_info = (struct hubdev_info *)(NODEPDA(cnode)->pdinfo);
SN_PCIBUS_BUSSOFT(bus)->bs_xwidget_info &(hubdev_info->hdi_xwidget_info[SN_PCIBUS_BUSSOFT(bus)->bs_xid]);
Index: linux-2.6.12/arch/ia64/sn/pci/pci_dma.c
=================================--- linux-2.6.12.orig/arch/ia64/sn/pci/pci_dma.c 2005-06-17 12:48:29.000000000 -0700
+++ linux-2.6.12/arch/ia64/sn/pci/pci_dma.c 2005-06-23 13:55:02.000000000 -0700
@@ -78,6 +78,7 @@ void *sn_dma_alloc_coherent(struct devic
{
void *cpuaddr;
unsigned long phys_addr;
+ int node;
struct pci_dev *pdev = to_pci_dev(dev);
struct sn_pcibus_provider *provider = SN_PCIDEV_BUSPROVIDER(pdev);
@@ -85,10 +86,19 @@ void *sn_dma_alloc_coherent(struct devic
/*
* Allocate the memory.
- * FIXME: We should be doing alloc_pages_node for the node closest
- * to the PCI device.
*/
- if (!(cpuaddr = (void *)__get_free_pages(GFP_ATOMIC, get_order(size))))
+ node = pcibus_to_node(pdev->bus);
+ if (likely(node >=0)) {
+ struct page *p = alloc_pages_node(node, GFP_ATOMIC, get_order(size));
+
+ if (likely(p))
+ cpuaddr = page_address(p);
+ else
+ return NULL;
+ } else
+ cpuaddr = (void *)__get_free_pages(GFP_ATOMIC, get_order(size));
+
+ if (unlikely(!cpuaddr))
return NULL;
memset(cpuaddr, 0x0, size);
Index: linux-2.6.12/arch/ia64/hp/common/sba_iommu.c
=================================--- linux-2.6.12.orig/arch/ia64/hp/common/sba_iommu.c 2005-06-17 12:48:29.000000000 -0700
+++ linux-2.6.12/arch/ia64/hp/common/sba_iommu.c 2005-06-23 13:55:02.000000000 -0700
@@ -1930,6 +1930,9 @@ sba_connect_bus(struct pci_bus *bus)
for (ioc = ioc_list; ioc; ioc = ioc->next)
if (ioc->handle = handle) {
PCI_CONTROLLER(bus)->iommu = ioc;
+#ifdef CONFIG_NUMA
+ PCI_CONTROLLER(bus)->node = ioc->node;
+#endif
return;
}
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH] pcibus_to_node implementation for IA64
2005-06-23 21:02 [PATCH] pcibus_to_node implementation for IA64 Christoph Lameter
@ 2005-06-23 21:10 ` Jesse Barnes
2005-06-23 21:17 ` Alex Williamson
` (9 subsequent siblings)
10 siblings, 0 replies; 12+ messages in thread
From: Jesse Barnes @ 2005-06-23 21:10 UTC (permalink / raw)
To: linux-ia64
On Thursday, June 23, 2005 2:02 pm, Christoph Lameter wrote:
> -0700 @@ -109,6 +109,7 @@ struct pci_controller {
> void *acpi_handle;
> void *iommu;
> int segment;
> + int node; /* nearest node with memory or -1 for global allocation
> */
...
> +#ifdef CONFIG_NUMA
> + PCI_CONTROLLER(bus)->node = ioc->node;
> +#endif
> return;
> }
It looks like you're adding the new 'node' field unconditionally, but
protecting the sba assignment by CONFIG_NUMA? Which one is wrong? :)
Jesse
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH] pcibus_to_node implementation for IA64
2005-06-23 21:02 [PATCH] pcibus_to_node implementation for IA64 Christoph Lameter
2005-06-23 21:10 ` Jesse Barnes
@ 2005-06-23 21:17 ` Alex Williamson
2005-06-23 21:19 ` Christoph Lameter
` (8 subsequent siblings)
10 siblings, 0 replies; 12+ messages in thread
From: Alex Williamson @ 2005-06-23 21:17 UTC (permalink / raw)
To: linux-ia64
On Thu, 2005-06-23 at 14:02 -0700, Christoph Lameter wrote:
> --- linux-2.6.12.orig/arch/ia64/hp/common/sba_iommu.c 2005-06-17 12:48:29.000000000 -0700
> +++ linux-2.6.12/arch/ia64/hp/common/sba_iommu.c 2005-06-23 13:55:02.000000000 -0700
> @@ -1930,6 +1930,9 @@ sba_connect_bus(struct pci_bus *bus)
> for (ioc = ioc_list; ioc; ioc = ioc->next)
> if (ioc->handle = handle) {
> PCI_CONTROLLER(bus)->iommu = ioc;
> +#ifdef CONFIG_NUMA
> + PCI_CONTROLLER(bus)->node = ioc->node;
> +#endif
> return;
> }
This will work, but there's no reason to hide this in the platform
specific code. The PCI root bridges are in ACPI namespace, a
pxm_to_node() lookup should be done there when the buses are discovered.
Then it would work on HP and DIG boxes. Thanks,
Alex
--
Alex Williamson HP Linux & Open Source Lab
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH] pcibus_to_node implementation for IA64
2005-06-23 21:02 [PATCH] pcibus_to_node implementation for IA64 Christoph Lameter
2005-06-23 21:10 ` Jesse Barnes
2005-06-23 21:17 ` Alex Williamson
@ 2005-06-23 21:19 ` Christoph Lameter
2005-06-23 21:20 ` Christoph Lameter
` (7 subsequent siblings)
10 siblings, 0 replies; 12+ messages in thread
From: Christoph Lameter @ 2005-06-23 21:19 UTC (permalink / raw)
To: linux-ia64
On Thu, 23 Jun 2005, Alex Williamson wrote:
> This will work, but there's no reason to hide this in the platform
> specific code. The PCI root bridges are in ACPI namespace, a
> pxm_to_node() lookup should be done there when the buses are discovered.
> Then it would work on HP and DIG boxes. Thanks,
Could you do that? We only provide minimal ACPI support which does not
include pci. For our needs this will not work.
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH] pcibus_to_node implementation for IA64
2005-06-23 21:02 [PATCH] pcibus_to_node implementation for IA64 Christoph Lameter
` (2 preceding siblings ...)
2005-06-23 21:19 ` Christoph Lameter
@ 2005-06-23 21:20 ` Christoph Lameter
2005-06-23 21:33 ` Alex Williamson
` (6 subsequent siblings)
10 siblings, 0 replies; 12+ messages in thread
From: Christoph Lameter @ 2005-06-23 21:20 UTC (permalink / raw)
To: linux-ia64
On Thu, 23 Jun 2005, Jesse Barnes wrote:
> It looks like you're adding the new 'node' field unconditionally, but
> protecting the sba assignment by CONFIG_NUMA? Which one is wrong? :)
if !CONFIG_NUMA then the node field exists but is always -1, which will
result in node unspecific allocations.
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH] pcibus_to_node implementation for IA64
2005-06-23 21:02 [PATCH] pcibus_to_node implementation for IA64 Christoph Lameter
` (3 preceding siblings ...)
2005-06-23 21:20 ` Christoph Lameter
@ 2005-06-23 21:33 ` Alex Williamson
2005-06-23 21:47 ` Christoph Lameter
` (5 subsequent siblings)
10 siblings, 0 replies; 12+ messages in thread
From: Alex Williamson @ 2005-06-23 21:33 UTC (permalink / raw)
To: linux-ia64
On Thu, 2005-06-23 at 14:19 -0700, Christoph Lameter wrote:
> On Thu, 23 Jun 2005, Alex Williamson wrote:
>
> > This will work, but there's no reason to hide this in the platform
> > specific code. The PCI root bridges are in ACPI namespace, a
> > pxm_to_node() lookup should be done there when the buses are discovered.
> > Then it would work on HP and DIG boxes. Thanks,
>
> Could you do that? We only provide minimal ACPI support which does not
> include pci. For our needs this will not work.
I believe the below (untested) will work. I'll try to test it on a
box. Thanks,
Alex
--
Alex Williamson HP Linux & Open Source Lab
diff --git a/arch/ia64/pci/pci.c b/arch/ia64/pci/pci.c
--- a/arch/ia64/pci/pci.c
+++ b/arch/ia64/pci/pci.c
@@ -306,6 +306,7 @@ pci_acpi_scan_root(struct acpi_device *d
unsigned int windows = 0;
struct pci_bus *pbus;
char *name;
+ int pxm;
controller = alloc_pci_controller(domain);
if (!controller)
@@ -313,6 +314,10 @@ pci_acpi_scan_root(struct acpi_device *d
controller->acpi_handle = device->handle;
+ pxm = acpi_get_pxm(controller->acpi_handle);
+ if (pxm >= 0)
+ controller->node = pxm_to_nid_map[pxm];
+
acpi_walk_resources(device->handle, METHOD_NAME__CRS, count_window,
&windows);
controller->window = kmalloc(sizeof(*controller->window) * windows,
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH] pcibus_to_node implementation for IA64
2005-06-23 21:02 [PATCH] pcibus_to_node implementation for IA64 Christoph Lameter
` (4 preceding siblings ...)
2005-06-23 21:33 ` Alex Williamson
@ 2005-06-23 21:47 ` Christoph Lameter
2005-06-23 22:53 ` Alex Williamson
` (4 subsequent siblings)
10 siblings, 0 replies; 12+ messages in thread
From: Christoph Lameter @ 2005-06-23 21:47 UTC (permalink / raw)
To: linux-ia64
On Thu, 23 Jun 2005, Alex Williamson wrote:
> I believe the below (untested) will work. I'll try to test it on a
> box. Thanks,
Yes that is how other arches do it.
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH] pcibus_to_node implementation for IA64
2005-06-23 21:02 [PATCH] pcibus_to_node implementation for IA64 Christoph Lameter
` (5 preceding siblings ...)
2005-06-23 21:47 ` Christoph Lameter
@ 2005-06-23 22:53 ` Alex Williamson
2005-06-23 23:08 ` Christoph Lameter
` (3 subsequent siblings)
10 siblings, 0 replies; 12+ messages in thread
From: Alex Williamson @ 2005-06-23 22:53 UTC (permalink / raw)
To: linux-ia64
On Thu, 2005-06-23 at 14:47 -0700, Christoph Lameter wrote:
> On Thu, 23 Jun 2005, Alex Williamson wrote:
>
> > I believe the below (untested) will work. I'll try to test it on a
> > box. Thanks,
>
> Yes that is how other arches do it.
Cool. It works on an rx8620 here. I forgot to wrap the generic setup
in a NUMA config. The below chunks should replace the sba_iommu chunk
in the original patch. Thanks,
Alex
Signed-off-by: Alex Williamson <alex.williamson@hp.com>
diff --git a/arch/ia64/pci/pci.c b/arch/ia64/pci/pci.c
--- a/arch/ia64/pci/pci.c
+++ b/arch/ia64/pci/pci.c
@@ -288,6 +289,7 @@ pci_acpi_scan_root(struct acpi_device *d
unsigned int windows = 0;
struct pci_bus *pbus;
char *name;
+ int pxm;
controller = alloc_pci_controller(domain);
if (!controller)
@@ -295,6 +297,12 @@ pci_acpi_scan_root(struct acpi_device *d
controller->acpi_handle = device->handle;
+ pxm = acpi_get_pxm(controller->acpi_handle);
+#ifdef CONFIG_NUMA
+ if (pxm >= 0)
+ controller->node = pxm_to_nid_map[pxm];
+#endif
+
acpi_walk_resources(device->handle, METHOD_NAME__CRS, count_window,
&windows);
controller->window = kmalloc(sizeof(*controller->window) * windows,
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH] pcibus_to_node implementation for IA64
2005-06-23 21:02 [PATCH] pcibus_to_node implementation for IA64 Christoph Lameter
` (6 preceding siblings ...)
2005-06-23 22:53 ` Alex Williamson
@ 2005-06-23 23:08 ` Christoph Lameter
2005-06-24 1:31 ` Jack Steiner
` (2 subsequent siblings)
10 siblings, 0 replies; 12+ messages in thread
From: Christoph Lameter @ 2005-06-23 23:08 UTC (permalink / raw)
To: linux-ia64
On Thu, 23 Jun 2005, Alex Williamson wrote:
> Cool. It works on an rx8620 here. I forgot to wrap the generic setup
> in a NUMA config. The below chunks should replace the sba_iommu chunk
> in the original patch. Thanks,
Great. Tony I am going to split off my patch into two pieces, one generic
and one Altix specific. Alex's patch implements the HP subarch support
and the patch that I am going to send separately will implement Altix
subarch support.
Here is the generic stuff for ia64 pcibus to node support:
----
[PATCH] pcibus_to_node implementation for IA64
pcibus_to_node provides a way for the Linux kernel to identify to which node
a certain pcibus connect to. Allocations of control structures for devices can then be
made on the node where the pci bus is located to allow local access during interrupt and
other device manipulation.
The numa aware block layer patch now in Linus tree relies on pcibus_to_node
to allocate block device control structures on the correct node. There is a pending
patch for an ethernet driver to allocate the descriptors on the node of each ethernet device.
This patch only provides an extension of the the pci_controller structure and will make
pcibus_to_node return -1 (undetermined) by default. Separate patches for HP and SGI will
be needed to make subarches return useful node information.
Signed-off-by: Christoph Lameter <clameter@sgi.com>
Index: linux-2.6.12/include/asm-ia64/pci.h
=================================--- linux-2.6.12.orig/include/asm-ia64/pci.h 2005-06-17 12:48:29.000000000 -0700
+++ linux-2.6.12/include/asm-ia64/pci.h 2005-06-23 15:57:26.000000000 -0700
@@ -109,6 +109,7 @@ struct pci_controller {
void *acpi_handle;
void *iommu;
int segment;
+ int node; /* nearest node with memory or -1 for global allocation */
unsigned int windows;
struct pci_window *window;
Index: linux-2.6.12/include/asm-ia64/topology.h
=================================--- linux-2.6.12.orig/include/asm-ia64/topology.h 2005-06-17 12:48:29.000000000 -0700
+++ linux-2.6.12/include/asm-ia64/topology.h 2005-06-23 15:57:26.000000000 -0700
@@ -40,6 +40,11 @@
*/
#define node_to_first_cpu(node) (__ffs(node_to_cpumask(node)))
+/*
+ * Determines the node for a given pci bus
+ */
+#define pcibus_to_node(bus) PCI_CONTROLLER(bus)->node
+
void build_cpu_to_node_map(void);
/* sched_domains SD_NODE_INIT for IA64 NUMA machines */
Index: linux-2.6.12/arch/ia64/pci/pci.c
=================================--- linux-2.6.12.orig/arch/ia64/pci/pci.c 2005-06-23 15:53:53.000000000 -0700
+++ linux-2.6.12/arch/ia64/pci/pci.c 2005-06-23 15:57:26.000000000 -0700
@@ -157,6 +157,7 @@ alloc_pci_controller (int seg)
memset(controller, 0, sizeof(*controller));
controller->segment = seg;
+ controller->node = -1;
return controller;
}
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH] pcibus_to_node implementation for IA64
2005-06-23 21:02 [PATCH] pcibus_to_node implementation for IA64 Christoph Lameter
` (7 preceding siblings ...)
2005-06-23 23:08 ` Christoph Lameter
@ 2005-06-24 1:31 ` Jack Steiner
2005-06-24 2:11 ` Christoph Lameter
2005-07-07 23:59 ` Christoph Lameter
10 siblings, 0 replies; 12+ messages in thread
From: Jack Steiner @ 2005-06-24 1:31 UTC (permalink / raw)
To: linux-ia64
> Index: linux-2.6.12/arch/ia64/sn/kernel/io_init.c
> =================================> --- linux-2.6.12.orig/arch/ia64/sn/kernel/io_init.c 2005-06-17 12:48:29.000000000 -0700
> +++ linux-2.6.12/arch/ia64/sn/kernel/io_init.c 2005-06-23 13:55:02.000000000 -0700
> @@ -364,6 +364,8 @@ static void sn_pci_controller_fixup(int
>
> nasid = NASID_GET(SN_PCIBUS_BUSSOFT(bus)->bs_base);
> cnode = nasid_to_cnodeid(nasid);
> + if (cnode < num_online_nodes() && cnode < numionodes)
> + controller->node = cnode;
This doesn't look right.
The code works for normal nodes (not TIO). For TIO nodes, the node number that
is returned by physical_node_map() is NOT a node number that is known to
VM.
> hubdev_info = (struct hubdev_info *)(NODEPDA(cnode)->pdinfo);
> SN_PCIBUS_BUSSOFT(bus)->bs_xwidget_info > &(hubdev_info->hdi_xwidget_info[SN_PCIBUS_BUSSOFT(bus)->bs_xid]);
--
Thanks
Jack Steiner (steiner@sgi.com) 651-683-5302
Principal Engineer SGI - Silicon Graphics, Inc.
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH] pcibus_to_node implementation for IA64
2005-06-23 21:02 [PATCH] pcibus_to_node implementation for IA64 Christoph Lameter
` (8 preceding siblings ...)
2005-06-24 1:31 ` Jack Steiner
@ 2005-06-24 2:11 ` Christoph Lameter
2005-07-07 23:59 ` Christoph Lameter
10 siblings, 0 replies; 12+ messages in thread
From: Christoph Lameter @ 2005-06-24 2:11 UTC (permalink / raw)
To: linux-ia64
On Thu, 23 Jun 2005, Jack Steiner wrote:
> This doesn't look right.
Yup, I figured that out too ..
Could you have a look at the latest generic patch posted to
linux-ia64 and at the last patch posted to the PV?
^ permalink raw reply [flat|nested] 12+ messages in thread
* [PATCH] pcibus_to_node implementation for IA64
2005-06-23 21:02 [PATCH] pcibus_to_node implementation for IA64 Christoph Lameter
` (9 preceding siblings ...)
2005-06-24 2:11 ` Christoph Lameter
@ 2005-07-07 23:59 ` Christoph Lameter
10 siblings, 0 replies; 12+ messages in thread
From: Christoph Lameter @ 2005-07-07 23:59 UTC (permalink / raw)
To: linux-ia64
pcibus_to_node provides a way for the Linux kernel to identify to which node
a certain pcibus connects to. Allocations of control structures for devices can then be
made on the node where the pci bus is located to allow local access during interrupt and
other device manipulation.
This patch provides a new "node" field in the the pci_controller
structure. The node field will be set based on ACPI information (thanks to
Alex Williamson <alex.williamson@hp.com for that piece).
Signed-off-by: Christoph Lameter <clameter@sgi.com>
Index: linux-2.6.13-rc2/include/asm-ia64/pci.h
=================================--- linux-2.6.13-rc2.orig/include/asm-ia64/pci.h 2005-07-05 20:46:33.000000000 -0700
+++ linux-2.6.13-rc2/include/asm-ia64/pci.h 2005-07-06 12:20:02.000000000 -0700
@@ -128,6 +128,7 @@ struct pci_controller {
void *acpi_handle;
void *iommu;
int segment;
+ int node; /* nearest node with memory or -1 for global allocation */
unsigned int windows;
struct pci_window *window;
Index: linux-2.6.13-rc2/include/asm-ia64/topology.h
=================================--- linux-2.6.13-rc2.orig/include/asm-ia64/topology.h 2005-07-05 20:46:33.000000000 -0700
+++ linux-2.6.13-rc2/include/asm-ia64/topology.h 2005-07-06 12:20:02.000000000 -0700
@@ -40,6 +40,11 @@
*/
#define node_to_first_cpu(node) (__ffs(node_to_cpumask(node)))
+/*
+ * Determines the node for a given pci bus
+ */
+#define pcibus_to_node(bus) PCI_CONTROLLER(bus)->node
+
void build_cpu_to_node_map(void);
#define SD_CPU_INIT (struct sched_domain) { \
Index: linux-2.6.13-rc2/arch/ia64/pci/pci.c
=================================--- linux-2.6.13-rc2.orig/arch/ia64/pci/pci.c 2005-07-05 20:46:33.000000000 -0700
+++ linux-2.6.13-rc2/arch/ia64/pci/pci.c 2005-07-07 16:35:27.000000000 -0700
@@ -157,6 +157,7 @@ alloc_pci_controller (int seg)
memset(controller, 0, sizeof(*controller));
controller->segment = seg;
+ controller->node = -1;
return controller;
}
@@ -288,6 +289,7 @@ pci_acpi_scan_root(struct acpi_device *d
unsigned int windows = 0;
struct pci_bus *pbus;
char *name;
+ int pxm;
controller = alloc_pci_controller(domain);
if (!controller)
@@ -295,10 +297,16 @@ pci_acpi_scan_root(struct acpi_device *d
controller->acpi_handle = device->handle;
+ pxm = acpi_get_pxm(controller->acpi_handle);
+#ifdef CONFIG_NUMA
+ if (pxm >= 0)
+ controller->node = pxm_to_nid_map[pxm];
+#endif
+
acpi_walk_resources(device->handle, METHOD_NAME__CRS, count_window,
&windows);
- controller->window = kmalloc(sizeof(*controller->window) * windows,
- GFP_KERNEL);
+ controller->window = kmalloc_node(sizeof(*controller->window) * windows,
+ GFP_KERNEL, controller->node);
if (!controller->window)
goto out2;
^ permalink raw reply [flat|nested] 12+ messages in thread
end of thread, other threads:[~2005-07-07 23:59 UTC | newest]
Thread overview: 12+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2005-06-23 21:02 [PATCH] pcibus_to_node implementation for IA64 Christoph Lameter
2005-06-23 21:10 ` Jesse Barnes
2005-06-23 21:17 ` Alex Williamson
2005-06-23 21:19 ` Christoph Lameter
2005-06-23 21:20 ` Christoph Lameter
2005-06-23 21:33 ` Alex Williamson
2005-06-23 21:47 ` Christoph Lameter
2005-06-23 22:53 ` Alex Williamson
2005-06-23 23:08 ` Christoph Lameter
2005-06-24 1:31 ` Jack Steiner
2005-06-24 2:11 ` Christoph Lameter
2005-07-07 23:59 ` Christoph Lameter
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.