Clamp tick value before calling adjtimex
If tick is outside allowed adjtimex range, clamp it and log a warning instead of aborting.
This commit is contained in:
parent
1a7415a6ab
commit
be4369936b
1 changed files with 13 additions and 0 deletions
13
sys_linux.c
13
sys_linux.c
|
@ -566,6 +566,7 @@ static double
|
||||||
set_frequency(double freq_ppm)
|
set_frequency(double freq_ppm)
|
||||||
{
|
{
|
||||||
long required_tick;
|
long required_tick;
|
||||||
|
long min_allowed_tick, max_allowed_tick;
|
||||||
double required_freq; /* what we use */
|
double required_freq; /* what we use */
|
||||||
double scaled_freq; /* what adjtimex & the kernel use */
|
double scaled_freq; /* what adjtimex & the kernel use */
|
||||||
double old_total_tick;
|
double old_total_tick;
|
||||||
|
@ -594,6 +595,18 @@ set_frequency(double freq_ppm)
|
||||||
scaled_freq = -freq_scale * required_freq;
|
scaled_freq = -freq_scale * required_freq;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
min_allowed_tick = nominal_tick - max_tick_bias + 5;
|
||||||
|
max_allowed_tick = nominal_tick + max_tick_bias - 5;
|
||||||
|
|
||||||
|
if (required_tick < min_allowed_tick || required_tick > max_allowed_tick) {
|
||||||
|
LOG(LOGS_WARN, LOGF_SysLinux, "Required tick %ld outside allowed range (%ld .. %ld)", required_tick, min_allowed_tick, max_allowed_tick);
|
||||||
|
if (required_tick < min_allowed_tick) {
|
||||||
|
required_tick = min_allowed_tick;
|
||||||
|
} else {
|
||||||
|
required_tick = max_allowed_tick;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
current_tick = required_tick;
|
current_tick = required_tick;
|
||||||
old_total_tick = current_total_tick;
|
old_total_tick = current_total_tick;
|
||||||
current_total_tick = ((double)current_tick + required_freq/dhz) / 1.0e6 ;
|
current_total_tick = ((double)current_tick + required_freq/dhz) / 1.0e6 ;
|
||||||
|
|
Loading…
Reference in a new issue