Merge branch 'fortglx/4.4/time' of https://git.linaro.org/people/john.stultz/linux into timers/core
Time updates from John Stultz: - More 2038 work from Arnd Bergmann around ntp and pps
This commit is contained in:
@@ -99,7 +99,7 @@ static time64_t ntp_next_leap_sec = TIME64_MAX;
|
||||
static int pps_valid; /* signal watchdog counter */
|
||||
static long pps_tf[3]; /* phase median filter */
|
||||
static long pps_jitter; /* current jitter (ns) */
|
||||
static struct timespec pps_fbase; /* beginning of the last freq interval */
|
||||
static struct timespec64 pps_fbase; /* beginning of the last freq interval */
|
||||
static int pps_shift; /* current interval duration (s) (shift) */
|
||||
static int pps_intcnt; /* interval counter */
|
||||
static s64 pps_freq; /* frequency offset (scaled ns/s) */
|
||||
@@ -509,7 +509,7 @@ static DECLARE_DELAYED_WORK(sync_cmos_work, sync_cmos_clock);
|
||||
static void sync_cmos_clock(struct work_struct *work)
|
||||
{
|
||||
struct timespec64 now;
|
||||
struct timespec next;
|
||||
struct timespec64 next;
|
||||
int fail = 1;
|
||||
|
||||
/*
|
||||
@@ -559,7 +559,7 @@ static void sync_cmos_clock(struct work_struct *work)
|
||||
next.tv_nsec -= NSEC_PER_SEC;
|
||||
}
|
||||
queue_delayed_work(system_power_efficient_wq,
|
||||
&sync_cmos_work, timespec_to_jiffies(&next));
|
||||
&sync_cmos_work, timespec64_to_jiffies(&next));
|
||||
}
|
||||
|
||||
void ntp_notify_cmos_timer(void)
|
||||
@@ -773,13 +773,13 @@ int __do_adjtimex(struct timex *txc, struct timespec64 *ts, s32 *time_tai)
|
||||
* pps_normtime.nsec has a range of ( -NSEC_PER_SEC / 2, NSEC_PER_SEC / 2 ]
|
||||
* while timespec.tv_nsec has a range of [0, NSEC_PER_SEC) */
|
||||
struct pps_normtime {
|
||||
__kernel_time_t sec; /* seconds */
|
||||
s64 sec; /* seconds */
|
||||
long nsec; /* nanoseconds */
|
||||
};
|
||||
|
||||
/* normalize the timestamp so that nsec is in the
|
||||
( -NSEC_PER_SEC / 2, NSEC_PER_SEC / 2 ] interval */
|
||||
static inline struct pps_normtime pps_normalize_ts(struct timespec ts)
|
||||
static inline struct pps_normtime pps_normalize_ts(struct timespec64 ts)
|
||||
{
|
||||
struct pps_normtime norm = {
|
||||
.sec = ts.tv_sec,
|
||||
@@ -861,7 +861,7 @@ static long hardpps_update_freq(struct pps_normtime freq_norm)
|
||||
pps_errcnt++;
|
||||
pps_dec_freq_interval();
|
||||
printk_deferred(KERN_ERR
|
||||
"hardpps: PPSERROR: interval too long - %ld s\n",
|
||||
"hardpps: PPSERROR: interval too long - %lld s\n",
|
||||
freq_norm.sec);
|
||||
return 0;
|
||||
}
|
||||
@@ -948,7 +948,7 @@ static void hardpps_update_phase(long error)
|
||||
* This code is based on David Mills's reference nanokernel
|
||||
* implementation. It was mostly rewritten but keeps the same idea.
|
||||
*/
|
||||
void __hardpps(const struct timespec *phase_ts, const struct timespec *raw_ts)
|
||||
void __hardpps(const struct timespec64 *phase_ts, const struct timespec64 *raw_ts)
|
||||
{
|
||||
struct pps_normtime pts_norm, freq_norm;
|
||||
|
||||
@@ -969,7 +969,7 @@ void __hardpps(const struct timespec *phase_ts, const struct timespec *raw_ts)
|
||||
}
|
||||
|
||||
/* ok, now we have a base for frequency calculation */
|
||||
freq_norm = pps_normalize_ts(timespec_sub(*raw_ts, pps_fbase));
|
||||
freq_norm = pps_normalize_ts(timespec64_sub(*raw_ts, pps_fbase));
|
||||
|
||||
/* check that the signal is in the range
|
||||
* [1s - MAXFREQ us, 1s + MAXFREQ us], otherwise reject it */
|
||||
|
@@ -9,5 +9,5 @@ extern ktime_t ntp_get_next_leap(void);
|
||||
extern int second_overflow(unsigned long secs);
|
||||
extern int ntp_validate_timex(struct timex *);
|
||||
extern int __do_adjtimex(struct timex *, struct timespec64 *, s32 *);
|
||||
extern void __hardpps(const struct timespec *, const struct timespec *);
|
||||
extern void __hardpps(const struct timespec64 *, const struct timespec64 *);
|
||||
#endif /* _LINUX_NTP_INTERNAL_H */
|
||||
|
@@ -849,7 +849,7 @@ EXPORT_SYMBOL_GPL(ktime_get_real_seconds);
|
||||
#ifdef CONFIG_NTP_PPS
|
||||
|
||||
/**
|
||||
* getnstime_raw_and_real - get day and raw monotonic time in timespec format
|
||||
* ktime_get_raw_and_real_ts64 - get day and raw monotonic time in timespec format
|
||||
* @ts_raw: pointer to the timespec to be set to raw monotonic time
|
||||
* @ts_real: pointer to the timespec to be set to the time of day
|
||||
*
|
||||
@@ -857,7 +857,7 @@ EXPORT_SYMBOL_GPL(ktime_get_real_seconds);
|
||||
* same time atomically and stores the resulting timestamps in timespec
|
||||
* format.
|
||||
*/
|
||||
void getnstime_raw_and_real(struct timespec *ts_raw, struct timespec *ts_real)
|
||||
void ktime_get_raw_and_real_ts64(struct timespec64 *ts_raw, struct timespec64 *ts_real)
|
||||
{
|
||||
struct timekeeper *tk = &tk_core.timekeeper;
|
||||
unsigned long seq;
|
||||
@@ -868,7 +868,7 @@ void getnstime_raw_and_real(struct timespec *ts_raw, struct timespec *ts_real)
|
||||
do {
|
||||
seq = read_seqcount_begin(&tk_core.seq);
|
||||
|
||||
*ts_raw = timespec64_to_timespec(tk->raw_time);
|
||||
*ts_raw = tk->raw_time;
|
||||
ts_real->tv_sec = tk->xtime_sec;
|
||||
ts_real->tv_nsec = 0;
|
||||
|
||||
@@ -877,10 +877,10 @@ void getnstime_raw_and_real(struct timespec *ts_raw, struct timespec *ts_real)
|
||||
|
||||
} while (read_seqcount_retry(&tk_core.seq, seq));
|
||||
|
||||
timespec_add_ns(ts_raw, nsecs_raw);
|
||||
timespec_add_ns(ts_real, nsecs_real);
|
||||
timespec64_add_ns(ts_raw, nsecs_raw);
|
||||
timespec64_add_ns(ts_real, nsecs_real);
|
||||
}
|
||||
EXPORT_SYMBOL(getnstime_raw_and_real);
|
||||
EXPORT_SYMBOL(ktime_get_raw_and_real_ts64);
|
||||
|
||||
#endif /* CONFIG_NTP_PPS */
|
||||
|
||||
@@ -2025,7 +2025,7 @@ int do_adjtimex(struct timex *txc)
|
||||
/**
|
||||
* hardpps() - Accessor function to NTP __hardpps function
|
||||
*/
|
||||
void hardpps(const struct timespec *phase_ts, const struct timespec *raw_ts)
|
||||
void hardpps(const struct timespec64 *phase_ts, const struct timespec64 *raw_ts)
|
||||
{
|
||||
unsigned long flags;
|
||||
|
||||
|
Reference in New Issue
Block a user