Message ID | 1623050385-100988-2-git-send-email-wanpengli@tencent.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | [v2,1/3] KVM: LAPIC: Write 0 to TMICT should also cancel vmx-preemption timer | expand |
On 07/06/21 09:19, Wanpeng Li wrote: > From: Wanpeng Li <wanpengli@tencent.com> > > The value of the current counter register after reset is 0 for both > Intel and AMD, let's do it in kvm, though, the TMCCT is always computed > on-demand and never directly readable. It's useless though since it's never read except by KVM_SET_LAPIC. Perhaps instead set TMCCT to 0 in kvm_apic_set_state, instead of keeping the value that was filled in by KVM_GET_LAPIC? Paolo > Reviewed-by: Jim Mattson <jmattson@google.com> > Signed-off-by: Wanpeng Li <wanpengli@tencent.com> > --- > v1 -> v2: > * update patch description > > arch/x86/kvm/lapic.c | 1 + > 1 file changed, 1 insertion(+) > > diff --git a/arch/x86/kvm/lapic.c b/arch/x86/kvm/lapic.c > index 6d72d8f..cbfdecd 100644 > --- a/arch/x86/kvm/lapic.c > +++ b/arch/x86/kvm/lapic.c > @@ -2352,6 +2352,7 @@ void kvm_lapic_reset(struct kvm_vcpu *vcpu, bool init_event) > kvm_lapic_set_reg(apic, APIC_ICR2, 0); > kvm_lapic_set_reg(apic, APIC_TDCR, 0); > kvm_lapic_set_reg(apic, APIC_TMICT, 0); > + kvm_lapic_set_reg(apic, APIC_TMCCT, 0); > for (i = 0; i < 8; i++) { > kvm_lapic_set_reg(apic, APIC_IRR + 0x10 * i, 0); > kvm_lapic_set_reg(apic, APIC_ISR + 0x10 * i, 0); >
On Wed, 9 Jun 2021 at 00:27, Paolo Bonzini <pbonzini@redhat.com> wrote: [...] > Perhaps instead set TMCCT to 0 in kvm_apic_set_state, instead of keeping > the value that was filled in by KVM_GET_LAPIC? Keeping the value that was filled in by KVM_GET_LAPIC is introduced by commit 24647e0a39b6 (KVM: x86: Return updated timer current count register from KVM_GET_LAPIC), could you elaborate more? :) Wanpeng
On 09/06/21 04:15, Wanpeng Li wrote: > On Wed, 9 Jun 2021 at 00:27, Paolo Bonzini <pbonzini@redhat.com> wrote: > [...] >> Perhaps instead set TMCCT to 0 in kvm_apic_set_state, instead of keeping >> the value that was filled in by KVM_GET_LAPIC? > > Keeping the value that was filled in by KVM_GET_LAPIC is introduced by > commit 24647e0a39b6 (KVM: x86: Return updated timer current count > register from KVM_GET_LAPIC), could you elaborate more? :) KVM_GET_LAPIC stores the current value of TMCCT and KVM_SET_LAPIC's memcpy stores it in vcpu->arch.apic->regs. KVM_SET_LAPIC perhaps could store zero in vcpu->arch.apic->regs after it uses it, and then the stored value would always be zero. Paolo
On Wed, 9 Jun 2021 at 13:52, Paolo Bonzini <pbonzini@redhat.com> wrote: > > On 09/06/21 04:15, Wanpeng Li wrote: > > On Wed, 9 Jun 2021 at 00:27, Paolo Bonzini <pbonzini@redhat.com> wrote: > > [...] > >> Perhaps instead set TMCCT to 0 in kvm_apic_set_state, instead of keeping > >> the value that was filled in by KVM_GET_LAPIC? > > > > Keeping the value that was filled in by KVM_GET_LAPIC is introduced by > > commit 24647e0a39b6 (KVM: x86: Return updated timer current count > > register from KVM_GET_LAPIC), could you elaborate more? :) > > KVM_GET_LAPIC stores the current value of TMCCT and KVM_SET_LAPIC's > memcpy stores it in vcpu->arch.apic->regs. KVM_SET_LAPIC perhaps could > store zero in vcpu->arch.apic->regs after it uses it, and then the > stored value would always be zero. Just do it in a new version, thanks. :) Wanpeng
diff --git a/arch/x86/kvm/lapic.c b/arch/x86/kvm/lapic.c index 6d72d8f..cbfdecd 100644 --- a/arch/x86/kvm/lapic.c +++ b/arch/x86/kvm/lapic.c @@ -2352,6 +2352,7 @@ void kvm_lapic_reset(struct kvm_vcpu *vcpu, bool init_event) kvm_lapic_set_reg(apic, APIC_ICR2, 0); kvm_lapic_set_reg(apic, APIC_TDCR, 0); kvm_lapic_set_reg(apic, APIC_TMICT, 0); + kvm_lapic_set_reg(apic, APIC_TMCCT, 0); for (i = 0; i < 8; i++) { kvm_lapic_set_reg(apic, APIC_IRR + 0x10 * i, 0); kvm_lapic_set_reg(apic, APIC_ISR + 0x10 * i, 0);