&ka->master_cycle_now);
 
        ka->use_master_clock = host_tsc_clocksource && vcpus_matched
-                               && !backwards_tsc_observed;
+                               && !backwards_tsc_observed
+                               && !ka->boot_vcpu_runs_old_kvmclock;
 
        if (ka->use_master_clock)
                atomic_set(&kvm_guest_has_master_clock, 1);
        case MSR_KVM_SYSTEM_TIME_NEW:
        case MSR_KVM_SYSTEM_TIME: {
                u64 gpa_offset;
+               struct kvm_arch *ka = &vcpu->kvm->arch;
+
                kvmclock_reset(vcpu);
 
+               if (vcpu->vcpu_id == 0 && !msr_info->host_initiated) {
+                       bool tmp = (msr == MSR_KVM_SYSTEM_TIME);
+
+                       if (ka->boot_vcpu_runs_old_kvmclock != tmp)
+                               set_bit(KVM_REQ_MASTERCLOCK_UPDATE,
+                                       &vcpu->requests);
+
+                       ka->boot_vcpu_runs_old_kvmclock = tmp;
+               }
+
                vcpu->arch.time = data;
                kvm_make_request(KVM_REQ_GLOBAL_CLOCK_UPDATE, vcpu);