Commit 9412e28649d0272df5e4af57bb378926fd4df580

Authored by Jeremy Fitzhardinge
Committed by Ingo Molnar
1 parent d5e181f78a

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>

Showing 1 changed file with 5 additions and 2 deletions Side-by-side Diff

include/linux/time.h
... ... @@ -170,10 +170,13 @@
170 170 * timespec_add_ns - Adds nanoseconds to a timespec
171 171 * @a: pointer to timespec to be incremented
172 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.
173 176 */
174   -static inline void timespec_add_ns(struct timespec *a, u64 ns)
  177 +static __always_inline void timespec_add_ns(struct timespec *a, u64 ns)
175 178 {
176   - a->tv_sec += iter_div_u64_rem(a->tv_nsec + ns, NSEC_PER_SEC, &ns);
  179 + a->tv_sec += __iter_div_u64_rem(a->tv_nsec + ns, NSEC_PER_SEC, &ns);
177 180 a->tv_nsec = ns;
178 181 }
179 182 #endif /* __KERNEL__ */