Skip to content

Commit

Permalink
[IA64] pcibus_to_node implementation for IA64
Browse files Browse the repository at this point in the history
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>
Signed-off-by: Tony Luck <tony.luck@intel.com>
  • Loading branch information
Christoph Lameter authored and Tony Luck committed Jul 12, 2005
1 parent 1604d9c commit 514604c
Show file tree
Hide file tree
Showing 3 changed files with 16 additions and 2 deletions.
12 changes: 10 additions & 2 deletions arch/ia64/pci/pci.c
Original file line number Diff line number Diff line change
Expand Up @@ -157,6 +157,7 @@ alloc_pci_controller (int seg)

memset(controller, 0, sizeof(*controller));
controller->segment = seg;
controller->node = -1;
return controller;
}

Expand Down Expand Up @@ -288,17 +289,24 @@ pci_acpi_scan_root(struct acpi_device *device, int domain, int bus)
unsigned int windows = 0;
struct pci_bus *pbus;
char *name;
int pxm;

controller = alloc_pci_controller(domain);
if (!controller)
goto out1;

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;

Expand Down
1 change: 1 addition & 0 deletions include/asm-ia64/pci.h
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
5 changes: 5 additions & 0 deletions include/asm-ia64/topology.h
Original file line number Diff line number Diff line change
Expand Up @@ -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) { \
Expand Down

0 comments on commit 514604c

Please sign in to comment.