[PATCH] Add kthread_stop_sem()

Enhance the kthread API by adding kthread_stop_sem, for use in stopping
threads that spend their idle time waiting on a semaphore.

Signed-off-by: Alan Stern <stern@rowland.harvard.edu>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
This commit is contained in:
Alan Stern
2005-10-30 15:01:40 -08:00
committed by Linus Torvalds
parent 83521d3eb8
commit 61e1a9ea4b
2 changed files with 23 additions and 2 deletions

View File

@@ -164,6 +164,12 @@ void kthread_bind(struct task_struct *k, unsigned int cpu)
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;
@@ -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)
{