Skip to contentSkip to conversation

SVM: fix cpu onlining

PATCH Applied Marcelo Tosatti 2 participants 4 messages Aug 31, 2010 – Sep 1, 2010

Subsystems (3)
lore
Share & tools
lore
#1 lore raw

PATCH 1/2 KVM: SVM: reset mmu context in init_vmcb

Since commit aad827034e419fa no mmu reinitialization is performed via init_vmcb.

Zero vcpu->arch.cr0 and pass the reset value as a parameter to kvm_set_cr0.

arch/x86/kvm/svm.c +2 -2
Index: kvm/arch/x86/kvm/svm.c
===================================================================
@@ -827,8 +827,8 @@ static void init_vmcb(struct vcpu_svm *s
 	 * This is the guest-visible cr0 value.
 	 * svm_set_cr0() sets PG and WP and clears NW and CD on save->cr0.
 	 */
-	svm->vcpu.arch.cr0 = X86_CR0_NW | X86_CR0_CD | X86_CR0_ET;
-	(void)kvm_set_cr0(&svm->vcpu, svm->vcpu.arch.cr0);
+	svm->vcpu.arch.cr0 = 0;
+	(void)kvm_set_cr0(&svm->vcpu, X86_CR0_NW | X86_CR0_CD | X86_CR0_ET);
 
 	save->cr4 = X86_CR4_PAE;
 	/* rdx = ?? */
#2 lore raw

PATCH 2/2 KVM: SVM: init_vmcb should reset vcpu->efer

In reply to Marcelo Tosatti

Otherwise EFER_LMA bit is retained across a SIPI reset.

Fixes guest cpu onlining.

arch/x86/kvm/svm.c +1 -1
Index: kvm/arch/x86/kvm/svm.c
===================================================================
@@ -816,7 +816,7 @@ static void init_vmcb(struct vcpu_svm *s
 	init_sys_seg(&save->ldtr, SEG_TYPE_LDT);
 	init_sys_seg(&save->tr, SEG_TYPE_BUSY_TSS16);
 
-	save->efer = EFER_SVME;
+	svm_set_efer(&svm->vcpu, 0);
 	save->dr6 = 0xffff0ff0;
 	save->dr7 = 0x400;
 	save->rflags = 2;
Applied
#3 lore raw
In reply to Marcelo Tosatti

On 09/01/2010 01:13 AM, Marcelo Tosatti wrote:

applied, thanks.

Signature · 2 lines
I have a truly marvellous patch that fixes the bug which this
signature is too narrow to contain.