RE: [PATCH v2] Fix DEC truncation for greater than 0xffff_ffff/1000

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



 

> -----Original Message-----
> From: kvm-ppc-owner@xxxxxxxxxxxxxxx 
> [mailto:kvm-ppc-owner@xxxxxxxxxxxxxxx] On Behalf Of Bharat Bhushan
> Sent: Wednesday, October 19, 2011 12:16 PM
> To: agraf@xxxxxxx
> Cc: kvm-ppc@xxxxxxxxxxxxxxx; bharatb.yadav@xxxxxxxxx; 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.bhushan@xxxxxxxxxxxxx>
> ---
>  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 majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [KVM Development]     [KVM ARM]     [KVM ia64]     [Linux Virtualization]     [Linux USB Devel]     [Linux Video]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Big List of Linux Books]

  Powered by Linux