Commit 0af86465 authored by DengChao's avatar DengChao Committed by John Stultz

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: default avatarJohn Stultz <john.stultz@linaro.org>
Signed-off-by: default avatarDengChao <chao.deng@linaro.org>
[jstultz: Tweaked commit message]
Signed-off-by: default avatarJohn Stultz <john.stultz@linaro.org>
parent dee36654
...@@ -18,6 +18,8 @@ ...@@ -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; ...@@ -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) ...@@ -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) ...@@ -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;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment