• Paul Gortmaker's avatar
    x86: Fix section mismatch on load_ucode_ap · 94978599
    Paul Gortmaker authored
    We are in the process of removing all the __cpuinit annotations.
    While working on making that change, an existing problem was
    made evident:
    
      WARNING: arch/x86/kernel/built-in.o(.text+0x198f2): Section mismatch
      in reference from the function cpu_init() to the function
      .init.text:load_ucode_ap()   The function cpu_init() references
      the function __init load_ucode_ap().  This is often because cpu_init
      lacks a __init annotation or the annotation of load_ucode_ap is wrong.
    
    This now appears because in my working tree, cpu_init() is no longer
    tagged as __cpuinit, and so the audit picks up the mismatch.  The 2nd
    hypothesis from the audit is the correct one, as there was an incorrect
    __init tag on the prototype in the header (but __cpuinit was used on
    the function itself.)
    
    The audit is telling us that the prototype's __init annotation took
    effect and the function did land in the .init.text section.  Checking
    with objdump on a mainline tree that still has __cpuinit shows that
    the __cpuinit on the function takes precedence over the __init on the
    prototype, but that won't be true once we make __cpuinit a no-op.
    
    Even though we are removing __cpuinit, we temporarily align both
    the function and the prototype on __cpuinit so that the changeset
    can be applied to stable trees  if desired.
    
    [ hpa: build fix only, no object code change ]
    
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Cc: Ingo Molnar <mingo@redhat.com>
    Cc: "H. Peter Anvin" <hpa@zytor.com>
    Cc: stable <stable@vger.kernel.org> # 3.9+
    Signed-off-by: default avatarPaul Gortmaker <paul.gortmaker@windriver.com>
    Link: http://lkml.kernel.org/r/1371654926-11729-1-git-send-email-paul.gortmaker@windriver.comSigned-off-by: default avatarH. Peter Anvin <hpa@linux.intel.com>
    94978599
microcode.h 1.8 KB