diff options
author | Brian Gerst <brgerst@gmail.com> | 2020-03-13 15:51:42 -0400 |
---|---|---|
committer | Thomas Gleixner <tglx@linutronix.de> | 2020-03-21 16:03:24 +0100 |
commit | 25c619e59b395a8c970d339f9c714302738e350e (patch) | |
tree | 74567402d083b53756dfafac858c9ff6f70168ca /arch/x86/entry/common.c | |
parent | 121b32a58a3af89a780cf194ce3769fc4120e574 (diff) |
x86/entry/32: Enable pt_regs based syscalls
Enable pt_regs based syscalls for 32-bit. This makes the 32-bit native
kernel consistent with the 64-bit kernel, and improves the syscall
interface by not needing to push all 6 potential arguments onto the stack.
Signed-off-by: Brian Gerst <brgerst@gmail.com>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Reviewed-by: Dominik Brodowski <linux@dominikbrodowski.net>
Link: https://lkml.kernel.org/r/20200313195144.164260-17-brgerst@gmail.com
Diffstat (limited to 'arch/x86/entry/common.c')
-rw-r--r-- | arch/x86/entry/common.c | 15 |
1 files changed, 0 insertions, 15 deletions
diff --git a/arch/x86/entry/common.c b/arch/x86/entry/common.c index 149bf54501ff..6062e8ebc315 100644 --- a/arch/x86/entry/common.c +++ b/arch/x86/entry/common.c @@ -333,20 +333,7 @@ static __always_inline void do_syscall_32_irqs_on(struct pt_regs *regs) if (likely(nr < IA32_NR_syscalls)) { nr = array_index_nospec(nr, IA32_NR_syscalls); -#ifdef CONFIG_IA32_EMULATION regs->ax = ia32_sys_call_table[nr](regs); -#else - /* - * It's possible that a 32-bit syscall implementation - * takes a 64-bit parameter but nonetheless assumes that - * the high bits are zero. Make sure we zero-extend all - * of the args. - */ - regs->ax = ia32_sys_call_table[nr]( - (unsigned int)regs->bx, (unsigned int)regs->cx, - (unsigned int)regs->dx, (unsigned int)regs->si, - (unsigned int)regs->di, (unsigned int)regs->bp); -#endif /* CONFIG_IA32_EMULATION */ } syscall_return_slowpath(regs); @@ -439,9 +426,7 @@ __visible long do_fast_syscall_32(struct pt_regs *regs) } #endif -#ifdef CONFIG_X86_64 SYSCALL_DEFINE0(ni_syscall) { return -ENOSYS; } -#endif |