diff options
Diffstat (limited to 'kernel')
-rw-r--r-- | kernel/time/hrtimer.c | 14 |
1 files changed, 8 insertions, 6 deletions
diff --git a/kernel/time/hrtimer.c b/kernel/time/hrtimer.c index 76d4bd962b19..93ef7190bdea 100644 --- a/kernel/time/hrtimer.c +++ b/kernel/time/hrtimer.c | |||
@@ -266,21 +266,23 @@ lock_hrtimer_base(const struct hrtimer *timer, unsigned long *flags) | |||
266 | /* | 266 | /* |
267 | * Divide a ktime value by a nanosecond value | 267 | * Divide a ktime value by a nanosecond value |
268 | */ | 268 | */ |
269 | u64 __ktime_divns(const ktime_t kt, s64 div) | 269 | s64 __ktime_divns(const ktime_t kt, s64 div) |
270 | { | 270 | { |
271 | u64 dclc; | ||
272 | int sft = 0; | 271 | int sft = 0; |
272 | s64 dclc; | ||
273 | u64 tmp; | ||
273 | 274 | ||
274 | dclc = ktime_to_ns(kt); | 275 | dclc = ktime_to_ns(kt); |
276 | tmp = dclc < 0 ? -dclc : dclc; | ||
277 | |||
275 | /* Make sure the divisor is less than 2^32: */ | 278 | /* Make sure the divisor is less than 2^32: */ |
276 | while (div >> 32) { | 279 | while (div >> 32) { |
277 | sft++; | 280 | sft++; |
278 | div >>= 1; | 281 | div >>= 1; |
279 | } | 282 | } |
280 | dclc >>= sft; | 283 | tmp >>= sft; |
281 | do_div(dclc, (unsigned long) div); | 284 | do_div(tmp, (unsigned long) div); |
282 | 285 | return dclc < 0 ? -tmp : tmp; | |
283 | return dclc; | ||
284 | } | 286 | } |
285 | EXPORT_SYMBOL_GPL(__ktime_divns); | 287 | EXPORT_SYMBOL_GPL(__ktime_divns); |
286 | #endif /* BITS_PER_LONG >= 64 */ | 288 | #endif /* BITS_PER_LONG >= 64 */ |