Re: [PATCH] lscpu: Fix issue found on CPU hot-remove

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Wed, 2012-11-07 at 16:29 -0700, Toshi Kani wrote:
> On Wed, 2012-11-07 at 12:47 +0100, Karel Zak wrote:
> > On Tue, Oct 23, 2012 at 01:49:46PM -0600, Toshi Kani wrote:
> > > 1) The system has 4 CPUs
> > >   $ lscpu -a -e
> > >   CPU NODE SOCKET CORE L1d:L1i:L2 ONLINE
> > >   0   0    0      0    0:0:0      yes
> > >   1   0    1      1    1:1:1      yes
> > >   2   0    2      2    2:2:2      yes
> > >   3   0    3      3    3:3:3      yes
> > > 
> > > 2) Eject cpu2
> > >   # echo 1 > /sys/bus/acpi/devices/LNXCPU:02/eject
> > > 
> > > 3) lscpu no longer recognizes cpu3 after cpu2 is ejected
> > >   $ lscpu -a -e
> > >   CPU NODE SOCKET CORE L1d:L1i:L2 ONLINE
> > >   0   0    0      0    0:0:0      yes
> > >   1   0    1      1    1:1:1      yes
> > > 
> > > The following changes are made to address this issue.
> > >  - Use maxcpus to allocate and parse bitmaps.
> > >  - Set desc->ncpu from cpu/present, which includes both on-line
> > >    and off-line CPUs.
> > 
> >  In the directory tests we have a dump from some strange machine
> > 
> >     tests/ts/lscpu/dumps/sparc64-UltraSparc-T1.tar.gz
> > 
> >  where is 32 /sys/devices/system/cpu/cpu[0-9]* subdirectories, but the
> >  present mask is 0-23, all the masks from the dump:
> > 
> >  present: 0-23
> >  possible: 0-31
> >  online: 0-23
> >  offline: 24-31
> >  count: 32      (means ls -d sys/devices/system/cpu/cpu[0-9]* | wc -l)
> > 
> >  strange, right? But I guess we can ignore this dump, according to
> >  kernel Documentation/cpu-hotplug.txt the cpu[0-9]* subdirectories
> >  have to follow the present mask. Maybe the dump is broken or so..
> 
> Hi Karel,
> 
> Thanks for the updated patch.  It looks good.  I have tested it on my
> setup and it worked fine as well.
> 
> I agree that the present mask and cpu directories need to be consistent.
> I looked at the kernel code and found the following change, which might
> be the cause of this issue.
> 
> ====
> commit 9f13a1fd452f11c18004ba2422a6384b424ec8a9
> Author: Ben Hutchings <ben@xxxxxxxxxxxxxxx>
> Date:   Tue Jan 10 03:04:32 2012 +0000
> 
>     cpu: Register a generic CPU device on architectures that currently
> do not
>     
>     frv, h8300, m68k, microblaze, openrisc, score, um and xtensa
> currently
>     do not register a CPU device.  Add the config option
> GENERIC_CPU_DEVICES
>     which causes a generic CPU device to be registered for each present
> CPU,
>     and make all these architectures select it.
>     
>     Richard Weinberger <richard@xxxxxx> covered UML and suggested using
>     per_cpu.
>     
>     Signed-off-by: Ben Hutchings <ben@xxxxxxxxxxxxxxx>
>     Signed-off-by: Linus Torvalds <torvalds@xxxxxxxxxxxxxxxxxxxx>
> ====
> 
> 
> Hi Ben,
> 
> In the change log above, you described that a generic CPU device to be
> registered for each "present" CPU.  However, in the code below, it used
> for_each_possible_cpu(), instead of for_each_present_cpu().  Is this
> what you intended?
[...]

I think the distinction doesn't matter - the GENERIC_CPU_DEVICES code
does not support hotplug and therefore can only be used if present ==
possible.

Ben.

-- 
Ben Hutchings
The program is absolutely right; therefore, the computer must be wrong.

Attachment: signature.asc
Description: This is a digitally signed message part


[Index of Archives]     [Netdev]     [Ethernet Bridging]     [Linux Wireless]     [Kernel Newbies]     [Security]     [Linux for Hams]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Linux Admin]     [Samba]

  Powered by Linux