Skip to content

Commit

Permalink
always_inline timespec_add_ns
Browse files Browse the repository at this point in the history
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 <[email protected]>
Signed-off-by: Ingo Molnar <[email protected]>
  • Loading branch information
Jeremy Fitzhardinge authored and Ingo Molnar committed Jun 12, 2008
1 parent d5e181f commit 9412e28
Showing 1 changed file with 5 additions and 2 deletions.
7 changes: 5 additions & 2 deletions include/linux/time.h
Original file line number Diff line number Diff line change
Expand Up @@ -170,10 +170,13 @@ extern struct timeval ns_to_timeval(const s64 nsec);
* timespec_add_ns - Adds nanoseconds to a timespec
* @a: pointer to timespec to be incremented
* @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;
}
#endif /* __KERNEL__ */
Expand Down

0 comments on commit 9412e28

Please sign in to comment.