Message ID | 20240522001817.619072-18-dwmw2@infradead.org (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | Cleaning up the KVM clock mess | expand |
On 22/05/2024 01:17, David Woodhouse wrote: > From: David Woodhouse <dwmw@amazon.co.uk> > > Commit 0061d53daf26 ("KVM: x86: limit difference between kvmclock updates") > introduced a KVM_REQ_GLOBAL_CLOCK_UPDATE when one vCPU set up its clock. > > This was a workaround for the ever-drifting clocks which were based on the > host's CLOCK_MONOTONIC and thus subject to NTP skew. On booting or resuming > a guest, it just leads to running kvm_guest_time_update() twice for each > vCPU for now good reason. > > Just use KVM_REQ_CLOCK_UPDATE on the vCPU itself, and only in the case > where the KVM clock is being set up, not turned off. > > Signed-off-by: David Woodhouse <dwmw@amazon.co.uk> > --- > arch/x86/kvm/x86.c | 6 +++--- > 1 file changed, 3 insertions(+), 3 deletions(-) > Reviewed-by: Paul Durrant <paul@xen.org>
On Wed, May 22, 2024, David Woodhouse wrote: > From: David Woodhouse <dwmw@amazon.co.uk> > > Commit 0061d53daf26 ("KVM: x86: limit difference between kvmclock updates") > introduced a KVM_REQ_GLOBAL_CLOCK_UPDATE when one vCPU set up its clock. > > This was a workaround for the ever-drifting clocks which were based on the > host's CLOCK_MONOTONIC and thus subject to NTP skew. On booting or resuming > a guest, it just leads to running kvm_guest_time_update() twice for each > vCPU for now good reason. s/now/no > Just use KVM_REQ_CLOCK_UPDATE on the vCPU itself, and only in the case > where the KVM clock is being set up, not turned off. > > Signed-off-by: David Woodhouse <dwmw@amazon.co.uk> > --- > arch/x86/kvm/x86.c | 6 +++--- > 1 file changed, 3 insertions(+), 3 deletions(-) > > diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c > index 437412b36cae..32a873d5ed00 100644 > --- a/arch/x86/kvm/x86.c > +++ b/arch/x86/kvm/x86.c > @@ -2361,13 +2361,13 @@ static void kvm_write_system_time(struct kvm_vcpu *vcpu, gpa_t system_time, > } > > vcpu->arch.time = system_time; > - kvm_make_request(KVM_REQ_GLOBAL_CLOCK_UPDATE, vcpu); > > /* we verify if the enable bit is set... */ > - if (system_time & 1) > + if (system_time & 1) { > kvm_gpc_activate(&vcpu->arch.pv_time, system_time & ~1ULL, > sizeof(struct pvclock_vcpu_time_info)); > - else > + kvm_make_request(KVM_REQ_CLOCK_UPDATE, vcpu); > + } else Needs curly braces now that the if-statement has 'em. > kvm_gpc_deactivate(&vcpu->arch.pv_time); > > return; > -- > 2.44.0 >
diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c index 437412b36cae..32a873d5ed00 100644 --- a/arch/x86/kvm/x86.c +++ b/arch/x86/kvm/x86.c @@ -2361,13 +2361,13 @@ static void kvm_write_system_time(struct kvm_vcpu *vcpu, gpa_t system_time, } vcpu->arch.time = system_time; - kvm_make_request(KVM_REQ_GLOBAL_CLOCK_UPDATE, vcpu); /* we verify if the enable bit is set... */ - if (system_time & 1) + if (system_time & 1) { kvm_gpc_activate(&vcpu->arch.pv_time, system_time & ~1ULL, sizeof(struct pvclock_vcpu_time_info)); - else + kvm_make_request(KVM_REQ_CLOCK_UPDATE, vcpu); + } else kvm_gpc_deactivate(&vcpu->arch.pv_time); return;