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