diff options
Diffstat (limited to 'kernel')
-rw-r--r-- | kernel/time/ntp.c | 29 |
1 files changed, 17 insertions, 12 deletions
diff --git a/kernel/time/ntp.c b/kernel/time/ntp.c index 3479ec48e604..1fa6615b317a 100644 --- a/kernel/time/ntp.c +++ b/kernel/time/ntp.c | |||
@@ -232,19 +232,24 @@ void second_overflow(void) | |||
232 | time_offset -= time_adj; | 232 | time_offset -= time_adj; |
233 | tick_length += time_adj; | 233 | tick_length += time_adj; |
234 | 234 | ||
235 | if (unlikely(time_adjust)) { | 235 | if (!time_adjust) |
236 | if (time_adjust > MAX_TICKADJ) { | 236 | return; |
237 | time_adjust -= MAX_TICKADJ; | 237 | |
238 | tick_length += MAX_TICKADJ_SCALED; | 238 | if (time_adjust > MAX_TICKADJ) { |
239 | } else if (time_adjust < -MAX_TICKADJ) { | 239 | time_adjust -= MAX_TICKADJ; |
240 | time_adjust += MAX_TICKADJ; | 240 | tick_length += MAX_TICKADJ_SCALED; |
241 | tick_length -= MAX_TICKADJ_SCALED; | 241 | return; |
242 | } else { | ||
243 | tick_length += (s64)(time_adjust * NSEC_PER_USEC / | ||
244 | NTP_INTERVAL_FREQ) << NTP_SCALE_SHIFT; | ||
245 | time_adjust = 0; | ||
246 | } | ||
247 | } | 242 | } |
243 | |||
244 | if (time_adjust < -MAX_TICKADJ) { | ||
245 | time_adjust += MAX_TICKADJ; | ||
246 | tick_length -= MAX_TICKADJ_SCALED; | ||
247 | return; | ||
248 | } | ||
249 | |||
250 | tick_length += (s64)(time_adjust * NSEC_PER_USEC / NTP_INTERVAL_FREQ) | ||
251 | << NTP_SCALE_SHIFT; | ||
252 | time_adjust = 0; | ||
248 | } | 253 | } |
249 | 254 | ||
250 | #ifdef CONFIG_GENERIC_CMOS_UPDATE | 255 | #ifdef CONFIG_GENERIC_CMOS_UPDATE |