Il 18/09/2014 23:24, Marcelo Tosatti ha scritto: > > Initilization of L2 guest with -cpu host, on L1 guest with -cpu host > triggers: > > (qemu) KVM: entry failed, hardware error 0x7 > ... > nested_vmx_run: VMCS MSR_{LOAD,STORE} unsupported > > Nested VMX MSR load/store support is not sufficient to > allow perf for L2 guest. > > Until properly fixed, trap CPUID and disable function 0xA. > > Signed-off-by: Marcelo Tosatti <mtosatti@xxxxxxxxxx> > > diff --git a/arch/x86/kvm/cpuid.c b/arch/x86/kvm/cpuid.c > index e28d798..976e3a5 100644 > --- a/arch/x86/kvm/cpuid.c > +++ b/arch/x86/kvm/cpuid.c > @@ -774,6 +774,12 @@ void kvm_cpuid(struct kvm_vcpu *vcpu, u32 *eax, u32 *ebx, u32 *ecx, u32 *edx) > if (!best) > best = check_cpuid_limit(vcpu, function, index); > > + /* > + * Perfmon not yet supported for L2 guest. > + */ > + if (is_guest_mode(vcpu) && function == 0xa) > + best = NULL; > + > if (best) { > *eax = best->eax; > *ebx = best->ebx; > diff --git a/arch/x86/kvm/vmx.c b/arch/x86/kvm/vmx.c > index e8f08e9..2ab5047 100644 > --- a/arch/x86/kvm/vmx.c > +++ b/arch/x86/kvm/vmx.c > @@ -6986,6 +6986,8 @@ static bool nested_vmx_exit_handled(struct kvm_vcpu *vcpu) > case EXIT_REASON_TASK_SWITCH: > return 1; > case EXIT_REASON_CPUID: > + if (kvm_register_read(vcpu, VCPU_REGS_RAX) == 0xa) > + return 0; > return 1; > case EXIT_REASON_HLT: > return nested_cpu_has(vmcs12, CPU_BASED_HLT_EXITING); > Nice solution. :) Paolo -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html