|
@@ -24,7 +24,7 @@ static u64 tick_length, tick_length_base;
|
|
|
|
|
|
#define MAX_TICKADJ 500 /* microsecs */
|
|
|
#define MAX_TICKADJ_SCALED (((u64)(MAX_TICKADJ * NSEC_PER_USEC) << \
|
|
|
- TICK_LENGTH_SHIFT) / HZ)
|
|
|
+ TICK_LENGTH_SHIFT) / NTP_INTERVAL_FREQ)
|
|
|
|
|
|
/*
|
|
|
* phase-lock loop variables
|
|
@@ -46,13 +46,17 @@ long time_adjust;
|
|
|
|
|
|
static void ntp_update_frequency(void)
|
|
|
{
|
|
|
- tick_length_base = (u64)(tick_usec * NSEC_PER_USEC * USER_HZ) << TICK_LENGTH_SHIFT;
|
|
|
- tick_length_base += (s64)CLOCK_TICK_ADJUST << TICK_LENGTH_SHIFT;
|
|
|
- tick_length_base += (s64)time_freq << (TICK_LENGTH_SHIFT - SHIFT_NSEC);
|
|
|
+ u64 second_length = (u64)(tick_usec * NSEC_PER_USEC * USER_HZ)
|
|
|
+ << TICK_LENGTH_SHIFT;
|
|
|
+ second_length += (s64)CLOCK_TICK_ADJUST << TICK_LENGTH_SHIFT;
|
|
|
+ second_length += (s64)time_freq << (TICK_LENGTH_SHIFT - SHIFT_NSEC);
|
|
|
|
|
|
- do_div(tick_length_base, HZ);
|
|
|
+ tick_length_base = second_length;
|
|
|
|
|
|
- tick_nsec = tick_length_base >> TICK_LENGTH_SHIFT;
|
|
|
+ do_div(second_length, HZ);
|
|
|
+ tick_nsec = second_length >> TICK_LENGTH_SHIFT;
|
|
|
+
|
|
|
+ do_div(tick_length_base, NTP_INTERVAL_FREQ);
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -162,7 +166,7 @@ void second_overflow(void)
|
|
|
tick_length -= MAX_TICKADJ_SCALED;
|
|
|
} else {
|
|
|
tick_length += (s64)(time_adjust * NSEC_PER_USEC /
|
|
|
- HZ) << TICK_LENGTH_SHIFT;
|
|
|
+ NTP_INTERVAL_FREQ) << TICK_LENGTH_SHIFT;
|
|
|
time_adjust = 0;
|
|
|
}
|
|
|
}
|
|
@@ -239,7 +243,8 @@ int do_adjtimex(struct timex *txc)
|
|
|
result = -EINVAL;
|
|
|
goto leave;
|
|
|
}
|
|
|
- time_freq = ((s64)txc->freq * NSEC_PER_USEC) >> (SHIFT_USEC - SHIFT_NSEC);
|
|
|
+ time_freq = ((s64)txc->freq * NSEC_PER_USEC)
|
|
|
+ >> (SHIFT_USEC - SHIFT_NSEC);
|
|
|
}
|
|
|
|
|
|
if (txc->modes & ADJ_MAXERROR) {
|
|
@@ -309,7 +314,8 @@ int do_adjtimex(struct timex *txc)
|
|
|
freq_adj += time_freq;
|
|
|
freq_adj = min(freq_adj, (s64)MAXFREQ_NSEC);
|
|
|
time_freq = max(freq_adj, (s64)-MAXFREQ_NSEC);
|
|
|
- time_offset = (time_offset / HZ) << SHIFT_UPDATE;
|
|
|
+ time_offset = (time_offset / NTP_INTERVAL_FREQ)
|
|
|
+ << SHIFT_UPDATE;
|
|
|
} /* STA_PLL */
|
|
|
} /* txc->modes & ADJ_OFFSET */
|
|
|
if (txc->modes & ADJ_TICK)
|
|
@@ -324,8 +330,10 @@ leave: if ((time_status & (STA_UNSYNC|STA_CLOCKERR)) != 0)
|
|
|
if ((txc->modes & ADJ_OFFSET_SINGLESHOT) == ADJ_OFFSET_SINGLESHOT)
|
|
|
txc->offset = save_adjust;
|
|
|
else
|
|
|
- txc->offset = shift_right(time_offset, SHIFT_UPDATE) * HZ / 1000;
|
|
|
- txc->freq = (time_freq / NSEC_PER_USEC) << (SHIFT_USEC - SHIFT_NSEC);
|
|
|
+ txc->offset = shift_right(time_offset, SHIFT_UPDATE)
|
|
|
+ * NTP_INTERVAL_FREQ / 1000;
|
|
|
+ txc->freq = (time_freq / NSEC_PER_USEC)
|
|
|
+ << (SHIFT_USEC - SHIFT_NSEC);
|
|
|
txc->maxerror = time_maxerror;
|
|
|
txc->esterror = time_esterror;
|
|
|
txc->status = time_status;
|