From 582200e9e7b6132bcc89980e68d8e3335819775f Mon Sep 17 00:00:00 2001 From: Avi Kivity <avi@redhat.com> Date: Sun, 26 Sep 2010 11:05:15 -0300 Subject: [PATCH] KVM: Fix reboot on Intel hosts RH-Author: Avi Kivity <avi@redhat.com> Message-id: <1285499115-9166-1-git-send-email-avi@redhat.com> Patchwork-id: 12288 O-Subject: [PATCH RHEL5.6 RHEL5.5.z] KVM: Fix reboot on Intel hosts Bugzilla: 608709 RH-Acked-by: Zachary Amsden <zamsden@redhat.com> RH-Acked-by: Rik van Riel <riel@redhat.com> RH-Acked-by: Marcelo Tosatti <mtosatti@redhat.com> Bugzilla: 608709 Upstream: 706dee0ef50e585f64c1d60ffc60482a6527eaad 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: Avi Kivity <avi@redhat.com> Signed-off-by: Marcelo Tosatti <mtosatti@redhat.com> --- virt/kvm/kvm_main.c | 4 +++- 1 files changed, 3 insertions(+), 1 deletions(-) Signed-off-by: Eduardo Habkost <ehabkost@redhat.com> --- virt/kvm/kvm_main.c | 4 +++- 1 files changed, 3 insertions(+), 1 deletions(-) diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c index cd08525..02b858a 100644 --- a/virt/kvm/kvm_main.c +++ b/virt/kvm/kvm_main.c @@ -2405,10 +2405,12 @@ static int kvm_cpu_hotplug(struct notifier_block *notifier, unsigned long val, asmlinkage void kvm_handle_fault_on_reboot(void) { - if (kvm_rebooting) + if (kvm_rebooting) { /* spin while reset goes on */ + local_irq_enable(); while (true) ; + } /* Fault while not rebooting. We want the trace. */ BUG(); } -- 1.6.5.5