----- "Michael Holzheu" <holzheu(a)linux.vnet.ibm.com> wrote:
Hi Dave,
I have a problem with a dump where I have defined five CPUs and two of
them are offline. In fact the logical CPUs are defined as follows:
0 on
1 on
2 off
3 off
4 on
The CPU online map looks correct:
crash> print/x *cpu_online_mask
$4 = {
bits = {0x13} ---> b10011
}
When I issue "ps" I see that all running tasks are idle, but the CPU
numbers are not correct (0,1,2 and not 0,1,4):
PID PPID CPU TASK ST %MEM VSZ RSS COMM
> 0 0 0 800ef0 RU 0.0 0 0 [swapper]
> 0 0 1 18c24240 RU 0.0 0 0 [swapper]
> 0 0 2 18c2c340 RU 0.0 0 0 [swapper]
I tried to debug the problem, but got stuck somewhere in "task.c". I
think there is a problem with the idle threads initialization, where the
online map is not considered.
Maybe you can see the bug immediately. Otherwise I will have spend more
effort for debugging that problem. I hope not :-)
Does "sys" show 5 or 3 cpus? I'm guessing it shows 3, but should show 5.
It looks like the s390/s390x files need to use "get_highest_cpu_online()-1"
(like x86_64 and ppc64) in order to determine the number of cpus to account
for. As it is now, they do this, and would therefore only account for the
first 3 cpus:
int
s390x_get_smp_cpus(void)
{
return get_cpus_online();
}
int
s390_get_smp_cpus(void)
{
return get_cpus_online();
}
Dave