Commit 689141dd authored by Roman Kagan's avatar Roman Kagan Committed by Paolo Bonzini
Browse files

hyperv: ensure SINTx msrs are reset properly



Initially SINTx msrs should be in "masked" state.  To ensure that
happens on *every* reset, move setting their values to
kvm_arch_vcpu_reset.

Signed-off-by: default avatarRoman Kagan <rkagan@virtuozzo.com>
Message-Id: <20171122181418.14180-3-rkagan@virtuozzo.com>
Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
parent da1cc323
Loading
Loading
Loading
Loading
+7 −5
Original line number Diff line number Diff line
@@ -662,8 +662,6 @@ static int hyperv_handle_properties(CPUState *cs)
        env->features[FEAT_HYPERV_EAX] |= HV_VP_RUNTIME_AVAILABLE;
    }
    if (cpu->hyperv_synic) {
        int sint;

        if (!has_msr_hv_synic ||
            kvm_vcpu_enable_cap(cs, KVM_CAP_HYPERV_SYNIC, 0)) {
            fprintf(stderr, "Hyper-V SynIC is not supported by kernel\n");
@@ -672,9 +670,6 @@ static int hyperv_handle_properties(CPUState *cs)

        env->features[FEAT_HYPERV_EAX] |= HV_SYNIC_AVAILABLE;
        env->msr_hv_synic_version = HV_SYNIC_VERSION;
        for (sint = 0; sint < ARRAY_SIZE(env->msr_hv_synic_sint); sint++) {
            env->msr_hv_synic_sint[sint] = HV_SINT_MASKED;
        }
    }
    if (cpu->hyperv_stimer) {
        if (!has_msr_hv_stimer) {
@@ -1053,6 +1048,13 @@ void kvm_arch_reset_vcpu(X86CPU *cpu)
    } else {
        env->mp_state = KVM_MP_STATE_RUNNABLE;
    }

    if (cpu->hyperv_synic) {
        int i;
        for (i = 0; i < ARRAY_SIZE(env->msr_hv_synic_sint); i++) {
            env->msr_hv_synic_sint[i] = HV_SINT_MASKED;
        }
    }
}

void kvm_arch_do_init_vcpu(X86CPU *cpu)