From: Jan Kiszka <jan.kiszka@xxxxxxxxxxx> Make sure to clear MSR_KVM_SYSTEM_TIME, MSR_KVM_WALL_CLOCK, and MSR_KVM_ASYNC_PF_EN so that a freshly booted guest cannot be disturbed by old values. Signed-off-by: Jan Kiszka <jan.kiszka@xxxxxxxxxxx> CC: Glauber Costa <glommer@xxxxxxxxxx> --- target-i386/kvm.c | 10 ++++++++++ 1 files changed, 10 insertions(+), 0 deletions(-) diff --git a/target-i386/kvm.c b/target-i386/kvm.c index d8f26bf..664a4a0 100644 --- a/target-i386/kvm.c +++ b/target-i386/kvm.c @@ -453,6 +453,9 @@ void kvm_arch_reset_vcpu(CPUState *env) env->nmi_injected = 0; env->nmi_pending = 0; env->xcr0 = 1; + env->system_time_msr = 0; + env->wall_clock_msr = 0; + env->async_pf_en_msr = 0; if (kvm_irqchip_in_kernel()) { env->mp_state = cpu_is_bsp(env) ? KVM_MP_STATE_RUNNABLE : KVM_MP_STATE_UNINITIALIZED; @@ -845,6 +848,13 @@ static int kvm_put_msrs(CPUState *env, int level) if (smp_cpus == 1 || env->tsc != 0) { kvm_msr_entry_set(&msrs[n++], MSR_IA32_TSC, env->tsc); } + } + /* + * The following paravirtual MSRs have side effects on the guest or are + * too heavy for normal writeback. Limit them to reset or full state + * updates. + */ + if (level >= KVM_PUT_RESET_STATE) { kvm_msr_entry_set(&msrs[n++], MSR_KVM_SYSTEM_TIME, env->system_time_msr); kvm_msr_entry_set(&msrs[n++], MSR_KVM_WALL_CLOCK, env->wall_clock_msr); -- 1.7.1 -- 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