aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--arch/i386/kernel/entry.S11
1 files changed, 9 insertions, 2 deletions
diff --git a/arch/i386/kernel/entry.S b/arch/i386/kernel/entry.S
index 8713e0248a0b..e8d2630fd19a 100644
--- a/arch/i386/kernel/entry.S
+++ b/arch/i386/kernel/entry.S
@@ -83,6 +83,12 @@ VM_MASK = 0x00020000
83#define resume_kernel restore_nocheck 83#define resume_kernel restore_nocheck
84#endif 84#endif
85 85
86#ifdef CONFIG_VM86
87#define resume_userspace_sig check_userspace
88#else
89#define resume_userspace_sig resume_userspace
90#endif
91
86#define SAVE_ALL \ 92#define SAVE_ALL \
87 cld; \ 93 cld; \
88 pushl %es; \ 94 pushl %es; \
@@ -211,6 +217,7 @@ ret_from_exception:
211 preempt_stop 217 preempt_stop
212ret_from_intr: 218ret_from_intr:
213 GET_THREAD_INFO(%ebp) 219 GET_THREAD_INFO(%ebp)
220check_userspace:
214 movl EFLAGS(%esp), %eax # mix EFLAGS and CS 221 movl EFLAGS(%esp), %eax # mix EFLAGS and CS
215 movb CS(%esp), %al 222 movb CS(%esp), %al
216 testl $(VM_MASK | 3), %eax 223 testl $(VM_MASK | 3), %eax
@@ -415,7 +422,7 @@ work_notifysig: # deal with pending signals and
415 # vm86-space 422 # vm86-space
416 xorl %edx, %edx 423 xorl %edx, %edx
417 call do_notify_resume 424 call do_notify_resume
418 jmp resume_userspace 425 jmp resume_userspace_sig
419 426
420 ALIGN 427 ALIGN
421work_notifysig_v86: 428work_notifysig_v86:
@@ -428,7 +435,7 @@ work_notifysig_v86:
428 movl %eax, %esp 435 movl %eax, %esp
429 xorl %edx, %edx 436 xorl %edx, %edx
430 call do_notify_resume 437 call do_notify_resume
431 jmp resume_userspace 438 jmp resume_userspace_sig
432#endif 439#endif
433 440
434 # perform syscall exit tracing 441 # perform syscall exit tracing