Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 11 Oct 2021 09:53:31 +0200
From:      Sebastian Huber <sebastian.huber@embedded-brains.de>
To:        FreeBSD Hackers <freebsd-hackers@freebsd.org>
Subject:   Large timecounter delta handling
Message-ID:  <5318327d-d247-bb73-81d9-967c4ae18d32@embedded-brains.de>

next in thread | raw e-mail | index | archive | help
Hello,

I synchronize currently the port of the FreeBSD timecounters to RTEMS. I=20
have to write test cases for all code we use in RTEMS. In 2020 some code=20
was added to fix integer overflow issues with large time deltas while=20
getting the time from a timehand.

https://github.com/freebsd/freebsd-src/commit/6cf2362e2c7e9061611f93a48ec=
654a5b7451d6b#diff-8b8e2f8e41e6a847f14ab08c7d50454c20a4a135f2c2241d91687c=
0832c1d99e

If a time delta obtained by tc_delta(th) is greater than or equal to=20
th->th_large_delta, then some extra calculation is carried out.

The th->th_large_delta is computed like this

	scale =3D (uint64_t)1 << 63;
	scale +=3D (th->th_adjustment / 1024) * 2199;
	scale /=3D th->th_counter->tc_frequency;
	th->th_scale =3D scale * 2;
	th->th_large_delta =3D MIN(((uint64_t)1 << 63) / scale, UINT_MAX);

If we ignore the th->th_adjustment (=3D=3D 0), then we have ideally

scale =3D 2**64 / f
th->th_large_delta =3D MIN( f / 2, UINT_MAX )

Does this mean that we only need the large delta processing if a=20
timehand was not updated for about 0.5s?

--=20
embedded brains GmbH
Herr Sebastian HUBER
Dornierstr. 4
82178 Puchheim
Germany
email: sebastian.huber@embedded-brains.de
phone: +49-89-18 94 741 - 16
fax:   +49-89-18 94 741 - 08

Registergericht: Amtsgericht M=C3=BCnchen
Registernummer: HRB 157899
Vertretungsberechtigte Gesch=C3=A4ftsf=C3=BChrer: Peter Rasmussen, Thomas=
 D=C3=B6rfler
Unsere Datenschutzerkl=C3=A4rung finden Sie hier:
https://embedded-brains.de/datenschutzerklaerung/



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?5318327d-d247-bb73-81d9-967c4ae18d32>