public inbox for kvm@vger.kernel.org
 help / color / mirror / Atom feed
From: Eduardo Habkost <ehabkost@redhat.com>
To: Avi Kivity <avi@redhat.com>, Ingo Molnar <mingo@elte.hu>
Cc: "Eric W. Biederman" <ebiederm@xmission.com>,
	Simon Horman <horms@verge.net.au>, Andrew Morton <akpm@osdl.org>,
	Vivek Goyal <vgoyal@redhat.com>, Haren Myneni <hbabu@us.ibm.com>,
	Andrey Borzenkov <arvidjaar@mail.ru>,
	mingo@redhat.com, "Rafael J. Wysocki" <rjw@sisk.pl>,
	Zachary Amsden <zach@vmware.com>,
	kexec@lists.infradead.org, kvm@vger.kernel.org,
	linux-kernel@vger.kernel.org,
	Eduardo Habkost <ehabkost@redhat.com>
Subject: [PATCH 10/11] kdump: forcibly disable VMX and SVM on machine_crash_shutdown()
Date: Thu, 13 Nov 2008 15:43:50 -0200	[thread overview]
Message-ID: <1226598231-18311-11-git-send-email-ehabkost@redhat.com> (raw)
In-Reply-To: <1226598231-18311-1-git-send-email-ehabkost@redhat.com>

We need to disable virtualization extensions on all CPUs before booting
the kdump kernel, otherwise the kdump kernel booting will fail, and
rebooting after the kdump kernel did its task may also fail.

We do it using cpu_emergency_vmxoff() and cpu_emergency_svm_disable(),
that should always work, because those functions check if the CPUs
support SVM or VMX before doing their tasks.

Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
---
 arch/x86/kernel/crash.c |   18 ++++++++++++++++++
 1 files changed, 18 insertions(+), 0 deletions(-)

diff --git a/arch/x86/kernel/crash.c b/arch/x86/kernel/crash.c
index d84a852..c689d19 100644
--- a/arch/x86/kernel/crash.c
+++ b/arch/x86/kernel/crash.c
@@ -26,6 +26,7 @@
 #include <linux/kdebug.h>
 #include <asm/smp.h>
 #include <asm/reboot.h>
+#include <asm/virtext.h>
 
 #include <mach_ipi.h>
 
@@ -49,6 +50,15 @@ static void kdump_nmi_callback(int cpu, struct die_args *args)
 #endif
 	crash_save_cpu(regs, cpu);
 
+	/* Disable VMX or SVM if needed.
+	 *
+	 * We need to disable virtualization on all CPUs.
+	 * Having VMX or SVM enabled on any CPU may break rebooting
+	 * after the kdump kernel has finished its task.
+	 */
+	cpu_emergency_vmxoff();
+	cpu_emergency_svm_disable();
+
 	disable_local_APIC();
 }
 
@@ -80,6 +90,14 @@ void native_machine_crash_shutdown(struct pt_regs *regs)
 	local_irq_disable();
 
 	kdump_nmi_shootdown_cpus();
+
+	/* Booting kdump kernel with VMX or SVM enabled won't work,
+	 * because (among other limitations) we can't disable paging
+	 * with the virt flags.
+	 */
+	cpu_emergency_vmxoff();
+	cpu_emergency_svm_disable();
+
 	lapic_shutdown();
 #if defined(CONFIG_X86_IO_APIC)
 	disable_IO_APIC();
-- 
1.5.5.GIT


  parent reply	other threads:[~2008-11-13 17:45 UTC|newest]

Thread overview: 15+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-11-13 17:43 [PATCH 00/11] x86: disable virt on kdump and emergency_restart (v3) Eduardo Habkost
2008-11-13 17:43 ` [PATCH 01/11] kvm: vmx: move cpu_has_kvm_support() to an inline on asm/virtext.h Eduardo Habkost
2008-11-13 17:43 ` [PATCH 02/11] kvm: vmx: move ASM_VMX_* definitions to asm/virtext.h Eduardo Habkost
2008-11-13 17:43 ` [PATCH 03/11] x86: asm/virtext.h: add cpu_vmxoff() inline function Eduardo Habkost
2008-11-13 17:43 ` [PATCH 04/11] kvm: vmx: extract kvm_cpu_vmxoff() from hardware_disable() Eduardo Habkost
2008-11-13 17:43 ` [PATCH 05/11] x86: cpu_emergency_vmxoff() function Eduardo Habkost
2008-11-13 17:43 ` [PATCH 06/11] kvm: svm: move some SVM_* #defines to asm/virtext.h Eduardo Habkost
2008-11-13 17:43 ` [PATCH 07/11] kvm: svm: move has_svm() code " Eduardo Habkost
2008-11-13 17:43 ` [PATCH 08/11] kvm: svm: move svm_hardware_disable() " Eduardo Habkost
2008-11-13 17:43 ` [PATCH 09/11] x86: asm/virtext.h: create cpu_emergency_svm_disable() Eduardo Habkost
2008-11-13 17:43 ` Eduardo Habkost [this message]
2008-11-13 17:43 ` [PATCH 11/11] x86: disable VMX on all CPUs on reboot Eduardo Habkost
     [not found] ` <1226598231-18311-1-git-send-email-ehabkost-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2008-11-16  7:57   ` [PATCH 00/11] x86: disable virt on kdump and emergency_restart (v3) Avi Kivity
     [not found]     ` <491FD283.60402-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2008-11-17 15:04       ` Eduardo Habkost
2008-11-17 15:12         ` Avi Kivity

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1226598231-18311-11-git-send-email-ehabkost@redhat.com \
    --to=ehabkost@redhat.com \
    --cc=akpm@osdl.org \
    --cc=arvidjaar@mail.ru \
    --cc=avi@redhat.com \
    --cc=ebiederm@xmission.com \
    --cc=hbabu@us.ibm.com \
    --cc=horms@verge.net.au \
    --cc=kexec@lists.infradead.org \
    --cc=kvm@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@elte.hu \
    --cc=mingo@redhat.com \
    --cc=rjw@sisk.pl \
    --cc=vgoyal@redhat.com \
    --cc=zach@vmware.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox