Re: PROBLEM: Off-by-one bug on sun4u SMP

From: Ryan Davis
Date: Fri Jun 11 2010 - 00:01:43 EST

On Thu, Jun 10, 2010 at 5:37 PM, David Miller <davem@xxxxxxxxxxxxx> wrote:
> From: Ryan Davis <iconoclasmandheresy@xxxxxxxxx>
> Date: Thu, 10 Jun 2010 11:05:09 -0700
>> On at least some sun4u machines, the CPU numbering starts at one not 0.
>> This causes an off-by-one bug as other parts of the code assume
>> zero-based numbering.
>> If you set max-cpus in the kernel config to the actual number of CPUs,
>> the last CPU will be ignored and unused.
>> This is because the CPU numbering starts at 1 but the code to check
>> against max-cpus assumes a zero-based numbering.
>> On my computer: Sun Ultra 60 2x450mhz Ultrasparc.
>> Building with max-cpus of 2 ignores the second cpu because 2 (one
>> based cpu number) >= 2 (zero based max cpus)
>> Rebuilding with a larger max-cpus is a workaround but non optimal.
> max-cpus means "one larger than the maximum PHYSICAL cpu number", not
> the number of cpus.  That's what this setting means, at least on
> sparc64.

OK... so there are no kernel data structures allocated for CPU #0
which is not present? It is my understanding that this is not the case
but I could be wrong. If this is true, then a chunk of kernel memory
is wasted tor the phantom CPU #0.

If this is the desired behavior then the semantics of the setting are
questionable, since a kernel compiled for 2 cpus will only run on 1...

A quick search was unable to find documentation on this quirk. Perhaps
you could point me at some?

Those who will not reason, are bigots, those who cannot, are fools,
and those who dare not, are slaves.
-- Lord Byron
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at
Please read the FAQ at