> -----Original Message-----
> From: kvm-ppc-ow...@vger.kernel.org 
> [mailto:kvm-ppc-ow...@vger.kernel.org] On Behalf Of Bharat Bhushan
> Sent: Wednesday, October 19, 2011 12:16 PM
> To: ag...@suse.de
> Cc: kvm-ppc@vger.kernel.org; bharatb.ya...@gmail.com; Bhushan 
> Bharat-R65777
> Subject: [PATCH v2] Fix DEC truncation for greater than 
> 0xffff_ffff/1000
> 
> kvmppc_emulate_dec() uses dec_nsec of type unsigned long and 
> does below calculation:
> 
>         dec_nsec = vcpu->arch.dec;
>         dec_nsec *= 1000;
> This will truncate if DEC value "vcpu->arch.dec" is greater 
> than 0xffff_ffff/1000.
> For example : For tb_ticks_per_usec = 4a, we can not set 
> decrementer more than ~58ms.
> 
> Signed-off-by: Bharat Bhushan <bharat.bhus...@freescale.com>
> ---
>  arch/powerpc/kvm/emulate.c |   12 +++++++-----
>  1 files changed, 7 insertions(+), 5 deletions(-)
> 
> diff --git a/arch/powerpc/kvm/emulate.c b/arch/powerpc/kvm/emulate.c
> index 8af3bad..e7f3da4 100644
> --- a/arch/powerpc/kvm/emulate.c
> +++ b/arch/powerpc/kvm/emulate.c
> @@ -84,6 +84,7 @@ static bool kvmppc_dec_enabled(struct 
> kvm_vcpu *vcpu)
>  void kvmppc_emulate_dec(struct kvm_vcpu *vcpu)
>  {
>       unsigned long dec_nsec;
> +     unsigned long long dec_time;
>  
>       pr_debug("mtDEC: %x\n", vcpu->arch.dec);
>  #ifdef CONFIG_PPC_BOOK3S
> @@ -103,11 +104,12 @@ void kvmppc_emulate_dec(struct kvm_vcpu *vcpu)
>                * host ticks. */
>  
>               hrtimer_try_to_cancel(&vcpu->arch.dec_timer);
> -             dec_nsec = vcpu->arch.dec;
> -             dec_nsec *= 1000;
> -             dec_nsec /= tb_ticks_per_usec;
> -             hrtimer_start(&vcpu->arch.dec_timer, 
> ktime_set(0, dec_nsec),
> -                           HRTIMER_MODE_REL);
> +             dec_time = vcpu->arch.dec;
> +             dec_time *= 1000;
> +             do_div(dec_time, tb_ticks_per_usec);
> +             dec_nsec = do_div(dec_time, NSEC_PER_SEC);
> +             hrtimer_start(&vcpu->arch.dec_timer,
> +                     ktime_set(dec_time, dec_nsec), 
> HRTIMER_MODE_REL);
>               vcpu->arch.dec_jiffies = get_tb();
>       } else {
>               hrtimer_try_to_cancel(&vcpu->arch.dec_timer);
> -- 
> 1.7.0.4
> 

How does this impact performance?
64bits multiplication and division looks slow.

Thanks,
Yu
--
To unsubscribe from this list: send the line "unsubscribe kvm-ppc" 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