• Denys Vlasenko's avatar
    x86/asm/entry/64: Save R11 into pt_regs->flags on SYSCALL64 fastpath · 29722cd4
    Denys Vlasenko authored
    Before this patch, R11 was saved in pt_regs->r11.
    
    Which looks natural, but requires messy shuffling to/from iret
    frame whenever ptrace or e.g. sys_iopl() wants to modify flags -
    because that's how this register is used by SYSCALL/SYSRET.
    
    This patch saves R11 in pt_regs->flags, and uses that value for
    the SYSRET64 instruction. Shuffling is eliminated.
    
    FIXUP/RESTORE_TOP_OF_STACK are simplified.
    
    stub_iopl is no longer needed: pt_regs->flags needs no fixing up.
    
    Testing shows that syscall fast path is ~54.3 ns before
    and after the patch (on 2.7 GHz Sandy Bridge CPU).
    Signed-off-by: default avatarDenys Vlasenko <dvlasenk@redhat.com>
    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/1425926364-9526-2-git-send-email-dvlasenk@redhat.comSigned-off-by: default avatarIngo Molnar <mingo@kernel.org>
    29722cd4
entry_64.S 41.9 KB