diff options
| author | Brian Gerst <brgerst@gmail.com> | 2009-12-09 12:34:43 -0500 | 
|---|---|---|
| committer | H. Peter Anvin <hpa@zytor.com> | 2009-12-10 18:55:39 -0500 | 
| commit | f443ff4201dd25cd4dec183f9919ecba90c8edc2 (patch) | |
| tree | 4da9d9c35e46c68b87b180285517cc6323bd5d03 /arch/x86/kernel/process_32.c | |
| parent | e840227c141116171c89ab1abb5cc9fee6fdb488 (diff) | |
x86: Sync 32/64-bit kernel_thread
Signed-off-by: Brian Gerst <brgerst@gmail.com>
LKML-Reference: <1260380084-3707-5-git-send-email-brgerst@gmail.com>
Signed-off-by: H. Peter Anvin <hpa@zytor.com>
Diffstat (limited to 'arch/x86/kernel/process_32.c')
| -rw-r--r-- | arch/x86/kernel/process_32.c | 5 | 
1 files changed, 4 insertions, 1 deletions
| diff --git a/arch/x86/kernel/process_32.c b/arch/x86/kernel/process_32.c index bd874d2b6ab1..f2e8b05a4f02 100644 --- a/arch/x86/kernel/process_32.c +++ b/arch/x86/kernel/process_32.c | |||
| @@ -211,14 +211,17 @@ int kernel_thread(int (*fn)(void *), void *arg, unsigned long flags) | |||
| 211 | regs.si = (unsigned long) fn; | 211 | regs.si = (unsigned long) fn; | 
| 212 | regs.di = (unsigned long) arg; | 212 | regs.di = (unsigned long) arg; | 
| 213 | 213 | ||
| 214 | #ifdef CONFIG_X86_32 | ||
| 214 | regs.ds = __USER_DS; | 215 | regs.ds = __USER_DS; | 
| 215 | regs.es = __USER_DS; | 216 | regs.es = __USER_DS; | 
| 216 | regs.fs = __KERNEL_PERCPU; | 217 | regs.fs = __KERNEL_PERCPU; | 
| 217 | regs.gs = __KERNEL_STACK_CANARY; | 218 | regs.gs = __KERNEL_STACK_CANARY; | 
| 219 | #endif | ||
| 220 | |||
| 218 | regs.orig_ax = -1; | 221 | regs.orig_ax = -1; | 
| 219 | regs.ip = (unsigned long) kernel_thread_helper; | 222 | regs.ip = (unsigned long) kernel_thread_helper; | 
| 220 | regs.cs = __KERNEL_CS | get_kernel_rpl(); | 223 | regs.cs = __KERNEL_CS | get_kernel_rpl(); | 
| 221 | regs.flags = X86_EFLAGS_IF | X86_EFLAGS_SF | X86_EFLAGS_PF | 0x2; | 224 | regs.flags = X86_EFLAGS_IF | 0x2; | 
| 222 | 225 | ||
| 223 | /* Ok, create the new process.. */ | 226 | /* Ok, create the new process.. */ | 
| 224 | return do_fork(flags | CLONE_VM | CLONE_UNTRACED, 0, ®s, 0, NULL, NULL); | 227 | return do_fork(flags | CLONE_VM | CLONE_UNTRACED, 0, ®s, 0, NULL, NULL); | 
