Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 9412e286 authored by Jeremy Fitzhardinge's avatar Jeremy Fitzhardinge Committed by Ingo Molnar
Browse files

always_inline timespec_add_ns



timespec_add_ns is used from the x86-64 vdso, which cannot call out to
other kernel code.  Make sure that timespec_add_ns is always inlined
(and only uses always_inlined functions) to make sure there are no
unexpected calls.

Signed-off-by: default avatarJeremy Fitzhardinge <jeremy.fitzhardinge@citrix.com>
Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
parent d5e181f7
Loading
Loading
Loading
Loading
+5 −2
Original line number Original line Diff line number Diff line
@@ -170,10 +170,13 @@ extern struct timeval ns_to_timeval(const s64 nsec);
 * timespec_add_ns - Adds nanoseconds to a timespec
 * timespec_add_ns - Adds nanoseconds to a timespec
 * @a:		pointer to timespec to be incremented
 * @a:		pointer to timespec to be incremented
 * @ns:		unsigned nanoseconds value to be added
 * @ns:		unsigned nanoseconds value to be added
 *
 * This must always be inlined because its used from the x86-64 vdso,
 * which cannot call other kernel functions.
 */
 */
static inline void timespec_add_ns(struct timespec *a, u64 ns)
static __always_inline void timespec_add_ns(struct timespec *a, u64 ns)
{
{
	a->tv_sec += iter_div_u64_rem(a->tv_nsec + ns, NSEC_PER_SEC, &ns);
	a->tv_sec += __iter_div_u64_rem(a->tv_nsec + ns, NSEC_PER_SEC, &ns);
	a->tv_nsec = ns;
	a->tv_nsec = ns;
}
}
#endif /* __KERNEL__ */
#endif /* __KERNEL__ */