[PATCH v3] cpuidle: Fix last_residency division
Shreyas B Prabhu
shreyas at linux.vnet.ibm.com
Fri Jul 1 00:20:03 AEST 2016
On 06/29/2016 08:31 PM, Nicolas Pitre wrote:
> On Wed, 29 Jun 2016, Daniel Lezcano wrote:
>
>> On 06/29/2016 09:06 AM, Shreyas B. Prabhu wrote:
>>> diff --git a/drivers/cpuidle/cpuidle.h b/drivers/cpuidle/cpuidle.h
>>> index f87f399..c8ea5ad 100644
>>> --- a/drivers/cpuidle/cpuidle.h
>>> +++ b/drivers/cpuidle/cpuidle.h
>>> @@ -68,4 +68,27 @@ static inline void
>>> cpuidle_coupled_unregister_device(struct cpuidle_device *dev)
>>> }
>>> #endif
>>>
>>> +/*
>>> + * Used for calculating last_residency in usec. Optimized for case
>>> + * where last_residency in nsecs is < INT_MAX/2 by using faster
>>> + * approximation. Approximated value has less than 1% error.
>>> + */
>>> +static inline int convert_nsec_to_usec(u64 nsec)
>>> +{
>>> + if (likely(nsec < INT_MAX / 2)) {
>>
>> UINT_MAX ?
>
> Actually this can be better than that.
>
>>> + int usec = (int)nsec;
>
> First, you'll want an unsigned type. Given the provided argument is u64,
> we can assume there won't be any negative values here.
>
> Then it would be wise to use a type with an explicit width, like U32.
Cool. I wanted to avoid multiple casts. i.e u64 -> u32 -> int. But I
guess there is no real need to avoid it.
Sending v4 with your suggestions.
Thanks,
Shreyas
More information about the Linuxppc-dev
mailing list