Message ID | 1449980659-2948-3-git-send-email-chao.deng@linaro.org |
---|---|
State | Superseded |
Headers | show |
On Sat, Dec 12, 2015 at 8:24 PM, DengChao <chao.deng@linaro.org> wrote: > 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> Reworked the commit log a bit, but queued this for testing. thanks -john -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
diff --git a/kernel/time/ntp.c b/kernel/time/ntp.c index 149cc80..f9b9d8e 100644 --- a/kernel/time/ntp.c +++ b/kernel/time/ntp.c @@ -18,6 +18,8 @@ #include <linux/rtc.h> #include "ntp_internal.h" +#include "timekeeping_internal.h" + /* * NTP timekeeping variables: @@ -70,7 +72,7 @@ static long time_esterror = NTP_PHASE_LIMIT; static s64 time_freq; /* time at last adjustment (secs): */ -static long time_reftime; +static time64_t time_reftime; static long time_adjust; @@ -311,11 +313,11 @@ static void ntp_update_offset(long offset) * Select how the frequency is to be controlled * 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)) secs = 0; - time_reftime = get_seconds(); + time_reftime = __ktime_get_real_seconds(); offset64 = offset; freq_adj = ntp_update_offset_fll(offset64, secs); @@ -590,7 +592,7 @@ static inline void process_adj_status(struct timex *txc, struct timespec64 *ts) * reference time to current time. */ if (!(time_status & STA_PLL) && (txc->status & STA_PLL)) - time_reftime = get_seconds(); + time_reftime = __ktime_get_real_seconds(); /* only set allowed bits */ time_status &= STA_RONLY;