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: Roman Kagan <rkagan@virtuozzo.com> Message-Id: <20171122181418.14180-3-rkagan@virtuozzo.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
parent
da1cc323b8
commit
689141dde2
@ -662,8 +662,6 @@ static int hyperv_handle_properties(CPUState *cs)
|
|||||||
env->features[FEAT_HYPERV_EAX] |= HV_VP_RUNTIME_AVAILABLE;
|
env->features[FEAT_HYPERV_EAX] |= HV_VP_RUNTIME_AVAILABLE;
|
||||||
}
|
}
|
||||||
if (cpu->hyperv_synic) {
|
if (cpu->hyperv_synic) {
|
||||||
int sint;
|
|
||||||
|
|
||||||
if (!has_msr_hv_synic ||
|
if (!has_msr_hv_synic ||
|
||||||
kvm_vcpu_enable_cap(cs, KVM_CAP_HYPERV_SYNIC, 0)) {
|
kvm_vcpu_enable_cap(cs, KVM_CAP_HYPERV_SYNIC, 0)) {
|
||||||
fprintf(stderr, "Hyper-V SynIC is not supported by kernel\n");
|
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->features[FEAT_HYPERV_EAX] |= HV_SYNIC_AVAILABLE;
|
||||||
env->msr_hv_synic_version = HV_SYNIC_VERSION;
|
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 (cpu->hyperv_stimer) {
|
||||||
if (!has_msr_hv_stimer) {
|
if (!has_msr_hv_stimer) {
|
||||||
@ -1053,6 +1048,13 @@ void kvm_arch_reset_vcpu(X86CPU *cpu)
|
|||||||
} else {
|
} else {
|
||||||
env->mp_state = KVM_MP_STATE_RUNNABLE;
|
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)
|
void kvm_arch_do_init_vcpu(X86CPU *cpu)
|
||||||
|
Loading…
Reference in New Issue
Block a user