aboutsummaryrefslogtreecommitdiffstats
path: root/arch/x86/entry/entry_32.S
diff options
context:
space:
mode:
authorAndy Lutomirski <luto@kernel.org>2016-03-09 16:24:32 -0500
committerIngo Molnar <mingo@kernel.org>2016-03-10 04:53:26 -0500
commita798f091113ef4999277dbe0483d37d04fa35b2e (patch)
tree25a795b4f3da2670f6b507eecc2f0d54c9b1f741 /arch/x86/entry/entry_32.S
parentfda57b2267e12de014069b1596a5438cf76fc7c6 (diff)
x86/entry/32: Change INT80 to be an interrupt gate
We want all of the syscall entries to run with interrupts off so that we can efficiently run context tracking before enabling interrupts. This will regress int $0x80 performance on 32-bit kernels by a couple of cycles. This shouldn't matter much -- int $0x80 is not a fast path. This effectively reverts: 657c1eea0019 ("x86/entry/32: Fix entry_INT80_32() to expect interrupts to be on") ... and fixes the same issue differently. Signed-off-by: Andy Lutomirski <luto@kernel.org> Cc: Andy Lutomirski <luto@amacapital.net> Cc: Borislav Petkov <bp@alien8.de> Cc: Brian Gerst <brgerst@gmail.com> Cc: Denys Vlasenko <dvlasenk@redhat.com> Cc: Frédéric Weisbecker <fweisbec@gmail.com> Cc: H. Peter Anvin <hpa@zytor.com> Cc: Linus Torvalds <torvalds@linux-foundation.org> Cc: Paolo Bonzini <pbonzini@redhat.com> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Rik van Riel <riel@redhat.com> Cc: Thomas Gleixner <tglx@linutronix.de> Link: http://lkml.kernel.org/r/59b4f90c9ebfccd8c937305dbbbca680bc74b905.1457558566.git.luto@kernel.org Signed-off-by: Ingo Molnar <mingo@kernel.org>
Diffstat (limited to 'arch/x86/entry/entry_32.S')
-rw-r--r--arch/x86/entry/entry_32.S8
1 files changed, 4 insertions, 4 deletions
diff --git a/arch/x86/entry/entry_32.S b/arch/x86/entry/entry_32.S
index 286efa342091..10868aa734dc 100644
--- a/arch/x86/entry/entry_32.S
+++ b/arch/x86/entry/entry_32.S
@@ -463,13 +463,13 @@ ENTRY(entry_INT80_32)
463 SAVE_ALL pt_regs_ax=$-ENOSYS /* save rest */ 463 SAVE_ALL pt_regs_ax=$-ENOSYS /* save rest */
464 464
465 /* 465 /*
466 * User mode is traced as though IRQs are on. Unlike the 64-bit 466 * User mode is traced as though IRQs are on, and the interrupt gate
467 * case, INT80 is a trap gate on 32-bit kernels, so interrupts 467 * turned them off.
468 * are already on (unless user code is messing around with iopl).
469 */ 468 */
469 TRACE_IRQS_OFF
470 470
471 movl %esp, %eax 471 movl %esp, %eax
472 call do_syscall_32_irqs_on 472 call do_int80_syscall_32
473.Lsyscall_32_done: 473.Lsyscall_32_done:
474 474
475restore_all: 475restore_all: