• Nadav Amit's avatar
    x86/refcount: Work around GCC inlining bug · 9e1725b4
    Nadav Amit authored
    As described in:
    
      77b0bf55: ("kbuild/Makefile: Prepare for using macros in inline assembly code to work around asm() related GCC inlining bugs")
    
    GCC's inlining heuristics are broken with common asm() patterns used in
    kernel code, resulting in the effective disabling of inlining.
    
    The workaround is to set an assembly macro and call it from the inline
    assembly block. As a result GCC considers the inline assembly block as
    a single instruction. (Which it isn't, but that's the best we can get.)
    
    This patch allows GCC to inline simple functions such as __get_seccomp_filter().
    
    To no-one's surprise the result is that GCC performs more aggressive (read: correct)
    inlining decisions in these senarios, which reduces the kernel size and presumably
    also speeds it up:
    
          text     data     bss      dec     hex  filename
      18140970 10225412 2957312 31323694 1ddf62e  ./vmlinux before
      18140140 10225284 2957312 31322736 1ddf270  ./vmlinux after (-958)
    
    16 fewer static text symbols:
    
       Before: 40302
        After: 40286 (-16)
    
    these got inlined instead.
    
    Functions such as kref_get(), free_user(), fuse_file_get() now get inlined. Hurray!
    
    [ mingo: Rewrote the changelog. ]
    Tested-by: default avatarKees Cook <keescook@chromium.org>
    Signed-off-by: default avatarNadav Amit <namit@vmware.com>
    Acked-by: default avatarPeter Zijlstra (Intel) <peterz@infradead.org>
    Cc: Andy Lutomirski <luto@amacapital.net>
    Cc: Borislav Petkov <bp@alien8.de>
    Cc: Brian Gerst <brgerst@gmail.com>
    Cc: Denys Vlasenko <dvlasenk@redhat.com>
    Cc: H. Peter Anvin <hpa@zytor.com>
    Cc: Jan Beulich <JBeulich@suse.com>
    Cc: Josh Poimboeuf <jpoimboe@redhat.com>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Link: http://lkml.kernel.org/r/20181003213100.189959-5-namit@vmware.comSigned-off-by: default avatarIngo Molnar <mingo@kernel.org>
    9e1725b4
refcount.h 3.1 KB