mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-24 13:44:26 -04:00
Merge branch 'timers-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
Pull timer fix from Thomas Gleixner:
"One more fix from the timer departement:
- Handle division of negative nanosecond values proper on 32bit.
A recent cleanup wrecked the sign handling of the dividend and
dropped the check for negative divisors"
* 'timers-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
ktime: Fix ktime_divns to do signed division
This commit is contained in:
commit
c5db6a3bde
2 changed files with 29 additions and 12 deletions
|
|
@ -266,21 +266,23 @@ lock_hrtimer_base(const struct hrtimer *timer, unsigned long *flags)
|
|||
/*
|
||||
* Divide a ktime value by a nanosecond value
|
||||
*/
|
||||
u64 __ktime_divns(const ktime_t kt, s64 div)
|
||||
s64 __ktime_divns(const ktime_t kt, s64 div)
|
||||
{
|
||||
u64 dclc;
|
||||
int sft = 0;
|
||||
s64 dclc;
|
||||
u64 tmp;
|
||||
|
||||
dclc = ktime_to_ns(kt);
|
||||
tmp = dclc < 0 ? -dclc : dclc;
|
||||
|
||||
/* Make sure the divisor is less than 2^32: */
|
||||
while (div >> 32) {
|
||||
sft++;
|
||||
div >>= 1;
|
||||
}
|
||||
dclc >>= sft;
|
||||
do_div(dclc, (unsigned long) div);
|
||||
|
||||
return dclc;
|
||||
tmp >>= sft;
|
||||
do_div(tmp, (unsigned long) div);
|
||||
return dclc < 0 ? -tmp : tmp;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(__ktime_divns);
|
||||
#endif /* BITS_PER_LONG >= 64 */
|
||||
|
|
|
|||
Loading…
Reference in a new issue