Commit 7597bc94 authored by David Howells's avatar David Howells Committed by Linus Torvalds

Fix accidental implicit cast in HR-timer conversion

Fix the hrtimer_add_expires_ns() function.  It should take a 'u64 ns' argument,
but rather takes an 'unsigned long ns' argument - which might only be 32-bits.

On FRV, this results in the kernel locking up because hrtimer_forward() passes
the result of a 64-bit multiplication to this function, for which the compiler
discards the top 32-bits - something that didn't happen when ktime_add_ns() was
called directly.
Signed-off-by: default avatarDavid Howells <dhowells@redhat.com>
Acked-by: default avatarArjan van de Ven <arjan@linux.intel.com>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent c3619487
...@@ -239,7 +239,7 @@ static inline void hrtimer_add_expires(struct hrtimer *timer, ktime_t time) ...@@ -239,7 +239,7 @@ static inline void hrtimer_add_expires(struct hrtimer *timer, ktime_t time)
timer->_softexpires = ktime_add_safe(timer->_softexpires, time); timer->_softexpires = ktime_add_safe(timer->_softexpires, time);
} }
static inline void hrtimer_add_expires_ns(struct hrtimer *timer, unsigned long ns) static inline void hrtimer_add_expires_ns(struct hrtimer *timer, u64 ns)
{ {
timer->_expires = ktime_add_ns(timer->_expires, ns); timer->_expires = ktime_add_ns(timer->_expires, ns);
timer->_softexpires = ktime_add_ns(timer->_softexpires, ns); timer->_softexpires = ktime_add_ns(timer->_softexpires, ns);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment