1/* SPDX-License-Identifier: GPL-2.0 */
2#include <math.h>
3#include <signal.h>
4#include <stdlib.h>
5#include <unistd.h>
6#include <linux/compiler.h>
7#include <sys/wait.h>
8#include "../tests.h"
9
10static volatile sig_atomic_t done;
11
12static void sighandler(int sig __maybe_unused)
13{
14 done = 1;
15}
16
17static int __sqrtloop(int sec)
18{
19 signal(SIGALRM, sighandler);
20 alarm(sec);
21
22 while (!done)
23 (void)sqrt(rand());
24 return 0;
25}
26
27static int sqrtloop(int argc, const char **argv)
28{
29 int sec = 1;
30
31 if (argc > 0)
32 sec = atoi(argv[0]);
33
34 switch (fork()) {
35 case 0:
36 return __sqrtloop(sec);
37 case -1:
38 return -1;
39 default:
40 wait(NULL);
41 }
42 return 0;
43}
44
45DEFINE_WORKLOAD(sqrtloop);
46

source code of linux/tools/perf/tests/workloads/sqrtloop.c