Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 3 Jun 2022 15:10:10 +0200
From:      Sebastian Huber <sebastian.huber@embedded-brains.de>
To:        Poul-Henning Kamp <phk@phk.freebsd.dk>
Cc:        Konstantin Belousov <kostikbel@gmail.com>, hackers@freebsd.org
Subject:   Re: pps_capture() and pps_fetch()
Message-ID:  <35d4d55c-ff62-cff7-cdbf-ea2549dee86c@embedded-brains.de>
In-Reply-To: <202206030828.2538ScDg080165@critter.freebsd.dk>
References:  <5b8310db-c94b-709f-8c57-bec2d413a80f@embedded-brains.de> <202206010725.2517PEfF036703@critter.freebsd.dk> <e1093df0-c719-0421-3e96-c6d7df861a51@embedded-brains.de> <YphDlMyWxDWvJo5Q@kib.kiev.ua> <c4fe6a08-24b6-522e-3963-cf03eb994496@embedded-brains.de> <202206030828.2538ScDg080165@critter.freebsd.dk>

next in thread | previous in thread | raw e-mail | index | archive | help
On 03.06.22 10:28, Poul-Henning Kamp wrote:
>> The expensive part in pps_event() is after the th_generation checks. I
>> think from a performance point of view, the checks can be reduced to
>> just one th_generation check. I am more concerned if this would
>> introduce a subtle functional change.
> Assuming that your timecounter hardware does not roll over fast enough
> to open any races, I think that is correct.

Would a timecounter overflow within a time interval from th_generation=20
to th_generation + 1 not be a bug in general?

static __inline void
bintime_off(struct bintime *bt, u_int off)
{
	struct timehands *th;
	struct bintime *btp;
	uint64_t scale;
	u_int delta, gen, large_delta;

	do {
		th =3D timehands;
		gen =3D atomic_load_acq_int(&th->th_generation);

For example, if the thread gets interrupted here and the timecounter=20
overflows, then the measurement below would be wrong if th_generation=20
didn't change.

		btp =3D (struct bintime *)((vm_offset_t)th + off);
		*bt =3D *btp;
		scale =3D th->th_scale;
		delta =3D tc_delta(th);
		large_delta =3D th->th_large_delta;
		atomic_thread_fence_acq();
	} while (gen =3D=3D 0 || gen !=3D th->th_generation);

	bintime_add_tc_delta(bt, scale, large_delta, delta);
}


--=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?35d4d55c-ff62-cff7-cdbf-ea2549dee86c>