]> git.ipfire.org Git - thirdparty/chrony.git/commitdiff
Allow changing tick up to max_tick_bias
authorMiroslav Lichvar <mlichvar@redhat.com>
Tue, 12 Apr 2011 14:40:22 +0000 (16:40 +0200)
committerMiroslav Lichvar <mlichvar@redhat.com>
Tue, 12 Apr 2011 14:40:22 +0000 (16:40 +0200)
sys_linux.c

index 046b9573ff837cb62106dfea3d2ec7f64949952c..7370d227db781cd185d968c9598bbeb683c49e46 100644 (file)
@@ -493,14 +493,22 @@ initiate_slew(void)
     max_allowed_tick = nominal_tick + max_tick_bias;
 
     if (offset_register > 0) {
+      if (current_tick <= min_allowed_tick) {
+        return;
+      }
+
       slewing_tick = current_tick - slew_delta_tick;
-      if (slewing_tick <= min_allowed_tick) {
-        slewing_tick = min_allowed_tick + 1;
+      if (slewing_tick < min_allowed_tick) {
+        slewing_tick = min_allowed_tick;
       }
     } else {
+      if (current_tick >= max_allowed_tick) {
+        return;
+      }
+
       slewing_tick = current_tick + slew_delta_tick;
-      if (slewing_tick >= max_allowed_tick) {
-        slewing_tick = max_allowed_tick - 1;
+      if (slewing_tick > max_allowed_tick) {
+        slewing_tick = max_allowed_tick;
       }
     }
 
@@ -509,6 +517,8 @@ initiate_slew(void)
     delta_total_tick = (double) tick_adjust / 1.0e6;
     dseconds = - offset_register * (current_total_tick + delta_total_tick) / delta_total_tick;
 
+    assert(dseconds > 0.0);
+
     /* Now set the thing off */
     if (gettimeofday(&T0, NULL) < 0) {
       LOG_FATAL(LOGF_SysLinux, "gettimeofday() failed");
@@ -662,8 +672,8 @@ set_frequency(double freq_ppm)
     scaled_freq = -freq_scale * required_freq;
   }
 
-  min_allowed_tick = nominal_tick - max_tick_bias + 5;
-  max_allowed_tick = nominal_tick + max_tick_bias - 5;
+  min_allowed_tick = nominal_tick - max_tick_bias;
+  max_allowed_tick = nominal_tick + max_tick_bias;
 
   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);