diff options
Diffstat (limited to 'kernel/kthread.c')
| -rw-r--r-- | kernel/kthread.c | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/kernel/kthread.c b/kernel/kthread.c index f50f174e92da..e75950a1092c 100644 --- a/kernel/kthread.c +++ b/kernel/kthread.c | |||
| @@ -165,6 +165,12 @@ EXPORT_SYMBOL(kthread_bind); | |||
| 165 | 165 | ||
| 166 | int kthread_stop(struct task_struct *k) | 166 | int kthread_stop(struct task_struct *k) |
| 167 | { | 167 | { |
| 168 | return kthread_stop_sem(k, NULL); | ||
| 169 | } | ||
| 170 | EXPORT_SYMBOL(kthread_stop); | ||
| 171 | |||
| 172 | int kthread_stop_sem(struct task_struct *k, struct semaphore *s) | ||
| 173 | { | ||
| 168 | int ret; | 174 | int ret; |
| 169 | 175 | ||
| 170 | down(&kthread_stop_lock); | 176 | down(&kthread_stop_lock); |
| @@ -178,7 +184,10 @@ int kthread_stop(struct task_struct *k) | |||
| 178 | 184 | ||
| 179 | /* Now set kthread_should_stop() to true, and wake it up. */ | 185 | /* Now set kthread_should_stop() to true, and wake it up. */ |
| 180 | kthread_stop_info.k = k; | 186 | kthread_stop_info.k = k; |
| 181 | wake_up_process(k); | 187 | if (s) |
| 188 | up(s); | ||
| 189 | else | ||
| 190 | wake_up_process(k); | ||
| 182 | put_task_struct(k); | 191 | put_task_struct(k); |
| 183 | 192 | ||
| 184 | /* Once it dies, reset stop ptr, gather result and we're done. */ | 193 | /* Once it dies, reset stop ptr, gather result and we're done. */ |
| @@ -189,7 +198,7 @@ int kthread_stop(struct task_struct *k) | |||
| 189 | 198 | ||
| 190 | return ret; | 199 | return ret; |
| 191 | } | 200 | } |
| 192 | EXPORT_SYMBOL(kthread_stop); | 201 | EXPORT_SYMBOL(kthread_stop_sem); |
| 193 | 202 | ||
| 194 | static __init int helper_init(void) | 203 | static __init int helper_init(void) |
| 195 | { | 204 | { |
