On Thu, Jun 21, 2018 at 7:24 PM Ingo Molnar <mingo@xxxxxxxxxx> wrote: > * Nick Desaulniers <ndesaulniers@xxxxxxxxxx> wrote: > > > native_save_fl() is marked static inline, but by using it as > > a function pointer in arch/x86/kernel/paravirt.c, it MUST be outlined. > > > --- a/arch/x86/include/asm/irqflags.h > > +++ b/arch/x86/include/asm/irqflags.h > > @@ -13,7 +13,7 @@ > > * Interrupt control: > > */ > > > > -static inline unsigned long native_save_fl(void) > > +extern inline unsigned long native_save_fl(void) > > { > > unsigned long flags; > > > > What's the code generation effect of this on say a defconfig kernel vmlinux with > paravirt enabled? Starting with this patch set applied: $ make CC=gcc-8 -j46 $ objdump -d vmlinux | grep native_save_fl --context=3 ffffffff81059140 <native_save_fl>: ffffffff81059140: 9c pushfq ffffffff81059141: 58 pop %rax ffffffff81059142: c3 retq $ git checkout HEAD~3 $ make CC=gcc-8 -j46 $ objdump -d vmlinux | grep native_save_fl --context=3 ffffffff81079410 <native_save_fl>: ffffffff81079410: 9c pushfq ffffffff81079411: 58 pop %rax ffffffff81079412: c3 retq Mainly, this is to prevent the compiler from adding a stack protector to the outlined version, as the stack protector clobbers %rcx, but paravirt expects %rcx to be preserved. More info can be found: https://lkml.org/lkml/2018/5/24/1242-- Thanks, ~Nick Desaulniers -- To unsubscribe from this list: send the line "unsubscribe linux-kbuild" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html