Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ca242ac9 authored by Avi Kivity's avatar Avi Kivity Committed by Marcelo Tosatti
Browse files

KVM: Fix reboot on Intel hosts



When we reboot, we disable vmx extensions or otherwise INIT gets blocked.
If a task on another cpu hits a vmx instruction, it will fault if vmx is
disabled.  We trap that to avoid a nasty oops and spin until the reboot
completes.

Problem is, we sleep with interrupts disabled.  This blocks smp_send_stop()
from running, and the reboot process halts.

Fix by enabling interrupts before spinning.

KVM-Stable-Tag.
Signed-off-by: default avatarAvi Kivity <avi@redhat.com>
Signed-off-by: default avatarMarcelo Tosatti <mtosatti@redhat.com>
parent 6bbfb265
Loading
Loading
Loading
Loading
+3 −1
Original line number Original line Diff line number Diff line
@@ -1970,10 +1970,12 @@ static int kvm_cpu_hotplug(struct notifier_block *notifier, unsigned long val,


asmlinkage void kvm_handle_fault_on_reboot(void)
asmlinkage void kvm_handle_fault_on_reboot(void)
{
{
	if (kvm_rebooting)
	if (kvm_rebooting) {
		/* spin while reset goes on */
		/* spin while reset goes on */
		local_irq_enable();
		while (true)
		while (true)
			;
			;
	}
	/* Fault while not rebooting.  We want the trace. */
	/* Fault while not rebooting.  We want the trace. */
	BUG();
	BUG();
}
}