linux_dsm_epyc7002/arch/x86
Denys Vlasenko 53e9accf0f x86/asm/entry/32: Do not use R9 in SYSCALL32 entry point
SYSENTER and SYSCALL 32-bit entry points differ in handling of
arg2 and arg6.

SYSENTER:
 * ecx  arg2
 * ebp  user stack
 * 0(%ebp) arg6

SYSCALL:
 * ebp  arg2
 * esp  user stack
 * 0(%esp) arg6

Sysenter code loads 0(%ebp) to %ebp right away.
(This destroys %ebp. It means we do not preserve it on return.
It's not causing problems since userspace VDSO code does not
depend on it, and SYSENTER insn can't be sanely used outside of
VDSO).

Syscall code loads 0(%ebp) to %r9. This allows to eliminate one
MOV insn (r9 is a register where arg6 should be for 64-bit ABI),
but on audit/ptrace code paths this requires juggling of r9 and
ebp: (1) ptrace expects arg6 to be in pt_regs->bp;
(2) r9 is callee-clobbered register and needs to be
saved/restored     around calls to C functions.

This patch changes syscall code to load 0(%ebp) to %ebp, making
it more similar to sysenter code. It's a bit smaller:

   text    data     bss     dec     hex filename
   1407       0       0    1407     57f ia32entry.o.before
   1391       0       0    1391     56f ia32entry.o

To preserve ABI compat, we restore ebp on exit.

Run-tested.

Signed-off-by: Denys Vlasenko <dvlasenk@redhat.com>
Cc: Alexei Starovoitov <ast@plumgrid.com>
Cc: Andrew Morton <akpm@linux-foundation.org>
Cc: Andy Lutomirski <luto@amacapital.net>
Cc: Borislav Petkov <bp@alien8.de>
Cc: Brian Gerst <brgerst@gmail.com>
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: Peter Zijlstra <peterz@infradead.org>
Cc: Steven Rostedt <rostedt@goodmis.org>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Will Drewry <wad@chromium.org>
Link: http://lkml.kernel.org/r/1433336169-18964-1-git-send-email-dvlasenk@redhat.com
Signed-off-by: Ingo Molnar <mingo@kernel.org>
2015-06-05 13:22:22 +02:00
..
boot * Avoid garbage names in efivarfs due to buggy firmware by zero'ing 2015-05-06 08:30:24 +02:00
configs
crypto crypto: x86/sha512_ssse3 - fixup for asm function prototype change 2015-04-24 20:09:01 +08:00
entry x86/asm/entry/32: Do not use R9 in SYSCALL32 entry point 2015-06-05 13:22:22 +02:00
ia32 x86/asm/entry: Move the compat syscall entry code to arch/x86/entry/ 2015-06-03 18:51:32 +02:00
include x86/asm/msr: Make wrmsrl_safe() a function 2015-06-05 09:41:22 +02:00
kernel x86/asm/entry: Move the vsyscall code to arch/x86/entry/vsyscall/ 2015-06-04 07:37:37 +02:00
kvm kvm: x86: fix kvmclock update protocol 2015-04-27 15:48:59 +02:00
lguest x86/asm/entry: Remove SYSCALL_VECTOR 2015-05-10 12:34:28 +02:00
lib x86/asm/entry: Move the 'thunk' functions to arch/x86/entry/ 2015-06-04 07:37:33 +02:00
math-emu
mm Merge branch 'x86-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip 2015-05-06 10:57:37 -07:00
net x86/debug: Remove perpetually broken, unmaintainable dwarf annotations 2015-06-02 07:57:48 +02:00
oprofile
pci x86/PCI/ACPI: Make all resources except [io 0xcf8-0xcff] available on PCI bus 2015-04-30 22:17:34 +02:00
platform TTY/Serial patches for 4.1-rc1 2015-04-21 09:33:10 -07:00
power x86/asm, x86/power/hibernate: Use local labels in asm 2015-04-15 11:37:51 +02:00
purgatory
realmode
tools
um x86/asm/entry: Move the 'thunk' functions to arch/x86/entry/ 2015-06-04 07:37:33 +02:00
video
xen x86/entry: Define 'cpu_current_top_of_stack' for 64-bit code 2015-05-08 13:50:02 +02:00
.gitignore
Kbuild x86/asm/entry, x86/vdso: Move the vDSO code to arch/x86/entry/vdso/ 2015-06-03 18:51:37 +02:00
Kconfig Initial ACPI support for arm64: 2015-04-24 08:23:45 -07:00
Kconfig.cpu
Kconfig.debug
Makefile x86/asm/entry: Move the arch/x86/syscalls/ definitions to arch/x86/entry/syscalls/ 2015-06-04 07:37:37 +02:00
Makefile_32.cpu
Makefile.um