aboutsummaryrefslogtreecommitdiffstats
path: root/arch/x86/kernel/entry_32.S
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2012-10-11 21:49:08 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2012-10-11 21:49:08 -0400
commit8213a2f3eeafdecf06dd718cb4130372263f6067 (patch)
tree0d02e3201dac64d1429f8552ee1163d4a1ef1646 /arch/x86/kernel/entry_32.S
parent40924754f2cabd5d9af4bcd4dcecc362b5e0baa1 (diff)
parent12f79be93d94698778ff2b3f921073fc5f6780d6 (diff)
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/signal
Pull pile 2 of execve and kernel_thread unification work from Al Viro: "Stuff in there: kernel_thread/kernel_execve/sys_execve conversions for several more architectures plus assorted signal fixes and cleanups. There'll be more (in particular, real fixes for the alpha do_notify_resume() irq mess)..." * 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/signal: (43 commits) alpha: don't open-code trace_report_syscall_{enter,exit} Uninclude linux/freezer.h m32r: trim masks avr32: trim masks tile: don't bother with SIGTRAP in setup_frame microblaze: don't bother with SIGTRAP in setup_rt_frame() mn10300: don't bother with SIGTRAP in setup_frame() frv: no need to raise SIGTRAP in setup_frame() x86: get rid of duplicate code in case of CONFIG_VM86 unicore32: remove pointless test h8300: trim _TIF_WORK_MASK parisc: decide whether to go to slow path (tracesys) based on thread flags parisc: don't bother looping in do_signal() parisc: fix double restarts bury the rest of TIF_IRET sanitize tsk_is_polling() bury _TIF_RESTORE_SIGMASK unicore32: unobfuscate _TIF_WORK_MASK mips: NOTIFY_RESUME is not needed in TIF masks mips: merge the identical "return from syscall" per-ABI code ... Conflicts: arch/arm/include/asm/thread_info.h
Diffstat (limited to 'arch/x86/kernel/entry_32.S')
-rw-r--r--arch/x86/kernel/entry_32.S17
1 files changed, 6 insertions, 11 deletions
diff --git a/arch/x86/kernel/entry_32.S b/arch/x86/kernel/entry_32.S
index 8f9ed1afde8f..2c6340796fe9 100644
--- a/arch/x86/kernel/entry_32.S
+++ b/arch/x86/kernel/entry_32.S
@@ -622,6 +622,10 @@ work_notifysig: # deal with pending signals and
622 movl %esp, %eax 622 movl %esp, %eax
623 jne work_notifysig_v86 # returning to kernel-space or 623 jne work_notifysig_v86 # returning to kernel-space or
624 # vm86-space 624 # vm86-space
6251:
626#else
627 movl %esp, %eax
628#endif
625 TRACE_IRQS_ON 629 TRACE_IRQS_ON
626 ENABLE_INTERRUPTS(CLBR_NONE) 630 ENABLE_INTERRUPTS(CLBR_NONE)
627 movb PT_CS(%esp), %bl 631 movb PT_CS(%esp), %bl
@@ -632,24 +636,15 @@ work_notifysig: # deal with pending signals and
632 call do_notify_resume 636 call do_notify_resume
633 jmp resume_userspace 637 jmp resume_userspace
634 638
639#ifdef CONFIG_VM86
635 ALIGN 640 ALIGN
636work_notifysig_v86: 641work_notifysig_v86:
637 pushl_cfi %ecx # save ti_flags for do_notify_resume 642 pushl_cfi %ecx # save ti_flags for do_notify_resume
638 call save_v86_state # %eax contains pt_regs pointer 643 call save_v86_state # %eax contains pt_regs pointer
639 popl_cfi %ecx 644 popl_cfi %ecx
640 movl %eax, %esp 645 movl %eax, %esp
641#else 646 jmp 1b
642 movl %esp, %eax
643#endif 647#endif
644 TRACE_IRQS_ON
645 ENABLE_INTERRUPTS(CLBR_NONE)
646 movb PT_CS(%esp), %bl
647 andb $SEGMENT_RPL_MASK, %bl
648 cmpb $USER_RPL, %bl
649 jb resume_kernel
650 xorl %edx, %edx
651 call do_notify_resume
652 jmp resume_userspace
653END(work_pending) 648END(work_pending)
654 649
655 # perform syscall exit tracing 650 # perform syscall exit tracing