aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/acpi/numa.c
diff options
context:
space:
mode:
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