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>
This commit is contained in:
Devendra Naga 2015-02-19 14:08:31 -05:00 committed by Greg Kroah-Hartman
parent 31c9b9cf40
commit 18216fefbe
1 changed files with 7 additions and 13 deletions

View File

@ -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;