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 <yoshikawa_takuya...@lab.ntt.co.jp>
> ---
>  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.
--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to