|
From: | Andrey Smetanin |
Subject: | Re: [Qemu-devel] [PATCH v1] kvm/x86: Hyper-V tsc page setup |
Date: | Fri, 22 Jan 2016 14:11:46 +0300 |
User-agent: | Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.0.1 |
On 01/22/2016 02:02 PM, Paolo Bonzini wrote:
On 22/01/2016 11:15, Andrey Smetanin wrote:- unless KVM can use a master clock, it is incorrect to set up the TSC page this way; the sequence needs to be 0xFFFFFFFF in that case0xFFFFFFFF is not an invalid value for tsc page, see https://lkml.org/lkml/2015/11/2/655oh, I see now.- writing the TSC page must be done while all VCPUs are stopped, because the TSC page doesn't provide the possibility for the guest to retry in the middle of an update (like seqcount in Linux doess)I think Windows guest gives tsc page address at boot time and protects against other vcpu's tsc page access.Sometimes the TSC is detected to be unstable and Linux switches to another clocksource. At least in that case you can get a write to the TSC page while the guest is running.
I can't understand how write is possible.Linux Hyper-V driver hv_vmbus.ko does the following inside hv_init() drivers/hv/hv.c(line 256):
wrmsrl(HV_X64_MSR_REFERENCE_TSC, tsc_msr.as_uint64); clocksource_register_hz(&hyperv_cs_tsc, NSEC_PER_SEC/100); So page is setup only once before registration clock source.
In that case it would be enough to write a zero to tsc_sequence, which _can_ be done atomically while the guest is running. However, KVM already has a mechanism to stop all VCPUs (KVM_REQ_MASTERCLOCK_UPDATE) so we might as well use it. Paolo
[Prev in Thread] | Current Thread | [Next in Thread] |