diff options
Diffstat (limited to 'arch/um/kernel/process.c')
-rw-r--r-- | arch/um/kernel/process.c | 13 |
1 files changed, 4 insertions, 9 deletions
diff --git a/arch/um/kernel/process.c b/arch/um/kernel/process.c index ccb9a9d283f1..57fc7028714a 100644 --- a/arch/um/kernel/process.c +++ b/arch/um/kernel/process.c | |||
@@ -151,12 +151,10 @@ void new_thread_handler(void) | |||
151 | * 0 if it just exits | 151 | * 0 if it just exits |
152 | */ | 152 | */ |
153 | n = run_kernel_thread(fn, arg, ¤t->thread.exec_buf); | 153 | n = run_kernel_thread(fn, arg, ¤t->thread.exec_buf); |
154 | if (n == 1) { | 154 | if (n == 1) |
155 | /* Handle any immediate reschedules or signals */ | ||
156 | interrupt_end(); | ||
157 | userspace(¤t->thread.regs.regs); | 155 | userspace(¤t->thread.regs.regs); |
158 | } | 156 | else |
159 | else do_exit(0); | 157 | do_exit(0); |
160 | } | 158 | } |
161 | 159 | ||
162 | /* Called magically, see new_thread_handler above */ | 160 | /* Called magically, see new_thread_handler above */ |
@@ -175,9 +173,6 @@ void fork_handler(void) | |||
175 | 173 | ||
176 | current->thread.prev_sched = NULL; | 174 | current->thread.prev_sched = NULL; |
177 | 175 | ||
178 | /* Handle any immediate reschedules or signals */ | ||
179 | interrupt_end(); | ||
180 | |||
181 | userspace(¤t->thread.regs.regs); | 176 | userspace(¤t->thread.regs.regs); |
182 | } | 177 | } |
183 | 178 | ||
@@ -193,7 +188,7 @@ int copy_thread(unsigned long clone_flags, unsigned long sp, | |||
193 | if (current->thread.forking) { | 188 | if (current->thread.forking) { |
194 | memcpy(&p->thread.regs.regs, ®s->regs, | 189 | memcpy(&p->thread.regs.regs, ®s->regs, |
195 | sizeof(p->thread.regs.regs)); | 190 | sizeof(p->thread.regs.regs)); |
196 | UPT_SET_SYSCALL_RETURN(&p->thread.regs.regs, 0); | 191 | PT_REGS_SET_SYSCALL_RETURN(&p->thread.regs, 0); |
197 | if (sp != 0) | 192 | if (sp != 0) |
198 | REGS_SP(p->thread.regs.regs.gp) = sp; | 193 | REGS_SP(p->thread.regs.regs.gp) = sp; |
199 | 194 | ||