Commit 18216fef authored by Devendra Naga's avatar Devendra Naga Committed by Greg Kroah-Hartman

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: default avatarDevendra Naga <devendra.aaru@gmail.com>
Signed-off-by: default avatarBenjamin Romer <benjamin.romer@unisys.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 31c9b9cf
...@@ -41,7 +41,6 @@ int ...@@ -41,7 +41,6 @@ int
uisthread_start(struct uisthread_info *thrinfo, uisthread_start(struct uisthread_info *thrinfo,
int (*threadfn)(void *), void *thrcontext, char *name) int (*threadfn)(void *), void *thrcontext, char *name)
{ {
thrinfo->should_stop = 0;
/* used to stop the thread */ /* used to stop the thread */
init_completion(&thrinfo->has_stopped); init_completion(&thrinfo->has_stopped);
thrinfo->task = kthread_run(threadfn, thrcontext, name); thrinfo->task = kthread_run(threadfn, thrcontext, name);
...@@ -58,24 +57,19 @@ EXPORT_SYMBOL_GPL(uisthread_start); ...@@ -58,24 +57,19 @@ EXPORT_SYMBOL_GPL(uisthread_start);
void void
uisthread_stop(struct uisthread_info *thrinfo) uisthread_stop(struct uisthread_info *thrinfo)
{ {
int ret;
int stopped = 0; int stopped = 0;
if (thrinfo->id == 0) if (thrinfo->id == 0)
return; /* thread not running */ return; /* thread not running */
LOGINF("uisthread_stop stopping id:%d\n", thrinfo->id); LOGINF("uisthread_stop stopping id:%d\n", thrinfo->id);
thrinfo->should_stop = 1; kthread_stop(thrinfo->task);
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 */ /* give up if the thread has NOT died in 1 minute */
if (wait_for_completion_timeout(&thrinfo->has_stopped, 60 * HZ)) if (wait_for_completion_timeout(&thrinfo->has_stopped, 60 * HZ))
stopped = 1; stopped = 1;
else else
LOGERR("timed out trying to signal thread\n"); LOGERR("timed out trying to signal thread\n");
}
if (stopped) { if (stopped) {
LOGINF("uisthread_stop stopped id:%d\n", thrinfo->id); LOGINF("uisthread_stop stopped id:%d\n", thrinfo->id);
thrinfo->id = 0; thrinfo->id = 0;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment