[igt-dev] [Intel-gfx] [PATCH i-g-t] lib: Use read() for timerfd timeout detection

Dixit, Ashutosh ashutosh.dixit at intel.com
Tue Apr 14 21:37:44 UTC 2020


On Tue, 14 Apr 2020 12:05:09 -0700, Chris Wilson wrote:
>
> The poll() is proving unreliable, where our tests timeout without the
> spinner being terminated. Let's try a blocking read instead!

Weird, wondering if all we need to do is set TFD_NONBLOCK on the fd?

>
> Closes: https://gitlab.freedesktop.org/drm/intel/-/issues/1676
> Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
> ---
>  lib/igt_dummyload.c | 11 ++++++-----
>  1 file changed, 6 insertions(+), 5 deletions(-)
>
> diff --git a/lib/igt_dummyload.c b/lib/igt_dummyload.c
> index 99ca84ad8..a59afd45b 100644
> --- a/lib/igt_dummyload.c
> +++ b/lib/igt_dummyload.c
> @@ -399,12 +399,13 @@ igt_spin_factory(int fd, const struct igt_spin_factory *opts)
>  static void *timer_thread(void *data)
>  {
>	igt_spin_t *spin = data;
> -	struct pollfd pfd = {
> -		.fd = spin->timerfd,
> -		.events = POLLIN,
> -	};
> +	uint64_t overruns = 0;
> +	int ret;
>
> -	if (poll(&pfd, 1, -1) >= 0)
> +	do {
> +		ret = read(spin->timerfd, &overruns, sizeof(overruns));
> +	} while (ret == -1 && errno == EINTR);

do {} while (!overruns) and skip if () below?

> +	if (overruns)
>		igt_spin_end(spin);
>
>	return NULL;
> --
> 2.26.0
>
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/intel-gfx


More information about the igt-dev mailing list