diff options
author | Devendra Naga <devendra.aaru@gmail.com> | 2015-02-19 19:08:31 (GMT) |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2015-02-27 01:23:46 (GMT) |
commit | 18216fefbe26e95189c6628fde731ff1b239a7f6 (patch) | |
tree | 90a86bbbbacbd1362115e2c5db658d130fa02099 /drivers/staging/unisys | |
parent | 31c9b9cf40f8f03f6a7484f2c06c5eb31b3735ce (diff) | |
download | linux-18216fefbe26e95189c6628fde731ff1b239a7f6.tar.xz |
unisys: use simpler kthread_ API
The code does the checks on should_stop variable in the kernel
threads. The uisthread_stop function sets the should_stop and calls
KILL (eventually kill_pid) to stop the thread.
The checking of should_stop variable can be replaced to a call to
kthread_should_stop function and the setting of the should_stop and
a call to KILL can be replaced with kthread_stop function.
Cc: Ken Cox <jkc@redhat.com>
Cc: Benjamin Romer <benjamin.romer@unisys.com>
Signed-off-by: Devendra Naga <devendra.aaru@gmail.com>
Signed-off-by: Benjamin Romer <benjamin.romer@unisys.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/staging/unisys')
-rw-r--r-- | drivers/staging/unisys/uislib/uisthread.c | 20 |
1 files changed, 7 insertions, 13 deletions
diff --git a/drivers/staging/unisys/uislib/uisthread.c b/drivers/staging/unisys/uislib/uisthread.c index c5c68cb..20a2a1b 100644 --- a/drivers/staging/unisys/uislib/uisthread.c +++ b/drivers/staging/unisys/uislib/uisthread.c @@ -41,7 +41,6 @@ int uisthread_start(struct uisthread_info *thrinfo, int (*threadfn)(void *), void *thrcontext, char *name) { - thrinfo->should_stop = 0; /* used to stop the thread */ init_completion(&thrinfo->has_stopped); thrinfo->task = kthread_run(threadfn, thrcontext, name); @@ -58,24 +57,19 @@ EXPORT_SYMBOL_GPL(uisthread_start); void uisthread_stop(struct uisthread_info *thrinfo) { - int ret; int stopped = 0; if (thrinfo->id == 0) return; /* thread not running */ LOGINF("uisthread_stop stopping id:%d\n", thrinfo->id); - thrinfo->should_stop = 1; - ret = KILL(thrinfo->id, SIGHUP, 1); - if (ret) { - LOGERR("unable to signal thread %d\n", ret); - } else { - /* give up if the thread has NOT died in 1 minute */ - if (wait_for_completion_timeout(&thrinfo->has_stopped, 60 * HZ)) - stopped = 1; - else - LOGERR("timed out trying to signal thread\n"); - } + kthread_stop(thrinfo->task); + /* give up if the thread has NOT died in 1 minute */ + if (wait_for_completion_timeout(&thrinfo->has_stopped, 60 * HZ)) + stopped = 1; + else + LOGERR("timed out trying to signal thread\n"); + if (stopped) { LOGINF("uisthread_stop stopped id:%d\n", thrinfo->id); thrinfo->id = 0; |