diff options
author | Mark Johnston <markj@FreeBSD.org> | 2025-03-10 03:01:13 +0000 |
---|---|---|
committer | Mark Johnston <markj@FreeBSD.org> | 2025-03-10 03:01:13 +0000 |
commit | 36ae5ce2f2fda35763c2655a19bf1b0ee22fdf3c (patch) | |
tree | 8486151ab594b6e70e50cc5255483dcebb8ac409 /usr.sbin/bsdinstall | |
parent | 9a30c8d347bf9aaa89277b6e5a275f737be8edce (diff) |
This routine returns a monotonic count of the number of nanoseconds elapsed
since the previous call. On arm64 it uses the generic system timer. The
implementation multiplies the counter value by 10**9 then divides by the counter
frequency, but this multiplication can overflow. This can result in trace
records with non-monotonic timestamps, which breaks libdtrace's temporal
ordering algorithm.
An easy fix is to reverse the order of operations, since the counter frequency
will in general be smaller than 10**9. (In fact, it's mandated to be 1Ghz in
ARMv9, which makes life simple.) However, this can give a fair bit of error.
Adopt the calculation used on amd64, with tweaks to handle frequencies as low as
1MHz: the ARM generic timer documentation suggests that ARMv8 timers are
typically in the 1MHz-50MHz range, which is true on arm64 systems that I have
access to.
MFC after: 2 weeks
Sponsored by: Innovate UK
Differential Revision: https://reviews.freebsd.org/D49244
Diffstat (limited to 'usr.sbin/bsdinstall')
0 files changed, 0 insertions, 0 deletions