• Arnd Bergmann's avatar
    x86: Mark native_set_p4d() as __always_inline · 046c0dbe
    Arnd Bergmann authored
    When CONFIG_OPTIMIZE_INLINING is enabled, the function native_set_p4d()
    may not be fully inlined into the caller, resulting in a false-positive
    warning about an access to the __pgtable_l5_enabled variable from a
    non-__init function, despite the original caller being an __init function:
    
    WARNING: vmlinux.o(.text.unlikely+0x1429): Section mismatch in reference from the function native_set_p4d() to the variable .init.data:__pgtable_l5_enabled
    WARNING: vmlinux.o(.text.unlikely+0x1429): Section mismatch in reference from the function native_p4d_clear() to the variable .init.data:__pgtable_l5_enabled
    
    The function native_set_p4d() references the variable __initdata
    __pgtable_l5_enabled.  This is often because native_set_p4d lacks a
    __initdata annotation or the annotation of __pgtable_l5_enabled is wrong.
    
    Marking the native_set_p4d function and its caller native_p4d_clear()
    avoids this problem.
    
    I did not bisect the original cause, but I assume this is related to the
    recent rework that turned pgtable_l5_enabled() into an inline function,
    which in turn caused the compiler to make different inlining decisions.
    
    Fixes: ad3fe525 ("x86/mm: Unify pgtable_l5_enabled usage in early boot code")
    Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
    Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
    Acked-by: default avatarKirill A. Shutemov <kirill.shutemov@linux.intel.com>
    Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Cc: Dave Hansen <dave.hansen@linux.intel.com>
    Cc: "H. Peter Anvin" <hpa@zytor.com>
    Cc: Andrew Morton <akpm@linux-foundation.org>
    Cc: Zi Yan <zi.yan@cs.rutgers.edu>
    Cc: Naoya Horiguchi <n-horiguchi@ah.jp.nec.com>
    Link: https://lkml.kernel.org/r/20180605113715.1133726-1-arnd@arndb.de
    046c0dbe
pgtable_64.h 8.88 KB