aboutsummaryrefslogtreecommitdiffstats
path: root/arch
diff options
context:
space:
mode:
authorAndi Kleen <ak@suse.de>2005-01-11 15:35:48 -0800
committerLinus Torvalds <torvalds@ppc970.osdl.org>2005-01-11 15:35:48 -0800
commit8f13ed2fa0cc179e1462f8d7c81dd4a62b7e0c88 (patch)
tree5303ede5fee6bbe5902fb9aa24fe42f825ada46b /arch
parent04a2b7d012f4ad13f22fe001cc13e657659b0924 (diff)
downloadhistory-8f13ed2fa0cc179e1462f8d7c81dd4a62b7e0c88.tar.gz
[PATCH] x86_64: Fix ACPI SRAT NUMA parsing
Fix fallout from the recent nodemask_t changes. The node ids assigned in the SRAT parser were off by one. I added a new first_unset_node() function to nodemask.h to allocate IDs sanely. Signed-off-by: Andi Kleen <ak@suse.de> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'arch')
-rw-r--r--arch/x86_64/mm/srat.c17
1 files changed, 10 insertions, 7 deletions
diff --git a/arch/x86_64/mm/srat.c b/arch/x86_64/mm/srat.c
index 1db7483a0564dc..aaf329373367dc 100644
--- a/arch/x86_64/mm/srat.c
+++ b/arch/x86_64/mm/srat.c
@@ -20,17 +20,20 @@
static struct acpi_table_slit *acpi_slit;
-static DECLARE_BITMAP(nodes_parsed, MAX_NUMNODES) __initdata;
+static nodemask_t nodes_parsed __initdata;
+static nodemask_t nodes_found __initdata;
static struct node nodes[MAX_NUMNODES] __initdata;
static __u8 pxm2node[256] __initdata = { [0 ... 255] = 0xff };
static __init int setup_node(int pxm)
{
- if (pxm2node[pxm] == 0xff) {
- if (num_online_nodes() >= MAX_NUMNODES)
+ unsigned node = pxm2node[pxm];
+ if (node == 0xff) {
+ if (nodes_weight(nodes_found) >= MAX_NUMNODES)
return -1;
- pxm2node[pxm] = num_online_nodes();
- node_set_online(num_online_nodes());
+ node = first_unset_node(nodes_found);
+ node_set(node, nodes_found);
+ pxm2node[pxm] = node;
}
return pxm2node[pxm];
}
@@ -140,7 +143,7 @@ acpi_numa_memory_affinity_init(struct acpi_table_memory_affinity *ma)
return;
}
nd = &nodes[node];
- if (!test_and_set_bit(node, &nodes_parsed)) {
+ if (!node_test_and_set(node, nodes_parsed)) {
nd->start = start;
nd->end = end;
} else {
@@ -171,7 +174,7 @@ int __init acpi_scan_nodes(unsigned long start, unsigned long end)
return -1;
}
for (i = 0; i < MAX_NUMNODES; i++) {
- if (!test_bit(i, &nodes_parsed))
+ if (!node_isset(i, nodes_parsed))
continue;
cutoff_node(i, start, end);
if (nodes[i].start == nodes[i].end)