• Vitaly Kuznetsov's avatar
    KVM: x86: hyper-v: Prevent using not-yet-updated TSC page by secondary CPUs · e880c6ea
    Vitaly Kuznetsov authored
    When KVM_REQ_MASTERCLOCK_UPDATE request is issued (e.g. after migration)
    we need to make sure no vCPU sees stale values in PV clock structures and
    thus all vCPUs are kicked with KVM_REQ_CLOCK_UPDATE. Hyper-V TSC page
    clocksource is global and kvm_guest_time_update() only updates in on vCPU0
    but this is not entirely correct: nothing blocks some other vCPU from
    entering the guest before we finish the update on CPU0 and it can read
    stale values from the page.
    
    Invalidate TSC page in kvm_gen_update_masterclock() to switch all vCPUs
    to using MSR based clocksource (HV_X64_MSR_TIME_REF_COUNT).
    Signed-off-by: default avatarVitaly Kuznetsov <vkuznets@redhat.com>
    Message-Id: <20210316143736.964151-3-vkuznets@redhat.com>
    Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
    e880c6ea
x86.c 305 KB