Commit 9412e28649d0272df5e4af57bb378926fd4df580
Committed by
Ingo Molnar
1 parent
d5e181f78a
Exists in
master
and in
7 other branches
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__ */ |