x86/hyperv: move stimer cleanup to hv_machine_shutdown()

Move hv_stimer_global_cleanup() from vmbus's hv_kexec_handler() to
hv_machine_shutdown() in the platform code. This ensures stimer cleanup
happens before the vmbus unload, which is required for root partition
kexec to work correctly.

Co-developed-by: Anirudh Rayabharam <anrayabh@linux.microsoft.com>
Signed-off-by: Anirudh Rayabharam <anrayabh@linux.microsoft.com>
Signed-off-by: Jork Loeser <jloeser@linux.microsoft.com>
Reviewed-by: Stanislav Kinsburskii <skinsburskii@linux.microsoft.com>
Signed-off-by: Wei Liu <wei.liu@kernel.org>
master
Jork Loeser 2026-04-07 18:36:39 -07:00 committed by Wei Liu
parent 3c42b33433
commit f7ce370b52
2 changed files with 6 additions and 3 deletions

View File

@ -235,8 +235,12 @@ void hv_remove_crash_handler(void)
#ifdef CONFIG_KEXEC_CORE
static void hv_machine_shutdown(void)
{
if (kexec_in_progress && hv_kexec_handler)
hv_kexec_handler();
if (kexec_in_progress) {
hv_stimer_global_cleanup();
if (hv_kexec_handler)
hv_kexec_handler();
}
/*
* Call hv_cpu_die() on all the CPUs, otherwise later the hypervisor

View File

@ -2883,7 +2883,6 @@ static struct platform_driver vmbus_platform_driver = {
static void hv_kexec_handler(void)
{
hv_stimer_global_cleanup();
vmbus_initiate_unload(false);
/* Make sure conn_state is set as hv_synic_cleanup checks for it */
mb();