Skip to contentSkip to conversation

use valid value when unmapping cpus

PATCH In review Matthew Dobson 2 participants 3 messages Jun 4, 2003 – Jun 9, 2003

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 use valid value when unmapping cpus

For some unknown reason, we stick a -1 in cpu_2_node when we unmap a cpu on i386. We're better off sticking a 0 in there, because at least 0 is a valid value if something references it. -1 is only going to cause problems at some point down the line. Besides, we initialize the array with 0's, so undoing it should return it to that same value.

Cheers!

-Matt

arch/i386/kernel/smpboot.c.fixed renamed from arch/i386/kernel/smpboot.c +1 -1
@@ -520,7 +520,7 @@
 	printk("Unmapping cpu %d from all nodes\n", cpu);
 	for (node = 0; node < MAX_NR_NODES; node ++)
 		node_2_cpu_mask[node] &= ~(1 << cpu);
-	cpu_2_node[cpu] = -1;
+	cpu_2_node[cpu] = 0;
 }
 #else /* !CONFIG_NUMA */
 
#1 lore raw
Quoted 4 lines · Matthew Dobson

For some unknown reason, we stick a -1 in cpu_2_node when we unmap a cpu on i386. We're better off sticking a 0 in there, because at least 0 is a valid value if something references it. -1 is only going to cause problems at some point down the line.

Problems down the line help you find the bogus dereference. Even better to stick a poison value in there.

Signature · 1 line
Matt Mackall : http://www.selenic.com : of or relating to the moon
#2 lore raw
Quoted 7 lines · Matt Mackall
Quoted 1 line · Matthew Dobson

For some unknown reason, we stick a -1 in cpu_2_node when we unmap a cpu on i386. We're better off sticking a 0 in there, because at least 0 is a valid value if something references it. -1 is only going to cause problems at some point down the line.

Problems down the line help you find the bogus dereference. Even better to stick a poison value in there.

Well, it's not really a dereference issue. The function, cpu_to_node() just returns an integer which is the node that particular CPU is on. This should always return a valid value. This is used in many places, often as a direct index into an array, and we shouldn't have to check its return value everywhere. The default behavior is to just return 0, because 0 is a valid node, even for UP/SMP. The array of CPU -> node mappings is initialized to 0's on i386 already, so unmapping a CPU should return this mapping to its uninitialized state.

Cheers!

-Matt