Skip to content
  • Nadav Amit's avatar
    x86/paravirt: Work around GCC inlining bugs when compiling paravirt ops · 494b5168
    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.)
    
    In this patch we wrap the paravirt call section tricks in a macro,
    to hide it from GCC.
    
    The effect of the patch is a more aggressive inlining, which also
    causes a size increase of kernel.
    
          text     data     bss      dec     hex  filename
      18147336 10226688 2957312 31331336 1de1408  ./vmlinux before
      18162555 10226288 2957312 31346155 1de4deb  ./vmlinux after (+14819)
    
    The number of static text symbols (non-inlined functions) goes down:
    
      Before: 40053
      After:  39942 (-111)
    
    [ mingo: Rewrote the changelog. ]
    
    Tested-by: default avatarKees Cook <keescook@chromium.org>
    Signed-off-by: default avatarNadav Amit <namit@vmware.com>
    Reviewed-by: default avatarJuergen Gross <jgross@suse.com>
    Acked-by: default avatarPeter Zijlstra (Intel) <peterz@infradead.org>
    Cc: Alok Kataria <akataria@vmware.com>
    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: Linus Torvalds <torvalds@linux-foundation.org>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Cc: virtualization@lists.linux-foundation.org
    Link: http://lkml.kernel.org/r/20181003213100.189959-8-namit@vmware.com
    
    
    Signed-off-by: default avatarIngo Molnar <mingo@kernel.org>
    494b5168