KVM: nested VMX: disable perf cpuid reporting
authorMarcelo Tosatti <mtosatti@redhat.com>
Thu, 18 Sep 2014 21:24:57 +0000 (18:24 -0300)
committerPaolo Bonzini <pbonzini@redhat.com>
Wed, 24 Sep 2014 12:07:50 +0000 (14:07 +0200)
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@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
arch/x86/kvm/cpuid.c
arch/x86/kvm/vmx.c

index e28d798..976e3a5 100644 (file)
@@ -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;
index e8f08e9..2ab5047 100644 (file)
@@ -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);