mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2025-01-09 06:33:34 +00:00
ntp: Clamp PLL update interval
Clamp update interval to reduce PLL gain with low sampling rate (e.g. intermittent network connection) to avoid instability. The clamp roughly corresponds to the loop time constant, it's 8 * poll interval for SHIFT_PLL 2 and 32 * poll interval for SHIFT_PLL 4. This gives good results without affecting the gain in normal conditions where ntpd skips only up to seven consecutive samples. Signed-off-by: Miroslav Lichvar <mlichvar@redhat.com> Acked-by: john stultz <johnstul@us.ibm.com> LKML-Reference: <1283870626-9472-1-git-send-email-mlichvar@redhat.com> Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
This commit is contained in:
parent
d56557af19
commit
8af3c153ba
@ -149,10 +149,18 @@ static void ntp_update_offset(long offset)
|
||||
time_reftime = get_seconds();
|
||||
|
||||
offset64 = offset;
|
||||
freq_adj = (offset64 * secs) <<
|
||||
(NTP_SCALE_SHIFT - 2 * (SHIFT_PLL + 2 + time_constant));
|
||||
freq_adj = ntp_update_offset_fll(offset64, secs);
|
||||
|
||||
freq_adj += ntp_update_offset_fll(offset64, secs);
|
||||
/*
|
||||
* Clamp update interval to reduce PLL gain with low
|
||||
* sampling rate (e.g. intermittent network connection)
|
||||
* to avoid instability.
|
||||
*/
|
||||
if (unlikely(secs > 1 << (SHIFT_PLL + 1 + time_constant)))
|
||||
secs = 1 << (SHIFT_PLL + 1 + time_constant);
|
||||
|
||||
freq_adj += (offset64 * secs) <<
|
||||
(NTP_SCALE_SHIFT - 2 * (SHIFT_PLL + 2 + time_constant));
|
||||
|
||||
freq_adj = min(freq_adj + time_freq, MAXFREQ_SCALED);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user