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: Jeremy Fitzhardinge <jeremy.fitzhardinge@citrix.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>

authored by Jeremy Fitzhardinge and committed by Ingo Molnar 9412e286 d5e181f7

+5 -2
+5 -2
include/linux/time.h
··· 170 * timespec_add_ns - Adds nanoseconds to a timespec 171 * @a: pointer to timespec to be incremented 172 * @ns: unsigned nanoseconds value to be added 173 */ 174 - static inline void timespec_add_ns(struct timespec *a, u64 ns) 175 { 176 - a->tv_sec += iter_div_u64_rem(a->tv_nsec + ns, NSEC_PER_SEC, &ns); 177 a->tv_nsec = ns; 178 } 179 #endif /* __KERNEL__ */
··· 170 * timespec_add_ns - Adds nanoseconds to a timespec 171 * @a: pointer to timespec to be incremented 172 * @ns: unsigned nanoseconds value to be added 173 + * 174 + * This must always be inlined because its used from the x86-64 vdso, 175 + * which cannot call other kernel functions. 176 */ 177 + static __always_inline void timespec_add_ns(struct timespec *a, u64 ns) 178 { 179 + a->tv_sec += __iter_div_u64_rem(a->tv_nsec + ns, NSEC_PER_SEC, &ns); 180 a->tv_nsec = ns; 181 } 182 #endif /* __KERNEL__ */