[PATCH 6/6] pps: Round to closest integer in pps_event()
- In reply to: Sebastian Huber : "[PATCH 0/6] Simplify pps_capture() and pps_event()"
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Thu, 07 Jul 2022 15:25:06 UTC
The comment above bintime2timespec() says: When converting between timestamps on parallel timescales of differing resolutions it is historical and scientific practice to round down. However, the nsec value is a time difference and not a timestamp. So, rounding to the closest integer is probably slightly better. --- sys/kern/kern_tc.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/sys/kern/kern_tc.c b/sys/kern/kern_tc.c index f29dd9b8e7f2..8db5911a4c0e 100644 --- a/sys/kern/kern_tc.c +++ b/sys/kern/kern_tc.c @@ -1882,6 +1882,7 @@ pps_event(struct pps_state *pps, int event) #ifdef PPS_SYNC if (fhard) { uint64_t nsec; + uint64_t freq; /* * Feed the NTP PLL/FLL. @@ -1893,7 +1894,8 @@ pps_event(struct pps_state *pps, int event) tcount &= captc->tc_counter_mask; nsec = 1000000000; nsec *= tcount; - nsec /= captc->tc_frequency; + freq = captc->tc_frequency; + nsec = (nesc + freq / 2) / freq; hardpps(tsp, (long)nsec); } #endif -- 2.35.3