summaryrefslogtreecommitdiff
path: root/kernel/kthread.c
diff options
context:
space:
mode:
authorSteve French <sfrench@us.ibm.com>2005-10-31 08:36:11 -0800
committerSteve French <sfrench@us.ibm.com>2005-10-31 08:36:11 -0800
commit53b2ec5518aa2623e8c0cb36f1c304a797988a46 (patch)
tree465d8631ade6c2fcbd7576ff9813d00116c6a1e8 /kernel/kthread.c
parent0753ca7bc2b876dd136e9db11a20f85cbe4e08b1 (diff)
parent581c1b14394aee60aff46ea67d05483261ed6527 (diff)
Merge with /pub/scm/linux/kernel/git/torvalds/linux-2.6.git
Diffstat (limited to 'kernel/kthread.c')
-rw-r--r--kernel/kthread.c13
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);
int kthread_stop(struct task_struct *k)
{
+ return kthread_stop_sem(k, NULL);
+}
+EXPORT_SYMBOL(kthread_stop);
+
+int kthread_stop_sem(struct task_struct *k, struct semaphore *s)
+{
int ret;
down(&kthread_stop_lock);
@@ -178,7 +184,10 @@ int kthread_stop(struct task_struct *k)
/* Now set kthread_should_stop() to true, and wake it up. */
kthread_stop_info.k = k;
- wake_up_process(k);
+ if (s)
+ up(s);
+ else
+ wake_up_process(k);
put_task_struct(k);
/* Once it dies, reset stop ptr, gather result and we're done. */
@@ -189,7 +198,7 @@ int kthread_stop(struct task_struct *k)
return ret;
}
-EXPORT_SYMBOL(kthread_stop);
+EXPORT_SYMBOL(kthread_stop_sem);
static __init int helper_init(void)
{