1/* SPDX-License-Identifier: GPL-2.0 */
2#include <pthread.h>
3#include <stdlib.h>
4#include <signal.h>
5#include <unistd.h>
6#include <linux/compiler.h>
7#include "../tests.h"
8
9static volatile sig_atomic_t done;
10
11/* We want to check this symbol in perf report */
12noinline void test_loop(void);
13
14static void sighandler(int sig __maybe_unused)
15{
16	done = 1;
17}
18
19noinline void test_loop(void)
20{
21	while (!done);
22}
23
24static void *thfunc(void *arg)
25{
26	void (*loop_fn)(void) = arg;
27
28	loop_fn();
29	return NULL;
30}
31
32static int thloop(int argc, const char **argv)
33{
34	int sec = 1;
35	pthread_t th;
36
37	if (argc > 0)
38		sec = atoi(argv[0]);
39
40	signal(SIGINT, sighandler);
41	signal(SIGALRM, sighandler);
42	alarm(sec);
43
44	pthread_create(&th, NULL, thfunc, test_loop);
45	test_loop();
46	pthread_join(th, NULL);
47
48	return 0;
49}
50
51DEFINE_WORKLOAD(thloop);
52