Drivers: hv: Execute shutdown in a thread context
Execute the shutdown code in a thread context. With recent changes made to the shutdown code, shutdown code cannot be invoked from an interrupt context. Signed-off-by: K. Y. Srinivasan <kys@microsoft.com> Reviewed-by: Haiyang Zhang <haiyangz@microsoft.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
Родитель
048c5add08
Коммит
3dd6cb4971
|
@ -49,6 +49,16 @@ static struct hv_util_service util_kvp = {
|
||||||
.util_deinit = hv_kvp_deinit,
|
.util_deinit = hv_kvp_deinit,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static void perform_shutdown(struct work_struct *dummy)
|
||||||
|
{
|
||||||
|
orderly_poweroff(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Perform the shutdown operation in a thread context.
|
||||||
|
*/
|
||||||
|
static DECLARE_WORK(shutdown_work, perform_shutdown);
|
||||||
|
|
||||||
static void shutdown_onchannelcallback(void *context)
|
static void shutdown_onchannelcallback(void *context)
|
||||||
{
|
{
|
||||||
struct vmbus_channel *channel = context;
|
struct vmbus_channel *channel = context;
|
||||||
|
@ -106,7 +116,7 @@ static void shutdown_onchannelcallback(void *context)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (execute_shutdown == true)
|
if (execute_shutdown == true)
|
||||||
orderly_poweroff(true);
|
schedule_work(&shutdown_work);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
Загрузка…
Ссылка в новой задаче