ARM CPU Hotplug breakage on mach-shmobile and KZM9D

Simon Horman horms at verge.net.au
Tue Jul 30 21:04:04 EDT 2013


On Tue, Jul 30, 2013 at 10:27:51AM -0400, Paul Gortmaker wrote:
> On 13-07-30 03:49 AM, Simon Horman wrote:
> > [ Cc Paul Gortmaker ]
> > 
> > On Thu, Jul 25, 2013 at 10:06:07AM +0900, Simon Horman wrote:
> >> On Thu, Jul 25, 2013 at 12:15:49AM +0900, Magnus Damm wrote:
> >>> Hi everyone,
> >>>
> >>> Bad news: CPU Hotplug on KZM9D seems broken on recent kernels.
> >>>
> >>> On renesas-next-20130710 or earlier I can perform the following:
> >>>
> >>> # echo 0 > /sys/devices/system/cpu/cpu1/online
> >>> CPU1: shutdown
> >>> # echo 1 > /sys/devices/system/cpu/cpu1/online
> >>> CPU1: Booted secondary processor
> >>> #
> >>>
> >>> While on more recent kernels the hotplug boot fails. This may be
> >>> related to the move to v3.11-rc. The tag renesas-next-20130710
> >>> surprisingly seems to be the final kernel based on v3.10-rc before
> >>> jumping to v3.11-rc.
> >>>
> >>> I wonder, do other ARM platforms have working CPU Hotplug in v3.11-rc?
> >>
> >> I have a snowball that I could test if you think it would be useful.
> > 
> > Unfortunately getting snowball to work turned out to be rather painful.
> > So instead I bisected the problem on the KZM9G (N.b: the D in the subject
> > seems to be incorrect :^)
> > 
> > The result is that the following patch, added in v3.11-rc1,
> > appears to be the culprit.
> 
> Double check that you have this commit present:
>  ---------------
> commit 8c69d7af12265e5be9326110b695e010b47505bd
> Author: Stephen Warren <swarren at nvidia.com>
> Date:   Fri Jul 5 22:59:42 2013 +0100
> 
>     ARM: 7780/1: add missing linker section markup to head-common.S
>  ---------------
> 
> as I think you are reporting the same problem that it fixed.

Unfortunately that does not seem to resolve the problem that I am seeing.
I have tried both v3.11-rc3 and 22f0a27367742f65130c0fb25ef00f7297e032c1
with 8c69d7af12265e5be9326110b695e010b47505bd cherry picked on top and
in both cases I see:

# echo 0 > /sys/devices/system/cpu/cpu1/online
CPU1: shutdown
# echo 1 > /sys/devices/system/cpu/cpu1/online
CPU1: failed to come online

> Thanks,
> Paul.
> --
> 
> > 
> > commit 22f0a27367742f65130c0fb25ef00f7297e032c1
> > Author: Paul Gortmaker <paul.gortmaker at windriver.com>
> > Date:   Mon Jun 17 18:34:14 2013 -0400
> > 
> >     init.h: remove __cpuinit sections from the kernel
> >     
> >     The __cpuinit type of throwaway sections might have made sense
> >     some time ago when RAM was more constrained, but now the savings
> >     do not offset the cost and complications.  For example, the fix in
> >     commit 5e427ec2d0 ("x86: Fix bit corruption at CPU resume time")
> >     is a good example of the nasty type of bugs that can be created
> >     with improper use of the various __init prefixes.
> >     
> >     After a discussion on LKML[1] it was decided that cpuinit should go
> >     the way of devinit and be phased out.  Once all the users are gone,
> >     we can then finally remove the macros themselves from linux/init.h.
> >     
> >     As an interim step, we can dummy out the macros to be no-ops, and
> >     this will allow us to avoid a giant tree-wide patch, and instead
> >     we can feed in smaller chunks mainly via the arch/ trees.  This
> >     is in keeping with commit 78d86c213f28193082b5d8a1a424044b7ba406f1
> >     ("init.h: Remove __dev* sections from the kernel")
> >     
> >     We don't strictly need to dummy out the macros to do this, but if
> >     we don't then some harmless section mismatch warnings may temporarily
> >     result.  For example, notify_cpu_starting() and cpu_up() are arch
> >     independent (kernel/cpu.c) and are flagged as __cpuinit.  And hence
> >     the calling functions in the arch specific code are also expected
> >     to be __cpuinit -- if not, then we get the section mismatch warning.
> >     
> >     Two of the three __CPUINIT variants are not used whatsoever, and
> >     so they are simply removed directly at this point in time.
> >     
> >     [1] https://lkml.org/lkml/2013/5/20/589
> >     
> >     Signed-off-by: Paul Gortmaker <paul.gortmaker at windriver.com>
> > 
> > diff --git a/include/linux/init.h b/include/linux/init.h
> > index 8618147..e73f2b70 100644
> > --- a/include/linux/init.h
> > +++ b/include/linux/init.h
> > @@ -93,13 +93,13 @@
> >  
> >  #define __exit          __section(.exit.text) __exitused __cold notrace
> >  
> > -/* Used for HOTPLUG_CPU */
> > -#define __cpuinit        __section(.cpuinit.text) __cold notrace
> > -#define __cpuinitdata    __section(.cpuinit.data)
> > -#define __cpuinitconst   __constsection(.cpuinit.rodata)
> > -#define __cpuexit        __section(.cpuexit.text) __exitused __cold notrace
> > -#define __cpuexitdata    __section(.cpuexit.data)
> > -#define __cpuexitconst   __constsection(.cpuexit.rodata)
> > +/* temporary, until all users are removed */
> > +#define __cpuinit
> > +#define __cpuinitdata
> > +#define __cpuinitconst
> > +#define __cpuexit
> > +#define __cpuexitdata
> > +#define __cpuexitconst
> >  
> >  /* Used for MEMORY_HOTPLUG */
> >  #define __meminit        __section(.meminit.text) __cold notrace
> > @@ -118,9 +118,8 @@
> >  #define __INITRODATA	.section	".init.rodata","a",%progbits
> >  #define __FINITDATA	.previous
> >  
> > -#define __CPUINIT        .section	".cpuinit.text", "ax"
> > -#define __CPUINITDATA    .section	".cpuinit.data", "aw"
> > -#define __CPUINITRODATA  .section	".cpuinit.rodata", "a"
> > +/* temporary, until all users are removed */
> > +#define __CPUINIT
> >  
> >  #define __MEMINIT        .section	".meminit.text", "ax"
> >  #define __MEMINITDATA    .section	".meminit.data", "aw"
> > 
> --
> To unsubscribe from this list: send the line "unsubscribe linux-sh" in
> the body of a message to majordomo at vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> 



More information about the linux-arm-kernel mailing list