2003-06-04 21:18:56

by Matthew Dobson

[permalink] [raw]
Subject: [patch] use valid value when unmapping cpus

--- linux-2.5.70-vanilla/arch/i386/kernel/smpboot.c Mon Mar 24 14:00:35 2003
+++ linux-2.5.70-vanilla/arch/i386/kernel/smpboot.c.fixed Wed Apr 2 18:23:06 2003
@@ -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 */


Attachments:
i386_smpboot_fix.patch (398.00 B)

2003-06-09 05:06:49

by Matt Mackall

[permalink] [raw]
Subject: Re: [patch] use valid value when unmapping cpus

On Wed, Jun 04, 2003 at 02:26:22PM -0700, Matthew Dobson wrote:
> 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.

--
Matt Mackall : http://www.selenic.com : of or relating to the moon

2003-06-09 16:52:58

by Matthew Dobson

[permalink] [raw]
Subject: Re: [patch] use valid value when unmapping cpus

Matt Mackall wrote:
> On Wed, Jun 04, 2003 at 02:26:22PM -0700, Matthew Dobson wrote:
>
>>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