Quellcode durchsuchen

[PATCH] x86-64: Clean up the SRAT node list before computing the hash function

Also use for_each_node_mask instead of hand crafted loops.

Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Andi Kleen vor 19 Jahren
Ursprung
Commit
e58e0d0312
1 geänderte Dateien mit 11 neuen und 9 gelöschten Zeilen
  1. 11 9
      arch/x86_64/mm/srat.c

+ 11 - 9
arch/x86_64/mm/srat.c

@@ -177,6 +177,14 @@ int __init acpi_scan_nodes(unsigned long start, unsigned long end)
 	int i;
 	if (acpi_numa <= 0)
 		return -1;
+
+	/* First clean up the node list */
+	for_each_node_mask(i, nodes_parsed) {
+		cutoff_node(i, start, end);
+		if (nodes[i].start == nodes[i].end)
+			node_clear(i, nodes_parsed);
+	}
+
 	memnode_shift = compute_hash_shift(nodes, nodes_weight(nodes_parsed));
 	if (memnode_shift < 0) {
 		printk(KERN_ERR
@@ -184,16 +192,10 @@ int __init acpi_scan_nodes(unsigned long start, unsigned long end)
 		bad_srat();
 		return -1;
 	}
-	for (i = 0; i < MAX_NUMNODES; i++) {
-		if (!node_isset(i, nodes_parsed))
-			continue;
-		cutoff_node(i, start, end);
-		if (nodes[i].start == nodes[i].end) { 
-			node_clear(i, nodes_parsed);
-			continue;
-		}
+
+	/* Finally register nodes */
+	for_each_node_mask(i, nodes_parsed)
 		setup_node_bootmem(i, nodes[i].start, nodes[i].end);
-	}
 	for (i = 0; i < NR_CPUS; i++) { 
 		if (cpu_to_node[i] == NUMA_NO_NODE)
 			continue;