Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/s390/linux
[firefly-linux-kernel-4.4.55.git] / kernel / time / clocksource.c
index ba3e502c955a4e00311a15c187072e13b79b91bd..2e949cc9c9f113bbcd3a330bffba861f78e17f33 100644 (file)
@@ -32,6 +32,7 @@
 #include <linux/kthread.h>
 
 #include "tick-internal.h"
+#include "timekeeping_internal.h"
 
 void timecounter_init(struct timecounter *tc,
                      const struct cyclecounter *cc,
@@ -249,7 +250,7 @@ void clocksource_mark_unstable(struct clocksource *cs)
 static void clocksource_watchdog(unsigned long data)
 {
        struct clocksource *cs;
-       cycle_t csnow, wdnow;
+       cycle_t csnow, wdnow, delta;
        int64_t wd_nsec, cs_nsec;
        int next_cpu, reset_pending;
 
@@ -282,11 +283,12 @@ static void clocksource_watchdog(unsigned long data)
                        continue;
                }
 
-               wd_nsec = clocksource_cyc2ns((wdnow - cs->wd_last) & watchdog->mask,
-                                            watchdog->mult, watchdog->shift);
+               delta = clocksource_delta(wdnow, cs->wd_last, watchdog->mask);
+               wd_nsec = clocksource_cyc2ns(delta, watchdog->mult,
+                                            watchdog->shift);
 
-               cs_nsec = clocksource_cyc2ns((csnow - cs->cs_last) &
-                                            cs->mask, cs->mult, cs->shift);
+               delta = clocksource_delta(csnow, cs->cs_last, cs->mask);
+               cs_nsec = clocksource_cyc2ns(delta, cs->mult, cs->shift);
                cs->cs_last = csnow;
                cs->wd_last = wdnow;