Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 150ac78d authored by Andy Lutomirski's avatar Andy Lutomirski Committed by Ingo Molnar
Browse files

x86/entry/32: Switch INT80 to the new C syscall path



Signed-off-by: default avatarAndy 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: H. Peter Anvin <hpa@zytor.com>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: linux-kernel@vger.kernel.org
Link: http://lkml.kernel.org/r/a7e8d8df96838eae3208dd0441023f3ce7a81831.1444091585.git.luto@kernel.org


Signed-off-by: default avatarIngo Molnar <mingo@kernel.org>
parent 39e8701f
Loading
Loading
Loading
Loading
+13 −21
Original line number Diff line number Diff line
@@ -153,13 +153,13 @@

#endif /* CONFIG_X86_32_LAZY_GS */

.macro SAVE_ALL
.macro SAVE_ALL pt_regs_ax=%eax
	cld
	PUSH_GS
	pushl	%fs
	pushl	%es
	pushl	%ds
	pushl	%eax
	pushl	\pt_regs_ax
	pushl	%ebp
	pushl	%edi
	pushl	%esi
@@ -370,20 +370,17 @@ ENDPROC(entry_SYSENTER_32)
	# system call handler stub
ENTRY(entry_INT80_32)
	ASM_CLAC
	pushl	%eax				# save orig_eax
	SAVE_ALL
	GET_THREAD_INFO(%ebp)
						# system call tracing in operation / emulation
	testl	$_TIF_WORK_SYSCALL_ENTRY, TI_flags(%ebp)
	jnz	syscall_trace_entry
	cmpl	$(NR_syscalls), %eax
	jae	syscall_badsys
syscall_call:
	call	*sys_call_table(, %eax, 4)
syscall_after_call:
	movl	%eax, PT_EAX(%esp)		# store the return value
syscall_exit:
	jmp	syscall_exit_work
	pushl	%eax			/* pt_regs->orig_ax */
	SAVE_ALL pt_regs_ax=$-ENOSYS	/* save rest, load -ENOSYS into ax */

	/*
	 * User mode is traced as though IRQs are on, and the interrupt gate
	 * turned them off.
	 */
	TRACE_IRQS_OFF

	movl	%esp, %eax
	call	do_int80_syscall_32

restore_all:
	TRACE_IRQS_IRET
@@ -491,11 +488,6 @@ syscall_fault:
	jmp	resume_userspace
END(syscall_fault)

syscall_badsys:
	movl	$-ENOSYS, %eax
	jmp	syscall_after_call
END(syscall_badsys)

sysenter_badsys:
	movl	$-ENOSYS, %eax
	jmp	sysenter_after_call