mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-09-11 18:25:33 -04:00
Currently, the noploop and thloop workloads only support sleep durations in integer seconds because they parse the argument using atoi() and use alarm() for timer signaling. To support much shorter execution times in tests (speeding up test suites and allowing faster retries), change the input parsing to use atof() for double floating-point seconds. Use ualarm() for fractional durations less than 1.0 seconds, and fall back to alarm() for durations of 1.0 second or more. Assisted-by: Antigravity:gemini-3.1-pro Signed-off-by: Ian Rogers <irogers@google.com> Signed-off-by: Namhyung Kim <namhyung@kernel.org>
46 lines
802 B
C
46 lines
802 B
C
/* SPDX-License-Identifier: GPL-2.0 */
|
|
#include <pthread.h>
|
|
#include <stdlib.h>
|
|
#include <signal.h>
|
|
#include <unistd.h>
|
|
#include <linux/compiler.h>
|
|
#include "../tests.h"
|
|
|
|
static volatile sig_atomic_t done;
|
|
|
|
static void sighandler(int sig __maybe_unused)
|
|
{
|
|
done = 1;
|
|
}
|
|
|
|
static int noploop(int argc, const char **argv)
|
|
{
|
|
double sec = 1.0;
|
|
|
|
pthread_setname_np(pthread_self(), "perf-noploop");
|
|
if (argc > 0)
|
|
sec = atof(argv[0]);
|
|
|
|
if (!(sec > 0.0)) {
|
|
fprintf(stderr, "Error: seconds (%f) must be > 0\n", sec);
|
|
return 1;
|
|
}
|
|
|
|
signal(SIGINT, sighandler);
|
|
signal(SIGALRM, sighandler);
|
|
|
|
if (sec < 1.0) {
|
|
useconds_t usecs = (useconds_t)(sec * 1000000.0);
|
|
|
|
ualarm(usecs > 0 ? usecs : 1, 0);
|
|
} else
|
|
alarm((unsigned int)sec);
|
|
|
|
while (!done)
|
|
continue;
|
|
|
|
return 0;
|
|
}
|
|
|
|
DEFINE_WORKLOAD(noploop);
|