set_frequency(double freq_ppm)
{
long required_tick;
+ long min_allowed_tick, max_allowed_tick;
double required_freq; /* what we use */
double scaled_freq; /* what adjtimex & the kernel use */
double old_total_tick;
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;
old_total_tick = current_total_tick;
current_total_tick = ((double)current_tick + required_freq/dhz) / 1.0e6 ;