mirror of https://gitee.com/openkylin/linux.git
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:
parent
31c9b9cf40
commit
18216fefbe
|
@ -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;
|
||||
|
|
Loading…
Reference in New Issue