mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-05-09 12:33:18 -04:00
ipmi:ssif: Fix a shutdown race
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 <cminyard@mvista.com>
This commit is contained in:
@@ -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;
|
||||
timer_delete_sync(&ssif_info->watch_timer);
|
||||
timer_delete_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)
|
||||
|
||||
Reference in New Issue
Block a user