x86/reboot: Disable virtualization during reboot iff callback is registered
authorSean Christopherson <seanjc@google.com>
Fri, 21 Jul 2023 20:18:47 +0000 (13:18 -0700)
committerSean Christopherson <seanjc@google.com>
Thu, 3 Aug 2023 22:37:14 +0000 (15:37 -0700)
commit59765db5fc82726b32876b794667e2c6936a98ab
treebf4fb5cc3b84afe13f2059fe8468da0ebf425f20
parentedc8deb087d884bac2f7013f0c23af73042b23a7
x86/reboot: Disable virtualization during reboot iff callback is registered

Attempt to disable virtualization during an emergency reboot if and only
if there is a registered virt callback, i.e. iff a hypervisor (KVM) is
active.  If there's no active hypervisor, then the CPU can't be operating
with VMX or SVM enabled (barring an egregious bug).

Checking for a valid callback instead of simply for SVM or VMX support
can also eliminates spurious NMIs by avoiding the unecessary call to
nmi_shootdown_cpus_on_restart().

Note, IRQs are disabled, which prevents KVM from coming along and
enabling virtualization after the fact.

Reviewed-by: Kai Huang <kai.huang@intel.com>
Link: https://lore.kernel.org/r/20230721201859.2307736-8-seanjc@google.com
Signed-off-by: Sean Christopherson <seanjc@google.com>
arch/x86/kernel/reboot.c