public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Thomas Gleixner <tglx@kernel.org>
To: Yuwen Chen <ywen.chen@foxmail.com>, ywen.chen@foxmail.com
Cc: akpm@linux-foundation.org, andrealmeid@igalia.com,
	bigeasy@linutronix.de, colin.i.king@gmail.com, dave@stgolabs.net,
	dvhart@infradead.org, edliaw@google.com, justinstitt@google.com,
	kernel-team@android.com, licayy@foxmail.com,
	linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org,
	luto@mit.edu, mingo@redhat.com, morbo@google.com,
	nathan@kernel.org, ndesaulniers@google.com, peterz@infradead.org,
	shuah@kernel.org, usama.anjum@collabora.com, wakel@google.com
Subject: Re: [PATCH v5 1/2] selftests/futex: implement the interfaces related to threads
Date: Fri, 13 Feb 2026 09:23:14 +0100	[thread overview]
Message-ID: <87ldgx832l.ffs@tglx> (raw)
In-Reply-To: <tencent_7C6BB90BA288915B621CD975E9FC368FF305@qq.com>

On Thu, Feb 05 2026 at 10:08, Yuwen Chen wrote:
> There are timing issues in the use of threads in some unit test cases
> for futex.

This is handwaving and contains zero technical information.

https://www.kernel.org/doc/html/latest/process/maintainer-tip.html#changelog

> A potentially good solution is to check whether the thread

Either it's a solution or not. 

> is in the sleep state after creating it.

> This patch adds a file named futex_thread.h, in which several thread

# git grep 'This patch' Documentation/process/

> related functions are implemented to facilitate the solution of this
> problem.
>
> Signed-off-by: Yuwen Chen <ywen.chen@foxmail.com>

https://www.kernel.org/doc/html/latest/process/submitting-patches.html#using-reported-by-tested-by-reviewed-by-suggested-by-and-fixes

> +#ifndef _FUTEX_THREAD_H
> +#define _FUTEX_THREAD_H
> +#include <stdio.h>
> +#include <string.h>
> +#include <errno.h>
> +
> +#define USEC_PER_SEC 1000000L

#include <linux/time64.h>

> +#define WAIT_THREAD_RETRIES 100
> +#define WAIT_THREAD_CREATE_TIMEOUT_USECS (USEC_PER_SEC)
> +
> +struct futex_thread {
> +	pthread_t		thread;
> +	pthread_barrier_t	barrier;
> +	pid_t			tid;
> +	int			(*threadfn)(void *arg);
> +	void			*arg;
> +	int			retval;
> +};
> +
> +static int __wait_for_thread(FILE *fp)
> +{
> +	char buf[80] = "";
> +
> +	for (int i = 0; i < WAIT_THREAD_RETRIES; i++) {
> +		if (!fgets(buf, sizeof(buf), fp))
> +			return -EIO;
> +		if (!strncmp(buf, "futex", 5))
> +			return 0;
> +		usleep(WAIT_THREAD_CREATE_TIMEOUT_USECS / WAIT_THREAD_RETRIES);

What's wrong with

#define WAIT_THREAD_DELAY	(USEC_PER_SEC / WAIT_THREAD_RETRIES)
...
                usleep(WAIT_THREAD_DELAY);

> +		rewind(fp);
> +	}
> +	return -ETIMEDOUT;
> +}
> +
> +static void *__futex_thread_fn(void *arg)
> +{
> +	struct futex_thread *t = arg;
> +
> +	t->tid = gettid();
> +	pthread_barrier_wait(&t->barrier);
> +	t->retval = t->threadfn(t->arg);
> +	return NULL;
> +}
> +
> +/**
> + * futex_wait_for_thread - Wait for the child thread to sleep in the futex context
> + * @t: Thread handle.
> + */
> +static int futex_wait_for_thread(struct futex_thread *t)
> +{
> +	char fname[80];
> +	FILE *fp;
> +	int res;
> +
> +	snprintf(fname, sizeof(fname), "/proc/%d/wchan", t->tid);
> +	fp = fopen(fname, "r");
> +	if (!fp) {
> +		usleep(USEC_PER_SEC / 10);

What is this usleep for?

> +		return -EIO;
> +	}
> +
> +	res = __wait_for_thread(fp);
> +	if (res == -EIO)
> +		usleep(USEC_PER_SEC / 10);

Again. What's this usleep for?

If the file cannot be opened or fgets() fails then this fails hard.

> +	fclose(fp);
> +	return res;
> +}
> +
> +/**
> + * futex_thread_create - Create a new thread for testing.
> + * @t:        The handle of the newly created thread.
> + * @threadfn: The new thread starts execution by invoking threadfn
> + * @arg:      The parameters passed to threadfn.
> + */
> +static int futex_thread_create(struct futex_thread *t, int (*threadfn)(void *), void *arg)
> +{
> +	int ret;
> +
> +	pthread_barrier_init(&t->barrier, NULL, 2);
> +	t->tid = 0;
> +	t->threadfn = threadfn;
> +	t->arg = arg;
> +
> +	ret = pthread_create(&t->thread, NULL, __futex_thread_fn, t);
> +	if (ret)
> +		return ret;
> +
> +	pthread_barrier_wait(&t->barrier);
> +	return 0;

Why aren't you waiting for the thread right here? There is absolutely no
point in doing that at the call site of futex_thread_create().

Thanks,

        tglx

  reply	other threads:[~2026-02-13  8:23 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-02-05  2:00 [PATCH v5 0/2] selftests/futex: fix the failed futex_requeue test Yuwen Chen
2026-02-05  2:08 ` [PATCH v5 1/2] selftests/futex: implement the interfaces related to threads Yuwen Chen
2026-02-13  8:23   ` Thomas Gleixner [this message]
2026-02-27  8:53     ` Yuwen Chen
2026-02-05  2:09 ` [PATCH v5 2/2] selftests/futex: fix the failed futex_requeue test issue Yuwen Chen
2026-02-13  8:25   ` Thomas Gleixner
  -- strict thread matches above, loose matches on Subject: below --
2026-02-05  2:05 [PATCH v5 1/2] selftests/futex: implement the interfaces related to threads Yuwen Chen

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=87ldgx832l.ffs@tglx \
    --to=tglx@kernel.org \
    --cc=akpm@linux-foundation.org \
    --cc=andrealmeid@igalia.com \
    --cc=bigeasy@linutronix.de \
    --cc=colin.i.king@gmail.com \
    --cc=dave@stgolabs.net \
    --cc=dvhart@infradead.org \
    --cc=edliaw@google.com \
    --cc=justinstitt@google.com \
    --cc=kernel-team@android.com \
    --cc=licayy@foxmail.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-kselftest@vger.kernel.org \
    --cc=luto@mit.edu \
    --cc=mingo@redhat.com \
    --cc=morbo@google.com \
    --cc=nathan@kernel.org \
    --cc=ndesaulniers@google.com \
    --cc=peterz@infradead.org \
    --cc=shuah@kernel.org \
    --cc=usama.anjum@collabora.com \
    --cc=wakel@google.com \
    --cc=ywen.chen@foxmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox