aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/acpi/numa.c
diff options
context:
space:
mode:
authorYasunori Goto <y-goto@jp.fujitsu.com>2006-06-23 05:03:19 -0400
committerLinus Torvalds <torvalds@g5.osdl.org>2006-06-23 10:42:48 -0400
commit762834e8bf46bf41ce9034d062a7c1f8563175f3 (patch)
treefb134ef41772ba61050a08cc4ed92c50cd057658 /drivers/acpi/numa.c
parentd6277db4ab271862ed599da08d78961c70f00002 (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/acpi/numa.c')
-rw-r--r--drivers/acpi/numa.c48
1 files changed, 48 insertions, 0 deletions
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
37ACPI_MODULE_NAME("numa") 37ACPI_MODULE_NAME("numa")
38 38
39static 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 */
44int __cpuinitdata pxm_to_node_map[MAX_PXM_DOMAINS]
45 = { [0 ... MAX_PXM_DOMAINS - 1] = NID_INVAL };
46int __cpuinitdata node_to_pxm_map[MAX_NUMNODES]
47 = { [0 ... MAX_NUMNODES - 1] = PXM_INVAL };
48
39extern int __init acpi_table_parse_madt_family(enum acpi_table_id id, 49extern 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
55int __cpuinit pxm_to_node(int pxm)
56{
57 if (pxm < 0)
58 return NID_INVAL;
59 return pxm_to_node_map[pxm];
60}
61
62int __cpuinit node_to_pxm(int node)
63{
64 if (node < 0)
65 return PXM_INVAL;
66 return node_to_pxm_map[node];
67}
68
69int __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
85void __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
45void __init acpi_table_print_srat_entry(acpi_table_entry_header * header) 93void __init acpi_table_print_srat_entry(acpi_table_entry_header * header)
46{ 94{
47 95