All pastes #914258 Raw Edit

Stuff

public text v1 · immutable
·published 2008-02-22 19:26 UTC
rendered paste body
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++;
        }