summaryrefslogtreecommitdiff
path: root/arch/x86/hyperv/hv_init.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/x86/hyperv/hv_init.c')
-rw-r--r--arch/x86/hyperv/hv_init.c10
1 files changed, 7 insertions, 3 deletions
diff --git a/arch/x86/hyperv/hv_init.c b/arch/x86/hyperv/hv_init.c
index 6b00842ddda8..5dbe9bd67891 100644
--- a/arch/x86/hyperv/hv_init.c
+++ b/arch/x86/hyperv/hv_init.c
@@ -635,9 +635,13 @@ void hyperv_cleanup(void)
hv_ivm_msr_write(HV_X64_MSR_GUEST_OS_ID, 0);
/*
- * Reset hypercall page reference before reset the page,
- * let hypercall operations fail safely rather than
- * panic the kernel for using invalid hypercall page
+ * Reset hv_hypercall_pg before resetting it in the hypervisor.
+ * hv_set_hypercall_pg(NULL) is not used because at this point in the
+ * panic path other CPUs have been stopped, causing static_call_update()
+ * to hang. So resetting hv_hypercall_pg to cause hypercalls to fail
+ * cleanly is only operative on 32-bit builds. But this is OK as it is
+ * just a preventative measure to ease detecting a hypercall being made
+ * after this point, which shouldn't be happening anyway.
*/
hv_hypercall_pg = NULL;