always_inline timespec_add_ns
authorJeremy Fitzhardinge <jeremy.fitzhardinge@citrix.com>
Thu, 12 Jun 2008 08:48:00 +0000 (10:48 +0200)
committerIngo Molnar <mingo@elte.hu>
Thu, 12 Jun 2008 08:48:00 +0000 (10:48 +0200)
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>
include/linux/time.h

index 05f9517a8ed142b18df18e5723f0d9d0299a10bc..e15206a7e82ec9278b25fc062585302f9ed71687 100644 (file)
@@ -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__ */