|
@@ -232,7 +232,14 @@ static inline int ntp_synced(void)
|
|
|
#else
|
|
|
#define NTP_INTERVAL_FREQ (HZ)
|
|
|
#endif
|
|
|
-#define NTP_INTERVAL_LENGTH (NSEC_PER_SEC/NTP_INTERVAL_FREQ)
|
|
|
+
|
|
|
+#define CLOCK_TICK_OVERFLOW (LATCH * HZ - CLOCK_TICK_RATE)
|
|
|
+#define CLOCK_TICK_ADJUST (((s64)CLOCK_TICK_OVERFLOW * NSEC_PER_SEC) / \
|
|
|
+ (s64)CLOCK_TICK_RATE)
|
|
|
+
|
|
|
+/* Because using NSEC_PER_SEC would be too easy */
|
|
|
+#define NTP_INTERVAL_LENGTH ((((s64)TICK_USEC * NSEC_PER_USEC * USER_HZ) + \
|
|
|
+ CLOCK_TICK_ADJUST) / NTP_INTERVAL_FREQ)
|
|
|
|
|
|
/* Returns how long ticks are at present, in ns / 2^(SHIFT_SCALE-10). */
|
|
|
extern u64 current_tick_length(void);
|