Date: Thu, 7 Jul 2022 17:25:06 +0200 From: Sebastian Huber <sebastian.huber@embedded-brains.de> To: freebsd-hackers@freebsd.org Subject: [PATCH 6/6] pps: Round to closest integer in pps_event() Message-ID: <20220707152506.55626-7-sebastian.huber@embedded-brains.de> In-Reply-To: <20220707152506.55626-1-sebastian.huber@embedded-brains.de> References: <20220707152506.55626-1-sebastian.huber@embedded-brains.de>
next in thread | previous in thread | raw e-mail | index | archive | help
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
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20220707152506.55626-7-sebastian.huber>
