• Denys Vlasenko's avatar
    x86/asm/entry/64: Use PUSH instructions to build pt_regs on stack · 9ed8e7d8
    Denys Vlasenko authored
    With this change, on SYSCALL64 code path we are now populating
    pt_regs->cs, pt_regs->ss and pt_regs->rcx unconditionally and
    therefore don't need to do that in FIXUP_TOP_OF_STACK.
    
    We lose a number of large instructions there:
    
        text    data     bss     dec     hex filename
       13298       0       0   13298    33f2 entry_64_before.o
       12978       0       0   12978    32b2 entry_64.o
    
    What's more important, we convert two "MOVQ $imm,off(%rsp)" to
    "PUSH $imm" (the ones which fill pt_regs->cs,ss).
    
    Before this patch, placing them on fast path was slowing it down
    by two cycles: this form of MOV is very large, 12 bytes, and
    this probably reduces decode bandwidth to one instruction per cycle
    when CPU sees them.
    
    Therefore they were living in FIXUP_TOP_OF_STACK instead (away
    from fast path).
    
    "PUSH $imm" is a small 2-byte instruction. Moving it to fast path does
    not slow it down in my measurements.
    Signed-off-by: default avatarDenys Vlasenko <dvlasenk@redhat.com>
    Acked-by: default avatarBorislav Petkov <bp@suse.de>
    Acked-by: default avatarAndy Lutomirski <luto@kernel.org>
    Cc: Alexei Starovoitov <ast@plumgrid.com>
    Cc: Andy Lutomirski <luto@amacapital.net>
    Cc: Borislav Petkov <bp@alien8.de>
    Cc: Frederic Weisbecker <fweisbec@gmail.com>
    Cc: H. Peter Anvin <hpa@zytor.com>
    Cc: Kees Cook <keescook@chromium.org>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Cc: Oleg Nesterov <oleg@redhat.com>
    Cc: Steven Rostedt <rostedt@goodmis.org>
    Cc: Will Drewry <wad@chromium.org>
    Link: http://lkml.kernel.org/r/1426785469-15125-3-git-send-email-dvlasenk@redhat.comSigned-off-by: default avatarIngo Molnar <mingo@kernel.org>
    9ed8e7d8
entry_64.S 41.8 KB