diff options
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); |