Skip to content

Commit 025b40a

Browse files
agotorvalds
authored andcommitted
ntp: add hardpps implementation
This commit adds hardpps() implementation based upon the original one from the NTPv4 reference kernel code from David Mills. However, it is highly optimized towards very fast syncronization and maximum stickness to PPS signal. The typical error is less then a microsecond. To make it sync faster I had to throw away exponential phase filter so that the full phase offset is corrected immediately. Then I also had to throw away median phase filter because it gives a bigger error itself if used without exponential filter. Maybe we will find an appropriate filtering scheme in the future but it's not necessary if the signal quality is ok. Signed-off-by: Alexander Gordeev <[email protected]> Acked-by: John Stultz <[email protected]> Cc: Rodolfo Giometti <[email protected]> Signed-off-by: Andrew Morton <[email protected]> Signed-off-by: Linus Torvalds <[email protected]>
1 parent 12f9b1f commit 025b40a

File tree

3 files changed

+420
-15
lines changed

3 files changed

+420
-15
lines changed

drivers/pps/Kconfig

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,15 @@ config PPS_DEBUG
3030
messages to the system log. Select this if you are having a
3131
problem with PPS support and want to see more of what is going on.
3232

33+
config NTP_PPS
34+
bool "PPS kernel consumer support"
35+
depends on PPS && !NO_HZ
36+
help
37+
This option adds support for direct in-kernel time
38+
syncronization using an external PPS signal.
39+
40+
It doesn't work on tickless systems at the moment.
41+
3342
source drivers/pps/clients/Kconfig
3443

3544
endmenu

include/linux/timex.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -268,6 +268,7 @@ extern u64 tick_length;
268268
extern void second_overflow(void);
269269
extern void update_ntp_one_tick(void);
270270
extern int do_adjtimex(struct timex *);
271+
extern void hardpps(const struct timespec *, const struct timespec *);
271272

272273
int read_current_timer(unsigned long *timer_val);
273274

0 commit comments

Comments
 (0)