mirror of
https://gitlab.com/chrony/chrony.git
synced 2025-12-03 23:45:07 -05:00
Allow changing tick up to max_tick_bias
This commit is contained in:
22
sys_linux.c
22
sys_linux.c
@@ -493,14 +493,22 @@ initiate_slew(void)
|
|||||||
max_allowed_tick = nominal_tick + max_tick_bias;
|
max_allowed_tick = nominal_tick + max_tick_bias;
|
||||||
|
|
||||||
if (offset_register > 0) {
|
if (offset_register > 0) {
|
||||||
|
if (current_tick <= min_allowed_tick) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
slewing_tick = current_tick - slew_delta_tick;
|
slewing_tick = current_tick - slew_delta_tick;
|
||||||
if (slewing_tick <= min_allowed_tick) {
|
if (slewing_tick < min_allowed_tick) {
|
||||||
slewing_tick = min_allowed_tick + 1;
|
slewing_tick = min_allowed_tick;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
if (current_tick >= max_allowed_tick) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
slewing_tick = current_tick + slew_delta_tick;
|
slewing_tick = current_tick + slew_delta_tick;
|
||||||
if (slewing_tick >= max_allowed_tick) {
|
if (slewing_tick > max_allowed_tick) {
|
||||||
slewing_tick = max_allowed_tick - 1;
|
slewing_tick = max_allowed_tick;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -509,6 +517,8 @@ initiate_slew(void)
|
|||||||
delta_total_tick = (double) tick_adjust / 1.0e6;
|
delta_total_tick = (double) tick_adjust / 1.0e6;
|
||||||
dseconds = - offset_register * (current_total_tick + delta_total_tick) / delta_total_tick;
|
dseconds = - offset_register * (current_total_tick + delta_total_tick) / delta_total_tick;
|
||||||
|
|
||||||
|
assert(dseconds > 0.0);
|
||||||
|
|
||||||
/* Now set the thing off */
|
/* Now set the thing off */
|
||||||
if (gettimeofday(&T0, NULL) < 0) {
|
if (gettimeofday(&T0, NULL) < 0) {
|
||||||
LOG_FATAL(LOGF_SysLinux, "gettimeofday() failed");
|
LOG_FATAL(LOGF_SysLinux, "gettimeofday() failed");
|
||||||
@@ -662,8 +672,8 @@ 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;
|
min_allowed_tick = nominal_tick - max_tick_bias;
|
||||||
max_allowed_tick = nominal_tick + max_tick_bias - 5;
|
max_allowed_tick = nominal_tick + max_tick_bias;
|
||||||
|
|
||||||
if (required_tick < min_allowed_tick || required_tick > max_allowed_tick) {
|
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);
|
LOG(LOGS_WARN, LOGF_SysLinux, "Required tick %ld outside allowed range (%ld .. %ld)", required_tick, min_allowed_tick, max_allowed_tick);
|
||||||
|
|||||||
Reference in New Issue
Block a user