ntp: Change time_reftime to time64_t and utilize 64bit __ktime_get_real_seconds
The type of static variant "time_reftime" and the call of get_seconds in ntp are both not y2038 safe. So change the type of time_reftime to time64_t and replace get_seconds with __ktime_get_real_seconds. The local variant "secs" in ntp_update_offset represents seconds between now and last ntp adjustment, it seems impossible that this time will last more than 68 years, so keep its type as "long". Reviewed-by: John Stultz <john.stultz@linaro.org> Signed-off-by: DengChao <chao.deng@linaro.org> [jstultz: Tweaked commit message] Signed-off-by: John Stultz <john.stultz@linaro.org>
This commit is contained in:
parent
dee3665416
commit
0af864651b
|
@ -18,6 +18,8 @@
|
||||||
#include <linux/rtc.h>
|
#include <linux/rtc.h>
|
||||||
|
|
||||||
#include "ntp_internal.h"
|
#include "ntp_internal.h"
|
||||||
|
#include "timekeeping_internal.h"
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* NTP timekeeping variables:
|
* NTP timekeeping variables:
|
||||||
|
@ -70,7 +72,7 @@ static long time_esterror = NTP_PHASE_LIMIT;
|
||||||
static s64 time_freq;
|
static s64 time_freq;
|
||||||
|
|
||||||
/* time at last adjustment (secs): */
|
/* time at last adjustment (secs): */
|
||||||
static long time_reftime;
|
static time64_t time_reftime;
|
||||||
|
|
||||||
static long time_adjust;
|
static long time_adjust;
|
||||||
|
|
||||||
|
@ -313,11 +315,11 @@ static void ntp_update_offset(long offset)
|
||||||
* Select how the frequency is to be controlled
|
* Select how the frequency is to be controlled
|
||||||
* and in which mode (PLL or FLL).
|
* and in which mode (PLL or FLL).
|
||||||
*/
|
*/
|
||||||
secs = get_seconds() - time_reftime;
|
secs = (long)(__ktime_get_real_seconds() - time_reftime);
|
||||||
if (unlikely(time_status & STA_FREQHOLD))
|
if (unlikely(time_status & STA_FREQHOLD))
|
||||||
secs = 0;
|
secs = 0;
|
||||||
|
|
||||||
time_reftime = get_seconds();
|
time_reftime = __ktime_get_real_seconds();
|
||||||
|
|
||||||
offset64 = offset;
|
offset64 = offset;
|
||||||
freq_adj = ntp_update_offset_fll(offset64, secs);
|
freq_adj = ntp_update_offset_fll(offset64, secs);
|
||||||
|
@ -592,7 +594,7 @@ static inline void process_adj_status(struct timex *txc, struct timespec64 *ts)
|
||||||
* reference time to current time.
|
* reference time to current time.
|
||||||
*/
|
*/
|
||||||
if (!(time_status & STA_PLL) && (txc->status & STA_PLL))
|
if (!(time_status & STA_PLL) && (txc->status & STA_PLL))
|
||||||
time_reftime = get_seconds();
|
time_reftime = __ktime_get_real_seconds();
|
||||||
|
|
||||||
/* only set allowed bits */
|
/* only set allowed bits */
|
||||||
time_status &= STA_RONLY;
|
time_status &= STA_RONLY;
|
||||||
|
|
Loading…
Reference in New Issue