qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH v2 5/7] make hyperv hypercall and guest os id MS


From: Paolo Bonzini
Subject: Re: [Qemu-devel] [PATCH v2 5/7] make hyperv hypercall and guest os id MSRs migratable.
Date: Thu, 23 Jan 2014 19:19:42 +0100
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Thunderbird/24.2.0

Il 23/01/2014 14:40, Vadim Rozenfeld ha scritto:
+    if (hyperv_enabled(cpu) &&
+        kvm_check_extension(cs->kvm_state, KVM_CAP_HYPERV) > 0) {
         c->eax = HYPERV_CPUID_MIN;
+        has_msr_hv_hypercall = true;

The commit message should mention that this is done because the MS docs specify HV_X64_MSR_HYPERCALL as a mandatory interface, thus we cannot separate relaxed timing (say)---even though in principle it doesn't require the MSR.

We probably should split this part of the patch as follows:

diff --git a/target-i386/kvm.c b/target-i386/kvm.c
index 0a21c30..19b1c94 100644
--- a/target-i386/kvm.c
+++ b/target-i386/kvm.c
@@ -72,6 +72,7 @@ static bool has_msr_misc_enable;
 static bool has_msr_bndcfgs;
 static bool has_msr_kvm_steal_time;
 static int lm_capable_kernel;
+static bool has_msr_hv_hypercall;

 static bool has_msr_architectural_pmu;
 static uint32_t num_architectural_pmu_counters;
@@ -437,8 +438,9 @@ static bool hyperv_hypercall_available(X86CPU *cpu)

 static bool hyperv_enabled(X86CPU *cpu)
 {
-    return hyperv_hypercall_available(cpu) ||
-           cpu->hyperv_relaxed_timing;
+    return kvm_check_extension(cs->kvm_state, KVM_CAP_HYPERV) > 0 &&
+           (hyperv_hypercall_available(cpu) ||
+            cpu->hyperv_relaxed_timing);
 }

 #define KVM_MAX_CPUID_ENTRIES  100
@@ -470,6 +472,7 @@ int kvm_arch_init_vcpu(CPUState *cs)
     } else {
         memcpy(signature, "Microsoft Hv", 12);
         c->eax = HYPERV_CPUID_MIN;
+        has_msr_hv_hypercall = true;
     }
     c->ebx = signature[0];
     c->ecx = signature[1];
@@ -479,7 +482,7 @@ int kvm_arch_init_vcpu(CPUState *cs)
     c->function = KVM_CPUID_FEATURES;
     c->eax = env->features[FEAT_KVM];

-    if (hyperv_enabled(cpu)) {
+    if (has_msr_hv_hypercall) {
         memcpy(signature, "Hv#1\0\0\0\0\0\0\0\0", 12);
         c->eax = signature[0];


Paolo



reply via email to

[Prev in Thread] Current Thread [Next in Thread]