Skip to content
  • Russell King's avatar
    ARM: Fix __cpuexit section mismatch warnings · 90140c30
    Russell King authored
    
    
    Fix:
    
    WARNING: vmlinux.o(.text+0x247c): Section mismatch in reference from the function cpu_idle() to the function .cpuexit.text:cpu_die()
    The function cpu_idle() references a function in an exit section.
    Often the function cpu_die() has valid usage outside the exit section
    and the fix is to remove the __cpuexit annotation of cpu_die.
    
    WARNING: vmlinux.o(.cpuexit.text+0x3c): Section mismatch in reference from the function cpu_die() to the function .cpuinit.text:secondary_start_kernel()
    The function __cpuexit cpu_die() references
    a function __cpuinit secondary_start_kernel().
    This is often seen when error handling in the exit function
    uses functionality in the init path.
    The fix is often to remove the __cpuinit annotation of
    secondary_start_kernel() so it may be used outside an init section.
    
    Sam says:
    > The annotation of cpu_die() is wrong.
    > To be annotated __cpuexit the function shall:
    > - be used in exit context and only in exit context with HOTPLUG_CPU=n
    > - be used outside exit context with HOTPLUG_CPU=y
    
    So, this also means __cpu_disable(), __cpu_die() and twd_timer_stop() are
    also wrong.  However, removing __cpuexit from cpu_die() creates:
    
    WARNING: vmlinux.o(.text+0x6834): Section mismatch in reference from the function cpu_die() to the function .cpuinit.text:secondary_start_kernel()
    The function cpu_die() references
    the function __cpuinit secondary_start_kernel().
    This is often because cpu_die lacks a __cpuinit
    annotation or the annotation of secondary_start_kernel is wrong.
    
    so fix this using __ref.
    
    Signed-off-by: default avatarRussell King <rmk+kernel@arm.linux.org.uk>
    Acked-by: default avatarSam Ravnborg <sam@ravnborg.org>
    90140c30