commit 6a95d77ad55b29ff2d856c9e1f7dd79682370300
Author: Segher Boessenkool <segher@kernel.crashing.org>
Date: Sat Aug 18 17:37:54 2007 +0200
Prevent the loop in timespec_add_ns() to be optimised away
...since some architectures don't support __udivdi3() (and
we don't want to use that, anyway).
diff --git a/include/linux/time.h b/include/linux/time.h
index 2091a19..d32ef0a 100644
--- a/include/linux/time.h
+++ b/include/linux/time.h
@@ -174,6 +174,10 @@ static inline void timespec_add_ns(struct timespec *a, u64
{
ns += a->tv_nsec;
while(unlikely(ns >= NSEC_PER_SEC)) {
+ /* The following asm() prevents the compiler from
+ * optimising this loop into a modulo operation. */
+ asm("" : "+r"(ns));
+
ns -= NSEC_PER_SEC;
a->tv_sec++;
}