It was possible for the SSIF thread to stop and quit before the
kthread_stop() call because ssif->stopping was set before the
stop.  So only exit the SSIF thread is kthread_should_stop()
returns true.

There is no need to wake the thread, as the wait will be interrupted
by kthread_stop().

Signed-off-by: Corey Minyard <cminy...@mvista.com>
---
 drivers/char/ipmi/ipmi_ssif.c | 6 +-----
 1 file changed, 1 insertion(+), 5 deletions(-)

diff --git a/drivers/char/ipmi/ipmi_ssif.c b/drivers/char/ipmi/ipmi_ssif.c
index 506d9988721e..b016fabaac68 100644
--- a/drivers/char/ipmi/ipmi_ssif.c
+++ b/drivers/char/ipmi/ipmi_ssif.c
@@ -481,8 +481,6 @@ static int ipmi_ssif_thread(void *data)
                /* Wait for something to do */
                result = wait_for_completion_interruptible(
                                                &ssif_info->wake_thread);
-               if (ssif_info->stopping)
-                       break;
                if (result == -ERESTARTSYS)
                        continue;
                init_completion(&ssif_info->wake_thread);
@@ -1270,10 +1268,8 @@ static void shutdown_ssif(void *send_info)
        ssif_info->stopping = true;
        del_timer_sync(&ssif_info->watch_timer);
        del_timer_sync(&ssif_info->retry_timer);
-       if (ssif_info->thread) {
-               complete(&ssif_info->wake_thread);
+       if (ssif_info->thread)
                kthread_stop(ssif_info->thread);
-       }
 }
 
 static void ssif_remove(struct i2c_client *client)
-- 
2.43.0



_______________________________________________
Openipmi-developer mailing list
Openipmi-developer@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/openipmi-developer

Reply via email to