From mboxrd@z Thu Jan 1 00:00:00 1970 From: Gleb Natapov Subject: Re: [PATCH] KVM: Don't use vcpu->requests for steal time accounting Date: Fri, 14 Dec 2012 13:28:15 +0200 Message-ID: <20121214112815.GM29003@redhat.com> References: <20121214193718.efd714cf.yoshikawa_takuya_b1@lab.ntt.co.jp> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Cc: mtosatti@redhat.com, kvm@vger.kernel.org To: Takuya Yoshikawa Return-path: Received: from mx1.redhat.com ([209.132.183.28]:26401 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753952Ab2LNL2a (ORCPT ); Fri, 14 Dec 2012 06:28:30 -0500 Content-Disposition: inline In-Reply-To: <20121214193718.efd714cf.yoshikawa_takuya_b1@lab.ntt.co.jp> Sender: kvm-owner@vger.kernel.org List-ID: On Fri, Dec 14, 2012 at 07:37:18PM +0900, Takuya Yoshikawa wrote: > We can check if accum_steal has any positive value instead of using > KVM_REQ_STEAL_UPDATE bit in vcpu->requests; and this is the way we > usually do for accounting for something in the kernel. > Now you added check that will be done on each guest entry, requests mechanism prevents that. > Signed-off-by: Takuya Yoshikawa > --- > arch/x86/kvm/x86.c | 11 +++++------ > include/linux/kvm_host.h | 41 ++++++++++++++++++++--------------------- > 2 files changed, 25 insertions(+), 27 deletions(-) > > diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c > index 57c76e8..fab4c3e 100644 > --- a/arch/x86/kvm/x86.c > +++ b/arch/x86/kvm/x86.c > @@ -1857,6 +1857,9 @@ static void accumulate_steal_time(struct kvm_vcpu *vcpu) > > static void record_steal_time(struct kvm_vcpu *vcpu) > { > + if (!vcpu->arch.st.accum_steal) > + return; > + > if (!(vcpu->arch.st.msr_val & KVM_MSR_ENABLED)) > return; > > @@ -1992,9 +1995,6 @@ int kvm_set_msr_common(struct kvm_vcpu *vcpu, struct msr_data *msr_info) > preempt_disable(); > accumulate_steal_time(vcpu); > preempt_enable(); > - > - kvm_make_request(KVM_REQ_STEAL_UPDATE, vcpu); > - > break; > case MSR_KVM_PV_EOI_EN: > if (kvm_lapic_enable_pv_eoi(vcpu, data)) > @@ -2668,7 +2668,6 @@ void kvm_arch_vcpu_load(struct kvm_vcpu *vcpu, int cpu) > } > > accumulate_steal_time(vcpu); > - kvm_make_request(KVM_REQ_STEAL_UPDATE, vcpu); > } > > void kvm_arch_vcpu_put(struct kvm_vcpu *vcpu) > @@ -5645,8 +5644,6 @@ static int vcpu_enter_guest(struct kvm_vcpu *vcpu) > r = 1; > goto out; > } > - if (kvm_check_request(KVM_REQ_STEAL_UPDATE, vcpu)) > - record_steal_time(vcpu); > if (kvm_check_request(KVM_REQ_NMI, vcpu)) > process_nmi(vcpu); > req_immediate_exit = > @@ -5672,6 +5669,8 @@ static int vcpu_enter_guest(struct kvm_vcpu *vcpu) > } > } > > + record_steal_time(vcpu); > + > r = kvm_mmu_reload(vcpu); > if (unlikely(r)) { > goto cancel_injection; > diff --git a/include/linux/kvm_host.h b/include/linux/kvm_host.h > index 91ae127..5476ffc 100644 > --- a/include/linux/kvm_host.h > +++ b/include/linux/kvm_host.h > @@ -112,27 +112,26 @@ static inline bool is_error_page(struct page *page) > /* > * vcpu->requests bit members > */ > -#define KVM_REQ_TLB_FLUSH 0 > -#define KVM_REQ_MIGRATE_TIMER 1 > -#define KVM_REQ_REPORT_TPR_ACCESS 2 > -#define KVM_REQ_MMU_RELOAD 3 > -#define KVM_REQ_TRIPLE_FAULT 4 > -#define KVM_REQ_PENDING_TIMER 5 > -#define KVM_REQ_UNHALT 6 > -#define KVM_REQ_MMU_SYNC 7 > -#define KVM_REQ_CLOCK_UPDATE 8 > -#define KVM_REQ_KICK 9 > -#define KVM_REQ_DEACTIVATE_FPU 10 > -#define KVM_REQ_EVENT 11 > -#define KVM_REQ_APF_HALT 12 > -#define KVM_REQ_STEAL_UPDATE 13 > -#define KVM_REQ_NMI 14 > -#define KVM_REQ_IMMEDIATE_EXIT 15 > -#define KVM_REQ_PMU 16 > -#define KVM_REQ_PMI 17 > -#define KVM_REQ_WATCHDOG 18 > -#define KVM_REQ_MASTERCLOCK_UPDATE 19 > -#define KVM_REQ_MCLOCK_INPROGRESS 20 > +#define KVM_REQ_TLB_FLUSH 0 > +#define KVM_REQ_MIGRATE_TIMER 1 > +#define KVM_REQ_REPORT_TPR_ACCESS 2 > +#define KVM_REQ_MMU_RELOAD 3 > +#define KVM_REQ_TRIPLE_FAULT 4 > +#define KVM_REQ_PENDING_TIMER 5 > +#define KVM_REQ_UNHALT 6 > +#define KVM_REQ_MMU_SYNC 7 > +#define KVM_REQ_CLOCK_UPDATE 8 > +#define KVM_REQ_KICK 9 > +#define KVM_REQ_DEACTIVATE_FPU 10 > +#define KVM_REQ_EVENT 11 > +#define KVM_REQ_APF_HALT 12 > +#define KVM_REQ_NMI 13 > +#define KVM_REQ_IMMEDIATE_EXIT 14 > +#define KVM_REQ_PMU 15 > +#define KVM_REQ_PMI 16 > +#define KVM_REQ_WATCHDOG 17 > +#define KVM_REQ_MASTERCLOCK_UPDATE 18 > +#define KVM_REQ_MCLOCK_INPROGRESS 19 > > #define KVM_USERSPACE_IRQ_SOURCE_ID 0 > #define KVM_IRQFD_RESAMPLE_IRQ_SOURCE_ID 1 > -- > 1.7.5.4 -- Gleb.