[PATCH 3/3] always_inline timespec_add_ns

Previous thread: [PATCH 2/3] add an inlined version of iter_div_u64_rem by Jeremy Fitzhardinge on Wednesday, May 14, 2008 - 11:48 am. (1 message)

Next thread: [PATCH] types.h: Don't expose struct ustat to userspace by maximilian attems on Wednesday, May 14, 2008 - 12:07 pm. (1 message)
To: Andrew Morton <akpm@...>, Ingo Molnar <mingo@...>, Thomas Gleixner <tglx@...>, Andi Kleen <andi@...>, Linux Kernel Mailing List <linux-kernel@...>
Date: Wednesday, May 14, 2008 - 11:48 am

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>
---
include/linux/time.h | 7 +++++--
1 file changed, 5 insertions(+), 2 deletions(-)

===================================================================
--- a/include/linux/time.h
+++ b/include/linux/time.h
@@ -170,10 +170,13 @@
* 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__ */

--

Previous thread: [PATCH 2/3] add an inlined version of iter_div_u64_rem by Jeremy Fitzhardinge on Wednesday, May 14, 2008 - 11:48 am. (1 message)

Next thread: [PATCH] types.h: Don't expose struct ustat to userspace by maximilian attems on Wednesday, May 14, 2008 - 12:07 pm. (1 message)