On 01/15/2018 03:35 PM, Greg Kroah-Hartman wrote: > 4.9-stable review patch. If anyone has any objections, please let me know. > > ------------------ > > From: Andrey Ryabinin <aryabinin@xxxxxxxxxxxxx> > > commit 196bd485ee4f03ce4c690bfcf38138abfcd0a4bc upstream. > > Currently we use current_stack_pointer() function to get the value > of the stack pointer register. Since commit: > > f5caf621ee35 ("x86/asm: Fix inline asm call constraints for Clang") > > ... we have a stack register variable declared. It can be used instead of > current_stack_pointer() function which allows to optimize away some > excessive "mov %rsp, %<dst>" instructions: > > -mov %rsp,%rdx > -sub %rdx,%rax > -cmp $0x3fff,%rax > -ja ffffffff810722fd <ist_begin_non_atomic+0x2d> > > +sub %rsp,%rax > +cmp $0x3fff,%rax > +ja ffffffff810722fa <ist_begin_non_atomic+0x2a> > > Remove current_stack_pointer(), rename __asm_call_sp to current_stack_pointer > and use it instead of the removed function. > > Signed-off-by: Andrey Ryabinin <aryabinin@xxxxxxxxxxxxx> > Reviewed-by: Josh Poimboeuf <jpoimboe@xxxxxxxxxx> > Cc: Andy Lutomirski <luto@xxxxxxxxxx> > Cc: Linus Torvalds <torvalds@xxxxxxxxxxxxxxxxxxxx> > Cc: Peter Zijlstra <peterz@xxxxxxxxxxxxx> > Cc: Thomas Gleixner <tglx@xxxxxxxxxxxxx> > Link: http://lkml.kernel.org/r/20170929141537.29167-1-aryabinin@xxxxxxxxxxxxx > Signed-off-by: Ingo Molnar <mingo@xxxxxxxxxx> > [dwmw2: We want ASM_CALL_CONSTRAINT for retpoline] If we want ASM_CALL_CONSTRAINT it would be more correct to backport f5caf621ee35 ("x86/asm: Fix inline asm call constraints for Clang") and some fixes for it: 520a13c530ae ("x86/asm: Fix inline asm call constraints for GCC 4.4") ca26cffa4e4a ("x86/asm: Allow again using asm.h when building for the 'bpf' clang target") Because ASM_CALL_CONSTRAINT added in f5caf621ee35, not in this patch. The end result looks fine though. So it's ok to keep it that way. > Signed-off-by: David Woodhouse <dwmw@xxxxxxxxxxxx> > Signed-off-by: Greg Kroah-Hartman <gregkh@xxxxxxxxxxxxxxxxxxx> > --- > arch/x86/include/asm/asm.h | 11 +++++++++++ > arch/x86/include/asm/thread_info.h | 11 ----------- > arch/x86/kernel/irq_32.c | 6 +++--- > arch/x86/kernel/traps.c | 2 +- > arch/x86/mm/tlb.c | 2 +- > 5 files changed, 16 insertions(+), 16 deletions(-) > > --- a/arch/x86/include/asm/asm.h > +++ b/arch/x86/include/asm/asm.h > @@ -125,4 +125,15 @@ > /* For C file, we already have NOKPROBE_SYMBOL macro */ > #endif > > +#ifndef __ASSEMBLY__ > +/* > + * This output constraint should be used for any inline asm which has a "call" > + * instruction. Otherwise the asm may be inserted before the frame pointer > + * gets set up by the containing function. If you forget to do this, objtool > + * may print a "call without frame pointer save/setup" warning. > + */ > +register unsigned long current_stack_pointer asm(_ASM_SP); > +#define ASM_CALL_CONSTRAINT "+r" (current_stack_pointer) > +#endif > + > #endif /* _ASM_X86_ASM_H */