diff options
author | Yasunori Goto <y-goto@jp.fujitsu.com> | 2006-06-23 05:03:19 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@g5.osdl.org> | 2006-06-23 10:42:48 -0400 |
commit | 762834e8bf46bf41ce9034d062a7c1f8563175f3 (patch) | |
tree | fb134ef41772ba61050a08cc4ed92c50cd057658 /drivers | |
parent | d6277db4ab271862ed599da08d78961c70f00002 (diff) |
[PATCH] Unify pxm_to_node() and node_to_pxm()
Consolidate the various arch-specific implementations of pxm_to_node() and
node_to_pxm() into a single generic version.
Signed-off-by: Yasunori Goto <y-goto@jp.fujitsu.com>
Cc: "Luck, Tony" <tony.luck@intel.com>
Cc: Andi Kleen <ak@muc.de>
Cc: Dave Hansen <haveblue@us.ibm.com>
Cc: "Brown, Len" <len.brown@intel.com>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/acpi/Kconfig | 2 | ||||
-rw-r--r-- | drivers/acpi/numa.c | 48 |
2 files changed, 49 insertions, 1 deletions
diff --git a/drivers/acpi/Kconfig b/drivers/acpi/Kconfig index c24652d31bf9..230c53852231 100644 --- a/drivers/acpi/Kconfig +++ b/drivers/acpi/Kconfig | |||
@@ -162,7 +162,7 @@ config ACPI_THERMAL | |||
162 | config ACPI_NUMA | 162 | config ACPI_NUMA |
163 | bool "NUMA support" | 163 | bool "NUMA support" |
164 | depends on NUMA | 164 | depends on NUMA |
165 | depends on (IA64 || X86_64) | 165 | depends on (X86 || IA64) |
166 | default y if IA64_GENERIC || IA64_SGI_SN2 | 166 | default y if IA64_GENERIC || IA64_SGI_SN2 |
167 | 167 | ||
168 | config ACPI_ASUS | 168 | config ACPI_ASUS |
diff --git a/drivers/acpi/numa.c b/drivers/acpi/numa.c index 64b98e82feb7..e2c1a16078c9 100644 --- a/drivers/acpi/numa.c +++ b/drivers/acpi/numa.c | |||
@@ -36,12 +36,60 @@ | |||
36 | #define _COMPONENT ACPI_NUMA | 36 | #define _COMPONENT ACPI_NUMA |
37 | ACPI_MODULE_NAME("numa") | 37 | ACPI_MODULE_NAME("numa") |
38 | 38 | ||
39 | static nodemask_t nodes_found_map = NODE_MASK_NONE; | ||
40 | #define PXM_INVAL -1 | ||
41 | #define NID_INVAL -1 | ||
42 | |||
43 | /* maps to convert between proximity domain and logical node ID */ | ||
44 | int __cpuinitdata pxm_to_node_map[MAX_PXM_DOMAINS] | ||
45 | = { [0 ... MAX_PXM_DOMAINS - 1] = NID_INVAL }; | ||
46 | int __cpuinitdata node_to_pxm_map[MAX_NUMNODES] | ||
47 | = { [0 ... MAX_NUMNODES - 1] = PXM_INVAL }; | ||
48 | |||
39 | extern int __init acpi_table_parse_madt_family(enum acpi_table_id id, | 49 | extern int __init acpi_table_parse_madt_family(enum acpi_table_id id, |
40 | unsigned long madt_size, | 50 | unsigned long madt_size, |
41 | int entry_id, | 51 | int entry_id, |
42 | acpi_madt_entry_handler handler, | 52 | acpi_madt_entry_handler handler, |
43 | unsigned int max_entries); | 53 | unsigned int max_entries); |
44 | 54 | ||
55 | int __cpuinit pxm_to_node(int pxm) | ||
56 | { | ||
57 | if (pxm < 0) | ||
58 | return NID_INVAL; | ||
59 | return pxm_to_node_map[pxm]; | ||
60 | } | ||
61 | |||
62 | int __cpuinit node_to_pxm(int node) | ||
63 | { | ||
64 | if (node < 0) | ||
65 | return PXM_INVAL; | ||
66 | return node_to_pxm_map[node]; | ||
67 | } | ||
68 | |||
69 | int __cpuinit acpi_map_pxm_to_node(int pxm) | ||
70 | { | ||
71 | int node = pxm_to_node_map[pxm]; | ||
72 | |||
73 | if (node < 0){ | ||
74 | if (nodes_weight(nodes_found_map) >= MAX_NUMNODES) | ||
75 | return NID_INVAL; | ||
76 | node = first_unset_node(nodes_found_map); | ||
77 | pxm_to_node_map[pxm] = node; | ||
78 | node_to_pxm_map[node] = pxm; | ||
79 | node_set(node, nodes_found_map); | ||
80 | } | ||
81 | |||
82 | return node; | ||
83 | } | ||
84 | |||
85 | void __cpuinit acpi_unmap_pxm_to_node(int node) | ||
86 | { | ||
87 | int pxm = node_to_pxm_map[node]; | ||
88 | pxm_to_node_map[pxm] = NID_INVAL; | ||
89 | node_to_pxm_map[node] = PXM_INVAL; | ||
90 | node_clear(node, nodes_found_map); | ||
91 | } | ||
92 | |||
45 | void __init acpi_table_print_srat_entry(acpi_table_entry_header * header) | 93 | void __init acpi_table_print_srat_entry(acpi_table_entry_header * header) |
46 | { | 94 | { |
47 | 95 | ||