summaryrefslogtreecommitdiff
path: root/cpukit
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2023-02-27 14:49:10 -0700
committerSebastian Huber <sebastian.huber@embedded-brains.de>2023-03-07 07:30:44 +0100
commitd5c386ff99933c2e71e2119b395cd0470a772a0b (patch)
tree9bbec1e6c6a18aa434437d9955d64cec7e3f67d6 /cpukit
parentd9f5345df6e6c37d6fbe2aafa85f40e6bfb8cd0b (diff)
pps: Round to closest integer in pps_event()
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 delta_nsec value is a time difference and not a timestamp. Also the rounding errors accumulate in the frequency accumulator, see hardpps(). So, rounding to the closest integer is probably slightly better. Reviewed by: imp Pull Request: https://github.com/freebsd/freebsd-src/pull/604
Diffstat (limited to 'cpukit')
-rw-r--r--cpukit/score/src/kern_tc.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/cpukit/score/src/kern_tc.c b/cpukit/score/src/kern_tc.c
index 0aa0fdd393..95ae01b5b4 100644
--- a/cpukit/score/src/kern_tc.c
+++ b/cpukit/score/src/kern_tc.c
@@ -2266,6 +2266,7 @@ pps_event(struct pps_state *pps, int event)
#ifdef PPS_SYNC
if (fhard) {
uint64_t delta_nsec;
+ uint64_t freq;
/*
* Feed the NTP PLL/FLL.
@@ -2277,7 +2278,8 @@ pps_event(struct pps_state *pps, int event)
tcount &= captc->tc_counter_mask;
delta_nsec = 1000000000;
delta_nsec *= tcount;
- delta_nsec /= captc->tc_frequency;
+ freq = captc->tc_frequency;
+ delta_nsec = (delta_nsec + freq / 2) / freq;
hardpps(tsp, (long)delta_nsec);
}
#endif