diff --git a/.gitignore b/.gitignore index 06179b1..cda655d 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1 @@ -SOURCES/rt-tests-1.3.tar.gz +SOURCES/rt-tests-1.5.tar.xz diff --git a/.rt-tests.metadata b/.rt-tests.metadata index ca835b7..76fa2df 100644 --- a/.rt-tests.metadata +++ b/.rt-tests.metadata @@ -1 +1 @@ -0df302aeb536bbc4fc64922815bbd2426efb3184 SOURCES/rt-tests-1.3.tar.gz +13ef79a90a810103e8a0fa5da92544b5d31c3838 SOURCES/rt-tests-1.5.tar.xz diff --git a/SOURCES/Add-queuelat-manpage.patch b/SOURCES/Add-queuelat-manpage.patch deleted file mode 100644 index bae08c5..0000000 --- a/SOURCES/Add-queuelat-manpage.patch +++ /dev/null @@ -1,83 +0,0 @@ -From f234e04e76e24d497754876f5e7c896dc9693f3e Mon Sep 17 00:00:00 2001 -From: Marcelo Tosatti -Date: Tue, 4 Sep 2018 08:56:35 -0300 -Subject: [PATCH 2/2] Add queuelat manpage - -Add a man page for queuelat, with a short introduction -and description for each option. - -Signed-off-by: Marcelo Tosatti -Signed-off-by: John Kacur ---- - src/queuelat/queuelat.8 | 59 +++++++++++++++++++++++++++++++++++++++++++++++++ - 1 file changed, 59 insertions(+) - create mode 100644 src/queuelat/queuelat.8 - -diff --git a/src/queuelat/queuelat.8 b/src/queuelat/queuelat.8 -new file mode 100644 -index 000000000000..d68beb98bff7 ---- /dev/null -+++ b/src/queuelat/queuelat.8 -@@ -0,0 +1,59 @@ -+.\" Hey, EMACS: -*- nroff -*- -+.TH QUEUELAT 8 "Sept 3, 2018" -+.\" Please adjust this date whenever revising the manpage. -+.\" -+.\" Some roff macros, for reference: -+.\" .nh disable hyphenation -+.\" .hy enable hyphenation -+.\" .ad l left justify -+.\" .ad b justify to both left and right margins -+.\" .nf disable filling -+.\" .fi enable filling -+.\" .br insert line break -+.\" .sp insert n+1 empty lines -+.\" for manpage-specific macros, see man(7) -+.SH NAME -+queuelat \- Queue latency test program -+.SH SYNOPSIS -+.B queuelat -+.RI "[\-h] [\-m " max-queue-len "] [\-c " cycles-per-packet "] [\-p " mpps "] [\-f " tsc-freq "] [\-t " timeout "] \ -+ -+.SH DESCRIPTION -+queuelat simulates a network queue checking for latency -+violations in packet processing. -+ -+.SH OPTIONS -+A summary of options is included below. -+.TP -+.B \-h -+Show help -+.br -+.TP -+.B \-m max-queue-len -+Maximum allowed latency, in nanoseconds. If latency to process -+.br -+any packet exceeds this value, the program quits, -+writing -+.br -+a message to the trace buffer. -+.TP -+.B \-c cycles-per-packet -+Estimated number of cycles it takes to process one packet. -+.br -+This value should come from the envisioned packet -+.br -+forwarding application being simulated. -+.TP -+.B \-p mpps -+Million packets per second that arrive for processing. -+.TP -+.B \-f tsc-freq-mhz -+TSC frequency in MHz. -+.TP -+.B \-t timeout -+Timeout in seconds to quit the program. -+ -+ -+.SH AUTHOR -+queuelat was written by Marcelo Tosatti -+.br --- -2.14.4 - diff --git a/SOURCES/Add-ssdd-test-to-the-rt-tests-suite.patch b/SOURCES/Add-ssdd-test-to-the-rt-tests-suite.patch deleted file mode 100644 index ea69217..0000000 --- a/SOURCES/Add-ssdd-test-to-the-rt-tests-suite.patch +++ /dev/null @@ -1,373 +0,0 @@ -From 88b17cb724c653391a92be00b48378432a1036a5 Mon Sep 17 00:00:00 2001 -From: Joe Korty -Date: Mon, 14 Jan 2019 17:29:26 +0100 -Subject: [PATCH 1/5] Add ssdd test to the rt-tests suite - -The following program might make a good addition to the rt -test suite. It tests the reliability of PTRACE_SINGLESTEP. -It does by default 10,000 ssteps against a simple, -spinner tracee. Also by default, it spins off ten of these -tracer/tracee pairs, all of which are to run concurrently. - -Starting with 4.13-rt, this test occasionally encounters a -sstep whose waitpid returns a WIFSIGNALED (signal SIGTRAP) -rather than a WIFSTOPPED. This usually happens after -thousands of ssteps have executed. Having multiple -tracer/tracee pairs running dramatically increases the -chances of failure. - -The is what the test output looks like for a good run: - -forktest#0/22872: STARTING -forktest#7/22879: STARTING -forktest#8/22880: STARTING -forktest#6/22878: STARTING -forktest#5/22877: STARTING -forktest#3/22875: STARTING -forktest#4/22876: STARTING -forktest#9/22882: STARTING -forktest#2/22874: STARTING -forktest#1/22873: STARTING -forktest#0/22872: EXITING, no error -forktest#8/22880: EXITING, no error -forktest#3/22875: EXITING, no error -forktest#7/22879: EXITING, no error -forktest#6/22878: EXITING, no error -forktest#5/22877: EXITING, no error -forktest#2/22874: EXITING, no error -forktest#4/22876: EXITING, no error -forktest#9/22882: EXITING, no error -forktest#1/22873: EXITING, no error -All tests PASSED. - -Signed-off-by: Joe Korty -Signed-off-by: John Kacur ---- - src/ssdd/ssdd.c | 315 ++++++++++++++++++++++++++++++++++++++++++++++++ - 1 file changed, 315 insertions(+) - create mode 100644 src/ssdd/ssdd.c - -diff --git a/src/ssdd/ssdd.c b/src/ssdd/ssdd.c -new file mode 100644 -index 000000000000..6d09d54e34e1 ---- /dev/null -+++ b/src/ssdd/ssdd.c -@@ -0,0 +1,315 @@ -+/* -+ * Have a tracer do a bunch of PTRACE_SINGLESTEPs against -+ * a tracee as fast as possible. Create several of these -+ * tracer/tracee pairs and see if they can be made to -+ * interfere with each other. -+ * -+ * Usage: -+ * ssdd nforks niters -+ * Where: -+ * nforks - number of tracer/tracee pairs to fork off. -+ * default 10. -+ * niters - number of PTRACE_SINGLESTEP iterations to -+ * do before declaring success, for each tracer/ -+ * tracee pair set up. Default 10,000. -+ * -+ * The tracer waits on each PTRACE_SINGLESTEP with a waitpid(2) -+ * and checks that waitpid's return values for correctness. -+ */ -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+ -+#include -+#include -+#include -+ -+/* do_wait return values */ -+#define STATE_EXITED 1 -+#define STATE_STOPPED 2 -+#define STATE_SIGNALED 3 -+#define STATE_UNKNOWN 4 -+#define STATE_ECHILD 5 -+#define STATE_EXITED_TSIG 6 /* exited with termination signal */ -+#define STATE_EXITED_ERRSTAT 7 /* exited with non-zero status */ -+ -+char *state_name[] = { -+ [STATE_EXITED] = "STATE_EXITED", -+ [STATE_STOPPED] = "STATE_STOPPED", -+ [STATE_SIGNALED] = "STATE_SIGNALED", -+ [STATE_UNKNOWN] = "STATE_UNKNOWN", -+ [STATE_ECHILD] = "STATE_ECHILD", -+ [STATE_EXITED_TSIG] = "STATE_EXITED_TSIG", -+ [STATE_EXITED_ERRSTAT] = "STATE_EXITED_ERRSTAT" -+}; -+ -+const char *get_state_name(int state) -+{ -+ if (state < STATE_EXITED || state > STATE_EXITED_ERRSTAT) -+ return "?"; -+ return state_name[state]; -+} -+ -+#define unused __attribute__((unused)) -+ -+static int got_sigchld; -+ -+static int do_wait(pid_t *wait_pid, int *ret_sig) -+{ -+ int status, child_status; -+ -+ *ret_sig = -1; /* initially mark 'nothing returned' */ -+ -+ while (1) { -+ status = waitpid(-1, &child_status, WUNTRACED | __WALL); -+ if (status == -1) { -+ if (errno == EINTR) -+ continue; -+ if (errno == ECHILD) { -+ *wait_pid = (pid_t)0; -+ return STATE_ECHILD; -+ } -+ printf("do_wait/%d: EXITING, ERROR: " -+ "waitpid() returned errno %d\n", -+ getpid(), errno); -+ exit(1); -+ } -+ break; -+ } -+ *wait_pid = (pid_t)status; -+ -+ if (WIFEXITED(child_status)) { -+ if (WIFSIGNALED(child_status)) -+ return STATE_EXITED_TSIG; -+ if (WEXITSTATUS(child_status)) -+ return STATE_EXITED_ERRSTAT; -+ return STATE_EXITED; -+ } -+ if (WIFSTOPPED(child_status)) { -+ *ret_sig = WSTOPSIG(child_status); -+ return STATE_STOPPED; -+ } -+ if (WIFSIGNALED(child_status)) { -+ *ret_sig = WTERMSIG(child_status); -+ return STATE_SIGNALED; -+ } -+ return STATE_UNKNOWN; -+} -+ -+int check_sigchld(void) -+{ -+ int i; -+ /* -+ * The signal is asynchronous so give it some -+ * time to arrive. -+ */ -+ for (i = 0; i < 10 && !got_sigchld; i++) -+ usleep(1000); /* 10 msecs */ -+ for (i = 0; i < 10 && !got_sigchld; i++) -+ usleep(2000); /* 20 + 10 = 30 msecs */ -+ for (i = 0; i < 10 && !got_sigchld; i++) -+ usleep(4000); /* 40 + 30 = 70 msecs */ -+ for (i = 0; i < 10 && !got_sigchld; i++) -+ usleep(8000); /* 80 + 70 = 150 msecs */ -+ for (i = 0; i < 10 && !got_sigchld; i++) -+ usleep(16000); /* 160 + 150 = 310 msecs */ -+ -+ return got_sigchld; -+} -+ -+pid_t parent; -+int nforks = 10; -+int nsteps = 10000; -+ -+static void sigchld(int sig, unused siginfo_t * info, unused void *arg) -+{ -+ got_sigchld = 1; -+} -+ -+static void child_process(void) -+{ -+ unused volatile int i; -+ -+ /* wait for ptrace attach */ -+ usleep(100000); -+ while (1) -+ i = 0; -+} -+ -+static int forktests(int testid) -+{ -+ int i, status, ret_sig; -+ long pstatus; -+ pid_t child, wait_pid; -+ struct sigaction act, oact; -+ -+ parent = getpid(); -+ printf("forktest#%d/%d: STARTING\n", testid, parent); -+ -+ child = fork(); -+ if (child == -1) { -+ printf("forktest#%d/%d: EXITING, ERROR: " -+ "fork returned errno %d\n", testid, parent, errno); -+ exit(1); -+ } -+ if (!child) -+ child_process(); -+ -+ act.sa_sigaction = sigchld; -+ sigemptyset(&act.sa_mask); -+ act.sa_flags = SA_SIGINFO; -+ status = sigaction(SIGCHLD, &act, &oact); -+ if (status) { -+ printf("forktest#%d/%d: EXITING, ERROR: " -+ "sigaction returned %d, errno %d\n", -+ testid, parent, status, errno); -+ exit(1); -+ } -+ -+ /* give both our child and parent time to set things up */ -+ usleep(125000); -+ -+ /* -+ * Attach to the child. -+ */ -+ pstatus = ptrace(PTRACE_ATTACH, child, NULL, NULL); -+ if (pstatus == ~0l) { -+ printf("forktest#%d/%d: EXITING, ERROR: " -+ "attach failed. errno %d\n", -+ testid, getpid(), errno); -+ exit(1); -+ } -+ -+ /* -+ * The attach should cause the child to receive a signal. -+ */ -+ status = do_wait(&wait_pid, &ret_sig); -+ if (wait_pid != child) { -+ printf("forktest#%d/%d: EXITING, ERROR: " -+ "attach: Unexpected wait pid %d\n", -+ testid, getpid(), wait_pid); -+ exit(1); -+ } -+ if (status != STATE_STOPPED) { -+ printf("forktest#%d/%d: EXITING, ERROR: " -+ "attach: wait on PTRACE_ATTACH returned %d " -+ "[%s, wanted STATE_STOPPED], signo %d\n", -+ testid, getpid(), status, get_state_name(status), -+ ret_sig); -+ exit(1); -+ } -+ else if (!check_sigchld()) { -+ printf("forktest#%d/%d: EXITING, ERROR: " -+ "wait on PTRACE_ATTACH saw a SIGCHLD count of %d, should be 1\n", -+ testid, getpid(), got_sigchld); -+ exit(1); -+ } -+ got_sigchld = 0; -+ -+ -+ /* -+ * Generate 'nsteps' PTRACE_SINGLESTEPs, make sure they all actually -+ * step the tracee. -+ */ -+ for (i = 0; i < nsteps; i++) { -+ pstatus = ptrace(PTRACE_SINGLESTEP, child, NULL, NULL); -+ -+ if (pstatus) { -+ printf("forktest#%d/%d: EXITING, ERROR: " -+ "PTRACE_SINGLESTEP #%d: returned status %ld, " -+ "errno %d, signo %d\n", -+ testid, getpid(), i, pstatus, errno, ret_sig); -+ exit(1); -+ } -+ -+ status = do_wait(&wait_pid, &ret_sig); -+ if (wait_pid != child) { -+ printf("forktest#%d/%d: EXITING, ERROR: " -+ "wait on PTRACE_SINGLESTEP #%d: returned wrong pid %d, " -+ "expected %d\n", -+ testid, getpid(), i, wait_pid, child); -+ exit(1); -+ } -+ if (status != STATE_STOPPED) { -+ printf("forktest#%d/%d: EXITING, ERROR: " -+ "wait on PTRACE_SINGLESTEP #%d: wanted STATE_STOPPED, " -+ "saw %s instead (and saw signo %d too)\n", -+ testid, getpid(), i, -+ get_state_name(status), ret_sig); -+ exit(1); -+ } -+ if (ret_sig != SIGTRAP) { -+ printf("forktest#%d/%d: EXITING, ERROR: " -+ "wait on PTRACE_SINGLESTEP #%d: returned signal %d, " -+ "wanted SIGTRAP\n", -+ testid, getpid(), i, ret_sig); -+ exit(1); -+ } -+ if (!check_sigchld()) { -+ printf("forktest#%d/%d: EXITING, ERROR: " -+ "wait on PTRACE_SINGLESTEP #%d: no SIGCHLD seen " -+ "(signal count == 0), signo %d\n", -+ testid, getpid(), i, ret_sig); -+ exit(1); -+ } -+ got_sigchld = 0; -+ } -+ -+ /* There is no need for the tracer to kill the tracee. It will -+ * automatically exit when its owner, ie, us, exits. -+ */ -+ -+ printf("forktest#%d/%d: EXITING, no error\n", testid, parent); -+ exit(0); -+} -+ -+int main(int argc, char **argv) -+{ -+ int i, ret_sig, status; -+ pid_t child = 0, wait_pid; -+ int error = 0; -+ -+ setbuf(stdout, NULL); -+ -+ argc--, argv++; -+ if (argc) { -+ nforks = atoi(*argv); -+ argc--, argv++; -+ if (argc) -+ nsteps = atoi(*argv); -+ } -+ printf("#forks: %d\n", nforks); -+ printf("#steps: %d\n", nsteps); -+ printf("\n"); -+ -+ for (i = 0; i < nforks; i++) { -+ child = fork(); -+ if (child == -1) { -+ printf("main: fork returned errno %d\n", errno); -+ exit(1); -+ } -+ if (!child) -+ forktests(i); -+ } -+ -+ for (i = 0; i < nforks; i++) { -+ status = do_wait(&wait_pid, &ret_sig); -+ if (status != STATE_EXITED) { -+ if (0) printf("main/%d: ERROR: " -+ "forktest#%d unexpected do_wait status %d " -+ "[%s, wanted STATE_EXITED]\n", -+ getpid(), wait_pid, status, -+ get_state_name(status)); -+ error = 1; -+ } -+ } -+ -+ printf("%s.\n", error ? -+ "One or more tests FAILED" : -+ "All tests PASSED"); -+ exit(error); -+} --- -2.20.1 - diff --git a/SOURCES/Remove-numa-option.patch b/SOURCES/Remove-numa-option.patch deleted file mode 100644 index 23e4d80..0000000 --- a/SOURCES/Remove-numa-option.patch +++ /dev/null @@ -1,93 +0,0 @@ -From be3ef7f9d228c3753ba805a9d25ee4dd26171d67 Mon Sep 17 00:00:00 2001 -From: John Kacur -Date: Tue, 19 Jun 2018 01:38:48 +0200 -Subject: [PATCH] Remove --numa option - -Signed-off-by: John Kacur ---- - src/cyclictest/cyclictest.c | 30 ++++++++++++++---------------- - src/cyclictest/rt_numa.h | 6 ------ - 2 files changed, 14 insertions(+), 22 deletions(-) - -diff --git a/src/cyclictest/cyclictest.c b/src/cyclictest/cyclictest.c -index 1dce8fc2bb64..484ea7fa3130 100644 ---- a/src/cyclictest/cyclictest.c -+++ b/src/cyclictest/cyclictest.c -@@ -1207,7 +1207,6 @@ static void process_options (int argc, char *argv[], int max_cpus) - {"spike-nodes", required_argument, NULL, OPT_TRIGGER_NODES }, - {"threads", optional_argument, NULL, OPT_THREADS }, - {"unbuffered", no_argument, NULL, OPT_UNBUFFERED }, -- {"numa", no_argument, NULL, OPT_NUMA }, - {"verbose", no_argument, NULL, OPT_VERBOSE }, - {"dbg_cyclictest", no_argument, NULL, OPT_DBGCYCLIC }, - {"policy", required_argument, NULL, OPT_POLICY }, -@@ -1215,7 +1214,7 @@ static void process_options (int argc, char *argv[], int max_cpus) - {"posix_timers", no_argument, NULL, OPT_POSIX_TIMERS }, - {NULL, 0, NULL, 0 }, - }; -- int c = getopt_long(argc, argv, "a::A::b:c:d:D:h:H:i:l:MNo:p:mqrRsSt::uUvD:x", -+ int c = getopt_long(argc, argv, "a::A::b:c:d:D:h:H:i:l:MNo:p:mqrRsSt::uvD:x", - long_options, &option_index); - if (c == -1) - break; -@@ -1350,20 +1349,6 @@ static void process_options (int argc, char *argv[], int max_cpus) - case 'u': - case OPT_UNBUFFERED: - setvbuf(stdout, NULL, _IONBF, 0); break; -- case 'U': -- case OPT_NUMA: /* NUMA testing */ -- numa = 1; /* Turn numa on */ -- if (smp) -- fatal("numa and smp options are mutually exclusive\n"); -- numa_on_and_available(); --#ifdef NUMA -- num_threads = max_cpus; -- setaffinity = AFFINITY_USEALL; --#else -- warn("cyclictest was not built with the numa option\n"); -- warn("ignoring --numa or -U\n"); --#endif -- break; - case 'v': - case OPT_VERBOSE: verbose = 1; break; - case 'x': -@@ -1399,6 +1384,19 @@ static void process_options (int argc, char *argv[], int max_cpus) - } - } - -+ if (!smp) { /* if smp wasn't requested, test for numa automatically */ -+#ifdef NUMA -+ if (numa_available() != -1) { -+ numa = 1; -+ num_threads = max_cpus; -+ setaffinity = AFFINITY_USEALL; -+#else -+ warn("cyclictest was not built with the numa option\n"); -+ numa = 0; -+#endif -+ } -+ } -+ - if (option_affinity) { - if (smp) { - warn("-a ignored due to --smp\n"); -diff --git a/src/cyclictest/rt_numa.h b/src/cyclictest/rt_numa.h -index ec2994314e80..3970e681fe7b 100644 ---- a/src/cyclictest/rt_numa.h -+++ b/src/cyclictest/rt_numa.h -@@ -192,12 +192,6 @@ static inline void rt_bitmask_free(struct bitmask *mask) - - #endif /* LIBNUMA_API_VERSION */ - --static void numa_on_and_available() --{ -- if (numa && (numa_available() == -1)) -- fatal("--numa specified and numa functions not available.\n"); --} -- - #else /* ! NUMA */ - - struct bitmask { --- -2.14.4 - diff --git a/SOURCES/add-h-option-to-queuelat.patch b/SOURCES/add-h-option-to-queuelat.patch deleted file mode 100644 index 2aaaa20..0000000 --- a/SOURCES/add-h-option-to-queuelat.patch +++ /dev/null @@ -1,72 +0,0 @@ -From 05a1ceb9b490b2cb0aff2f10c4753849df05dec0 Mon Sep 17 00:00:00 2001 -From: Marcelo Tosatti -Date: Tue, 4 Sep 2018 08:56:34 -0300 -Subject: [PATCH 1/2] add -h option to queuelat - -Add -h (help) option to queuelat, which lists all -options. - -Signed-off-by: Marcelo Tosatti -Signed-off-by: John Kacur ---- - src/queuelat/README | 1 + - src/queuelat/queuelat.c | 17 ++++++++++++++++- - 2 files changed, 17 insertions(+), 1 deletion(-) - -diff --git a/src/queuelat/README b/src/queuelat/README -index 790de3e13c17..4ffdb3753bbd 100644 ---- a/src/queuelat/README -+++ b/src/queuelat/README -@@ -51,6 +51,7 @@ cycles_per_packet: number of cycles to process one packet (int). - mpps(million-packet-per-sec): million packets per second (float). - tsc_freq_mhz: TSC frequency in MHz, as measured by TSC PIT calibration - (search for "Detected XXX MHz processor" in dmesg, and use the integer part). -+timeout: timeout (in seconds). - - How it works - ============ -diff --git a/src/queuelat/queuelat.c b/src/queuelat/queuelat.c -index 8bfed274ccab..2230d04bf391 100644 ---- a/src/queuelat/queuelat.c -+++ b/src/queuelat/queuelat.c -@@ -532,6 +532,18 @@ int calculate_nr_packets_drain_per_block(void) - return nr_packets_drain_per_block; - } - -+ -+void print_help(void) -+{ -+ printf("usage: queuelat [options]\n"); -+ printf("-h show this help menu\n"); -+ printf("-m max-queue-len (maximum latency allowed, in nanoseconds) (int)\n"); -+ printf("-c cycles-per-packet (number of cycles to process one packet (int)\n"); -+ printf("-p million-packet-per-sec (million packets per second) (float)\n"); -+ printf("-f tsc-freq-mhz (TSC frequency in MHz) (float)\n"); -+ printf("-t timeout (timeout, in seconds) (int)\n"); -+} -+ - int main(int argc, char **argv) - { - double tsc_freq_mhz; -@@ -549,7 +561,7 @@ int main(int argc, char **argv) - - opterr = 0; - -- while ((c = getopt (argc, argv, "m:c:p:f:t:q:")) != -1) -+ while ((c = getopt (argc, argv, "m:c:p:f:t:q:h")) != -1) - switch (c) - { - case 'm': -@@ -570,6 +582,9 @@ int main(int argc, char **argv) - case 'q': - qvalue = optarg; - break; -+ case 'h': -+ print_help(); -+ return 0; - case '?': - if (optopt == 'm' || optopt == 'c' || optopt == 'p' || - optopt == 'f' || optopt == 't' || optopt == 'q') --- -2.14.4 - diff --git a/SOURCES/cyclictest-Fix-compiler-warning-about-srncpy-output.patch b/SOURCES/cyclictest-Fix-compiler-warning-about-srncpy-output.patch deleted file mode 100644 index c6d3a2a..0000000 --- a/SOURCES/cyclictest-Fix-compiler-warning-about-srncpy-output.patch +++ /dev/null @@ -1,41 +0,0 @@ -From 2b126beda6e76f89fb95c14bc421bc13a376cf2e Mon Sep 17 00:00:00 2001 -From: Clark Williams -Date: Tue, 19 Feb 2019 16:10:38 +0100 -Subject: [PATCH] cyclictest: Fix compiler warning about srncpy output - truncated - -Fix compiler warning about strncpy output truncated before terminating -nul copying as many bytes from a string as its length - -Signed-off-by: Clark Williams -Signed-off-by: John Kacur -Extracted from a patch from Clark ---- - src/cyclictest/cyclictest.c | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - -diff --git a/src/cyclictest/cyclictest.c b/src/cyclictest/cyclictest.c -index 68b3836405c1..1bd63fd93dce 100644 ---- a/src/cyclictest/cyclictest.c -+++ b/src/cyclictest/cyclictest.c -@@ -1257,7 +1257,7 @@ static void process_options (int argc, char *argv[], int max_cpus) - case 'F': - case OPT_FIFO: - use_fifo = 1; -- strncpy(fifopath, optarg, strlen(optarg)); -+ strncpy(fifopath, optarg, strnlen(optarg, MAX_PATH-1)); - break; - case 'H': - case OPT_HISTOFALL: -@@ -1267,7 +1267,7 @@ static void process_options (int argc, char *argv[], int max_cpus) - histogram = atoi(optarg); break; - case OPT_HISTFILE: - use_histfile = 1; -- strncpy(histfile, optarg, strlen(optarg)); -+ strncpy(histfile, optarg, strnlen(optarg, MAX_PATH-1)); - break; - case 'i': - case OPT_INTERVAL: --- -2.20.1 - diff --git a/SOURCES/cyclictest-Make-sure-affinity-is-respected-when-numa.patch b/SOURCES/cyclictest-Make-sure-affinity-is-respected-when-numa.patch deleted file mode 100644 index 508a4bc..0000000 --- a/SOURCES/cyclictest-Make-sure-affinity-is-respected-when-numa.patch +++ /dev/null @@ -1,56 +0,0 @@ -From 966b4eeda61b4c623a5ef423236dc710b31c1532 Mon Sep 17 00:00:00 2001 -From: John Kacur -Date: Wed, 20 Feb 2019 23:16:34 +0100 -Subject: [PATCH] cyclictest: Make sure affinity is respected when numa is - detected - -Make sure affinity is respected when numa is automatically detected and -when smp is not specified. Don't break the way smp currently works. - -Signed-off-by: John Kacur ---- - src/cyclictest/cyclictest.c | 13 ++++++------- - 1 file changed, 6 insertions(+), 7 deletions(-) - -diff --git a/src/cyclictest/cyclictest.c b/src/cyclictest/cyclictest.c -index 1bd63fd93dce..ed59edefbf97 100644 ---- a/src/cyclictest/cyclictest.c -+++ b/src/cyclictest/cyclictest.c -@@ -1218,7 +1218,7 @@ static void process_options (int argc, char *argv[], int max_cpus) - case 'a': - case OPT_AFFINITY: - option_affinity = 1; -- if (smp || numa) -+ if (smp) - break; - if (optarg != NULL) { - parse_cpumask(optarg, max_cpus); -@@ -1384,8 +1384,10 @@ static void process_options (int argc, char *argv[], int max_cpus) - #ifdef NUMA - if (numa_available() != -1) { - numa = 1; -- num_threads = max_cpus; -- setaffinity = AFFINITY_USEALL; -+ if (setaffinity == AFFINITY_UNSPECIFIED) { -+ num_threads = max_cpus; -+ setaffinity = AFFINITY_USEALL; -+ } - } - #else - warn("cyclictest was not built with the numa option\n"); -@@ -1394,11 +1396,8 @@ static void process_options (int argc, char *argv[], int max_cpus) - } - - if (option_affinity) { -- if (smp) { -+ if (smp) - warn("-a ignored due to smp mode\n"); -- } else if (numa) { -- warn("-a ignored due to numa mode\n"); -- } - } - - if (smi) { --- -2.20.1 - diff --git a/SOURCES/cyclictest-Sync-manpage-with-the-help-option.patch b/SOURCES/cyclictest-Sync-manpage-with-the-help-option.patch new file mode 100644 index 0000000..bc61d75 --- /dev/null +++ b/SOURCES/cyclictest-Sync-manpage-with-the-help-option.patch @@ -0,0 +1,50 @@ +From 86936690f508b4d3241bff2f6dc8f40088b19e3f Mon Sep 17 00:00:00 2001 +From: John Kacur +Date: Fri, 22 Nov 2019 14:51:54 +0100 +Subject: [PATCH] cyclictest: Sync manpage with the help option + +Sync the manpage with the help option, as the manpage has not kept-up +with changes to help + +Signed-off-by: John Kacur +--- + src/cyclictest/cyclictest.8 | 9 ++++++--- + 1 file changed, 6 insertions(+), 3 deletions(-) + +diff --git a/src/cyclictest/cyclictest.8 b/src/cyclictest/cyclictest.8 +index b64a16ae8bbb..00e2d2403996 100644 +--- a/src/cyclictest/cyclictest.8 ++++ b/src/cyclictest/cyclictest.8 +@@ -67,6 +67,9 @@ Specify a length for the test run. + .br + Append 'm', 'h', or 'd' to specify minutes, hours or days. + .TP ++.B \-\-latency=PM_Q0S ++write PM_Q0S to /dev/cpu_dma_latency ++.TP + .B \-F, \-\-fifo= + Create a named pipe at path and write stats to it + .TP +@@ -95,9 +98,6 @@ Lock current and future memory allocations to prevent being paged out + Delay updating the screen until a new max latency is hit. (useful for + running cyclictest on low-bandwidth connections) + .TP +-.B \-n, \-\-nanosleep +-Use clock_nanosleep instead of posix interval timers. Setting this option runs the tests with clock_nanosleep instead of posix interval timers. +-.TP + .B \-N, \-\-nsecs + Show results in nanoseconds instead of microseconds, which is the default unit. + .TP +@@ -165,6 +165,9 @@ where n=task number c=count v=latency value in us. + .TP + .B \-\-dbg_cyclictest + Print info userful for debugging cyclictest ++.TP ++.B \-x, \-\-posix_timers ++Use POSIX timers instead of clock_nanosleep. + + .SH SEE ALSO + .BR numa (3), +-- +2.20.1 + diff --git a/SOURCES/cyclictest-fix_with_expected_identifier_in_latest.patch b/SOURCES/cyclictest-fix_with_expected_identifier_in_latest.patch deleted file mode 100644 index fb6257c..0000000 --- a/SOURCES/cyclictest-fix_with_expected_identifier_in_latest.patch +++ /dev/null @@ -1,44 +0,0 @@ -From e1fa2cda6a6cc2e5eb916638e0325b3d334adbe4 Mon Sep 17 00:00:00 2001 -From: Li Xiaoming -Date: Thu, 10 Jan 2019 10:21:59 +0800 -Subject: [PATCH] cyclictest: fix_with_expected_identifier_in_latest - -An error occurred during the build process: -src/cyclictest/cyclictest.c:1396:2: error: expected identifier or '(' before 'if' - if (option_affinity) { - -The expected identifier "}" for "if (option_affinity){" occurs in another place. - -Signed-off-by: Li Xiaoming -Signed-off-by: Zhong Lu - -- Fixed the indentation of the bracket -- Fixed the indentation of the block where NUMA is not defined - -Signed-off-by: John Kacur ---- - src/cyclictest/cyclictest.c | 6 +++--- - 1 file changed, 3 insertions(+), 3 deletions(-) - -diff --git a/src/cyclictest/cyclictest.c b/src/cyclictest/cyclictest.c -index 188a202c5171..68b3836405c1 100644 ---- a/src/cyclictest/cyclictest.c -+++ b/src/cyclictest/cyclictest.c -@@ -1386,11 +1386,11 @@ static void process_options (int argc, char *argv[], int max_cpus) - numa = 1; - num_threads = max_cpus; - setaffinity = AFFINITY_USEALL; -+ } - #else -- warn("cyclictest was not built with the numa option\n"); -- numa = 0; -+ warn("cyclictest was not built with the numa option\n"); -+ numa = 0; - #endif -- } - } - - if (option_affinity) { --- -2.20.1 - diff --git a/SOURCES/cyclictest-remove-ftrace-code.patch b/SOURCES/cyclictest-remove-ftrace-code.patch deleted file mode 100644 index 30a323f..0000000 --- a/SOURCES/cyclictest-remove-ftrace-code.patch +++ /dev/null @@ -1,881 +0,0 @@ -From f5ccfbe4d6641e48f56152be135d901dd31cba7e Mon Sep 17 00:00:00 2001 -From: Clark Williams -Date: Tue, 16 Jan 2018 15:37:17 -0600 -Subject: [PATCH 1/3] cyclictest: remove ftrace code - -Remove all the code that manipulates tracing values with the exception -of the breaktrace logic. Cyclictest now presumes that any tracing -will be done by the trace-cmd command and will only *stop* tracing -if the breaktrace value is hit. - -Signed-off-by: Clark Williams -(cherry picked from commit 26838f86d54e3ff74223165cbbcc2d211becdaf2) -Signed-off-by: John Kacur ---- - src/cyclictest/cyclictest.c | 537 +++----------------------------------------- - 1 file changed, 32 insertions(+), 505 deletions(-) - -diff --git a/src/cyclictest/cyclictest.c b/src/cyclictest/cyclictest.c -index 8d9ec80fc239..1dce8fc2bb64 100644 ---- a/src/cyclictest/cyclictest.c -+++ b/src/cyclictest/cyclictest.c -@@ -118,23 +118,8 @@ extern int clock_nanosleep(clockid_t __clock_id, int __flags, - #define MSR_SMI_COUNT 0x00000034 - #define MSR_SMI_COUNT_MASK 0xFFFFFFFF - --int enable_events; -- - static char *policyname(int policy); - --enum { -- NOTRACE, -- CTXTSWITCH, -- IRQSOFF, -- PREEMPTOFF, -- PREEMPTIRQSOFF, -- WAKEUP, -- WAKEUPRT, -- LATENCY, -- FUNCTION, -- CUSTOM, --}; -- - /* Struct to transfer parameters to the thread */ - struct thread_param { - int prio; -@@ -201,14 +186,9 @@ static void trigger_update(struct thread_param *par, int diff, int64_t ts); - - static int shutdown; - static int tracelimit = 0; --static int notrace = 0; --static int trace_marker = 0; --static int ftrace = 0; --static int kernelversion; - static int verbose = 0; - static int oscope_reduction = 1; - static int lockall = 0; --static int tracetype = NOTRACE; - static int histogram = 0; - static int histofall = 0; - static int duration = 0; -@@ -243,20 +223,10 @@ static pthread_barrier_t align_barr; - static pthread_barrier_t globalt_barr; - static struct timespec globalt; - --/* Backup of kernel variables that we modify */ --static struct kvars { -- char name[KVARNAMELEN]; -- char value[KVALUELEN]; --} kv[KVARS]; -- - static char *procfileprefix = "/proc/sys/kernel/"; - static char *fileprefix; --static char tracer[MAX_PATH]; - static char fifopath[MAX_PATH]; - static char histfile[MAX_PATH]; --static char **traceptr; --static int traceopt_count; --static int traceopt_size; - - static struct thread_param **parameters; - static struct thread_stat **statistics; -@@ -311,101 +281,14 @@ static void set_latency_target(void) - } - - --enum kernelversion { -- KV_NOT_SUPPORTED, -- KV_26_LT18, -- KV_26_LT24, -- KV_26_33, -- KV_30 --}; -- - enum { - ERROR_GENERAL = -1, - ERROR_NOTFOUND = -2, - }; - --static char functiontracer[MAX_PATH]; --static char traceroptions[MAX_PATH]; -- - static int trace_fd = -1; - static int tracemark_fd = -1; - --static int kernvar(int mode, const char *name, char *value, size_t sizeofvalue) --{ -- char filename[128]; -- int retval = 1; -- int path; -- size_t len_prefix = strlen(fileprefix), len_name = strlen(name); -- -- if (len_prefix + len_name + 1 > sizeof(filename)) { -- errno = ENOMEM; -- return 1; -- } -- -- memcpy(filename, fileprefix, len_prefix); -- memcpy(filename + len_prefix, name, len_name + 1); -- -- path = open(filename, mode); -- if (path >= 0) { -- if (mode == O_RDONLY) { -- int got; -- if ((got = read(path, value, sizeofvalue)) > 0) { -- retval = 0; -- value[got-1] = '\0'; -- } -- } else if (mode == O_WRONLY) { -- if (write(path, value, sizeofvalue) == sizeofvalue) -- retval = 0; -- } -- close(path); -- } -- return retval; --} -- --static void setkernvar(const char *name, char *value) --{ -- int i; -- char oldvalue[KVALUELEN]; -- -- if (kernelversion < KV_26_33) { -- if (kernvar(O_RDONLY, name, oldvalue, sizeof(oldvalue))) -- fprintf(stderr, "could not retrieve %s\n", name); -- else { -- for (i = 0; i < KVARS; i++) { -- if (!strcmp(kv[i].name, name)) -- break; -- if (kv[i].name[0] == '\0') { -- strncpy(kv[i].name, name, -- sizeof(kv[i].name)); -- strncpy(kv[i].value, oldvalue, -- sizeof(kv[i].value)); -- break; -- } -- } -- if (i == KVARS) -- fprintf(stderr, "could not backup %s (%s)\n", -- name, oldvalue); -- } -- } -- if (kernvar(O_WRONLY, name, value, strlen(value))) -- fprintf(stderr, "could not set %s to %s\n", name, value); -- --} -- --static void restorekernvars(void) --{ -- int i; -- -- for (i = 0; i < KVARS; i++) { -- if (kv[i].name[0] != '\0') { -- if (kernvar(O_WRONLY, kv[i].name, kv[i].value, -- strlen(kv[i].value))) -- fprintf(stderr, "could not restore %s to %s\n", -- kv[i].name, kv[i].value); -- } -- } --} -- - static inline void tsnorm(struct timespec *ts) - { - while (ts->tv_nsec >= NSEC_PER_SEC) { -@@ -422,8 +305,7 @@ static inline int tsgreater(struct timespec *a, struct timespec *b) - - static inline int64_t calcdiff(struct timespec t1, struct timespec t2) - { -- int64_t diff; -- diff = USEC_PER_SEC * (long long)((int) t1.tv_sec - (int) t2.tv_sec); -+ int64_t diff = USEC_PER_SEC * (long long)((int) t1.tv_sec - (int) t2.tv_sec); - diff += ((int) t1.tv_nsec - (int) t2.tv_nsec) / 1000; - return diff; - } -@@ -444,32 +326,13 @@ static inline int64_t calctime(struct timespec t) - return time; - } - --static void traceopt(char *option) --{ -- char *ptr; -- if (traceopt_count + 1 > traceopt_size) { -- traceopt_size += 16; -- printf("expanding traceopt buffer to %d entries\n", traceopt_size); -- traceptr = realloc(traceptr, sizeof(char*) * traceopt_size); -- if (traceptr == NULL) -- fatal ("Error allocating space for %d trace options\n", -- traceopt_count+1); -- } -- ptr = malloc(strlen(option)+1); -- if (ptr == NULL) -- fatal("error allocating space for trace option %s\n", option); -- printf("adding traceopt %s\n", option); -- strcpy(ptr, option); -- traceptr[traceopt_count++] = ptr; --} -- - static int trace_file_exists(char *name) - { -- struct stat sbuf; -- char *tracing_prefix = get_debugfileprefix(); -- char path[MAX_PATH]; -- strcat(strcpy(path, tracing_prefix), name); -- return stat(path, &sbuf) ? 0 : 1; -+ struct stat sbuf; -+ char *tracing_prefix = get_debugfileprefix(); -+ char path[MAX_PATH]; -+ strcat(strcpy(path, tracing_prefix), name); -+ return stat(path, &sbuf) ? 0 : 1; - } - - #define TRACEBUFSIZ 1024 -@@ -483,7 +346,7 @@ static void tracemark(char *fmt, ...) - - /* bail out if we're not tracing */ - /* or if the kernel doesn't support trace_mark */ -- if (tracemark_fd < 0) -+ if (tracemark_fd < 0 || trace_fd < 0) - return; - - va_start(ap, fmt); -@@ -497,45 +360,6 @@ static void tracemark(char *fmt, ...) - write(trace_fd, "0\n", 2); - } - -- -- --static void tracing(int on) --{ -- if (notrace) -- return; -- -- if (on) { -- switch (kernelversion) { -- case KV_26_LT18: gettimeofday(0,(struct timezone *)1); break; -- case KV_26_LT24: prctl(0, 1); break; -- case KV_26_33: -- case KV_30: -- write(trace_fd, "1", 1); -- break; -- default: break; -- } -- } else { -- switch (kernelversion) { -- case KV_26_LT18: gettimeofday(0,0); break; -- case KV_26_LT24: prctl(0, 0); break; -- case KV_26_33: -- case KV_30: -- write(trace_fd, "0", 1); -- break; -- default: break; -- } -- } --} -- --static int settracer(char *tracer) --{ -- if (valid_tracer(tracer)) { -- setkernvar("current_tracer", tracer); -- return 0; -- } -- return -1; --} -- - static void open_tracemark_fd(void) - { - char path[MAX_PATH]; -@@ -557,7 +381,7 @@ static void open_tracemark_fd(void) - * open the tracing_on file so that we can stop the trace - * if we hit a breaktrace threshold - */ -- if (notrace && trace_fd < 0) { -+ if (trace_fd < 0) { - sprintf(path, "%s/%s", fileprefix, "tracing_on"); - if ((trace_fd = open(path, O_WRONLY)) < 0) - warn("unable to open tracing_on file: %s\n", path); -@@ -569,166 +393,19 @@ static void debugfs_prepare(void) - if (mount_debugfs(NULL)) - fatal("could not mount debugfs"); - -- if (kernelversion >= KV_26_33) { -- char testname[MAX_PATH]; -- -- fileprefix = get_debugfileprefix(); -- if (!trace_file_exists("tracing_enabled") && -- !trace_file_exists("tracing_on")) -- warn("tracing_enabled or tracing_on not found\n" -- "debug fs not mounted, " -- "TRACERs not configured?\n", testname); -- } else -- fileprefix = procfileprefix; -+ fileprefix = get_debugfileprefix(); -+ if (!trace_file_exists("tracing_enabled") && -+ !trace_file_exists("tracing_on")) -+ warn("tracing_enabled or tracing_on not found\n" -+ "debug fs not mounted"); - } - - static void enable_trace_mark(void) - { -- if (!trace_marker) -- return; -- -- if (!tracelimit) -- fatal("--tracemark requires -b\n"); -- - debugfs_prepare(); - open_tracemark_fd(); - } - --static void setup_tracer(void) --{ -- if (!tracelimit || notrace) -- return; -- -- debugfs_prepare(); -- -- if (kernelversion >= KV_26_33) { -- int ret; -- -- if (trace_file_exists("tracing_enabled") && -- !trace_file_exists("tracing_on")) -- setkernvar("tracing_enabled", "1"); -- -- /* ftrace_enabled is a sysctl variable */ -- /* turn it on if you're doing anything but nop or event tracing */ -- -- fileprefix = procfileprefix; -- if (tracetype) -- setkernvar("ftrace_enabled", "1"); -- else -- setkernvar("ftrace_enabled", "0"); -- fileprefix = get_debugfileprefix(); -- -- /* -- * Set default tracer to nop. -- * this also has the nice side effect of clearing out -- * old traces. -- */ -- ret = settracer("nop"); -- -- switch (tracetype) { -- case NOTRACE: -- /* no tracer specified, use events */ -- enable_events = 1; -- break; -- case FUNCTION: -- ret = settracer("function"); -- break; -- case IRQSOFF: -- ret = settracer("irqsoff"); -- break; -- case PREEMPTOFF: -- ret = settracer("preemptoff"); -- break; -- case PREEMPTIRQSOFF: -- ret = settracer("preemptirqsoff"); -- break; -- case CTXTSWITCH: -- if (valid_tracer("sched_switch")) -- ret = settracer("sched_switch"); -- else { -- if ((ret = event_enable("sched/sched_wakeup"))) -- break; -- ret = event_enable("sched/sched_switch"); -- } -- break; -- case WAKEUP: -- ret = settracer("wakeup"); -- break; -- case WAKEUPRT: -- ret = settracer("wakeup_rt"); -- break; -- default: -- if (strlen(tracer)) { -- ret = settracer(tracer); -- if (strcmp(tracer, "events") == 0 && ftrace) -- ret = settracer(functiontracer); -- } -- else { -- printf("cyclictest: unknown tracer!\n"); -- ret = 0; -- } -- break; -- } -- -- if (enable_events) -- /* turn on all events */ -- event_enable_all(); -- -- if (ret) -- fprintf(stderr, "Requested tracer '%s' not available\n", tracer); -- -- setkernvar(traceroptions, "print-parent"); -- setkernvar(traceroptions, "latency-format"); -- if (verbose) { -- setkernvar(traceroptions, "sym-offset"); -- setkernvar(traceroptions, "sym-addr"); -- setkernvar(traceroptions, "verbose"); -- } else { -- setkernvar(traceroptions, "nosym-offset"); -- setkernvar(traceroptions, "nosym-addr"); -- setkernvar(traceroptions, "noverbose"); -- } -- if (traceopt_count) { -- int i; -- for (i = 0; i < traceopt_count; i++) -- setkernvar(traceroptions, traceptr[i]); -- } -- setkernvar("tracing_max_latency", "0"); -- if (trace_file_exists("latency_hist")) -- setkernvar("latency_hist/wakeup/reset", "1"); -- -- /* open the tracing on file descriptor */ -- if (trace_fd == -1) { -- char path[MAX_PATH]; -- strcpy(path, fileprefix); -- if (trace_file_exists("tracing_on")) -- strcat(path, "tracing_on"); -- else -- strcat(path, "tracing_enabled"); -- if ((trace_fd = open(path, O_WRONLY)) == -1) -- fatal("unable to open %s for tracing", path); -- } -- -- open_tracemark_fd(); -- } else { -- setkernvar("trace_all_cpus", "1"); -- setkernvar("trace_freerunning", "1"); -- setkernvar("trace_print_on_crash", "0"); -- setkernvar("trace_user_triggered", "1"); -- setkernvar("trace_user_trigger_irq", "-1"); -- setkernvar("trace_verbose", "0"); -- setkernvar("preempt_thresh", "0"); -- setkernvar("wakeup_timing", "0"); -- setkernvar("preempt_max_latency", "0"); -- if (ftrace) -- setkernvar("mcount_enabled", "1"); -- setkernvar("trace_enabled", "1"); -- setkernvar("latency_hist/wakeup_latency/reset", "1"); -- } -- -- tracing(1); --} -- - /* - * parse an input value as a base10 value followed by an optional - * suffix. The input value is presumed to be in seconds, unless -@@ -987,7 +664,9 @@ static void *timerthread(void *param) - int stopped = 0; - cpu_set_t mask; - pthread_t thread; -- unsigned long smi_now, smi_old; -+ unsigned long smi_now, smi_old = 0; -+ -+ memset(&stop, 0, sizeof(stop)); - - /* if we're running in numa mode, set our memory node */ - if (par->node != -1) -@@ -1195,7 +874,6 @@ static void *timerthread(void *param) - stopped++; - tracemark("hit latency threshold (%llu > %d)", - (unsigned long long) diff, tracelimit); -- tracing(0); - shutdown++; - pthread_mutex_lock(&break_thread_id_lock); - if (break_thread_id == 0) -@@ -1281,18 +959,6 @@ out: - /* Print usage information */ - static void display_help(int error) - { -- char tracers[MAX_PATH]; -- char *prefix; -- -- prefix = get_debugfileprefix(); -- if (prefix[0] == '\0') -- strcpy(tracers, "unavailable (debugfs not mounted)"); -- else { -- fileprefix = prefix; -- if (kernvar(O_RDONLY, "available_tracers", tracers, sizeof(tracers))) -- strcpy(tracers, "none"); -- } -- - printf("cyclictest V %1.2f\n", VERSION); - printf("Usage:\n" - "cyclictest \n\n" -@@ -1309,17 +975,13 @@ static void display_help(int error) - #endif - "-A USEC --aligned=USEC align thread wakeups to a specific offset\n" - "-b USEC --breaktrace=USEC send break trace command when latency > USEC\n" -- "-B --preemptirqs both preempt and irqsoff tracing (used with -b)\n" - "-c CLOCK --clock=CLOCK select clock\n" - " 0 = CLOCK_MONOTONIC (default)\n" - " 1 = CLOCK_REALTIME\n" -- "-C --context context switch tracing (used with -b)\n" - "-d DIST --distance=DIST distance of thread intervals in us, default=500\n" - "-D --duration=TIME specify a length for the test run.\n" - " Append 'm', 'h', or 'd' to specify minutes, hours or days.\n" - " --latency=PM_QOS write PM_QOS to /dev/cpu_dma_latency\n" -- "-E --event event tracing (used with -b)\n" -- "-f --ftrace function trace (when -b is active)\n" - "-F --fifo= create a named pipe at path and write stats to it\n" - "-h --histogram=US dump a latency histogram to stdout after the run\n" - " US is the max latency time to be be tracked in microseconds\n" -@@ -1327,7 +989,6 @@ static void display_help(int error) - "-H --histofall=US same as -h except with an additional summary column\n" - " --histfile= dump the latency histogram to instead of stdout\n" - "-i INTV --interval=INTV base interval of thread in us default=1000\n" -- "-I --irqsoff Irqsoff tracing (used with -b)\n" - "-l LOOPS --loops=LOOPS number of loops: default=0(endless)\n" - " --laptop Save battery when running cyclictest\n" - " This will give you poorer realtime results\n" -@@ -1335,12 +996,9 @@ static void display_help(int error) - "-m --mlockall lock current and future memory allocations\n" - "-M --refresh_on_max delay updating the screen until a new max\n" - " latency is hit. Userful for low bandwidth.\n" -- " --notrace suppress tracing\n" - "-N --nsecs print results in ns instead of us (default us)\n" - "-o RED --oscope=RED oscilloscope mode, reduce verbose output by RED\n" -- "-O TOPT --traceopt=TOPT trace option\n" - "-p PRIO --priority=PRIO priority of highest prio thread\n" -- "-P --preemptoff Preempt off tracing (used with -b)\n" - " --policy=NAME policy of measurement thread, where NAME may be one\n" - " of: other, normal, batch, idle, fifo or rr.\n" - " --priospread spread priority levels starting at specified value\n" -@@ -1366,8 +1024,6 @@ static void display_help(int error) - " without NUM, threads = max_cpus\n" - " without -t default = 1\n" - " --tracemark write a trace mark when -b latency is exceeded\n" -- "-T TRACE --tracer=TRACER set tracing function\n" -- " configured tracers: %s\n" - "-u --unbuffered force unbuffered output for live processing\n" - #ifdef NUMA - "-U --numa Standard NUMA testing (similar to SMP option)\n" -@@ -1375,11 +1031,8 @@ static void display_help(int error) - #endif - "-v --verbose output values on stdout for statistics\n" - " format: n:c:v n=tasknum c=count v=value in us\n" -- "-w --wakeup task wakeup tracing (used with -b)\n" -- "-W --wakeuprt rt task wakeup tracing (used with -b)\n" - " --dbg_cyclictest print info useful for debugging cyclictest\n" -- "-x --posix_timers use POSIX timers instead of clock_nanosleep.\n", -- tracers -+ "-x --posix_timers use POSIX timers instead of clock_nanosleep.\n" - ); - if (error) - exit(EXIT_FAILURE); -@@ -1497,17 +1150,17 @@ static char *policyname(int policy) - - - enum option_values { -- OPT_AFFINITY=1, OPT_NOTRACE, OPT_BREAKTRACE, OPT_PREEMPTIRQ, OPT_CLOCK, -- OPT_CONTEXT, OPT_DISTANCE, OPT_DURATION, OPT_LATENCY, OPT_EVENT, -- OPT_FTRACE, OPT_FIFO, OPT_HISTOGRAM, OPT_HISTOFALL, OPT_HISTFILE, -- OPT_INTERVAL, OPT_IRQSOFF, OPT_LOOPS, OPT_MLOCKALL, OPT_REFRESH, -- OPT_NANOSLEEP, OPT_NSECS, OPT_OSCOPE, OPT_TRACEOPT, OPT_PRIORITY, -- OPT_PREEMPTOFF, OPT_QUIET, OPT_PRIOSPREAD, OPT_RELATIVE, OPT_RESOLUTION, -- OPT_SYSTEM, OPT_SMP, OPT_THREADS, OPT_TRACER, OPT_TRIGGER, -- OPT_TRIGGER_NODES, OPT_UNBUFFERED, OPT_NUMA, OPT_VERBOSE, OPT_WAKEUP, -- OPT_WAKEUPRT, OPT_DBGCYCLIC, OPT_POLICY, OPT_HELP, OPT_NUMOPTS, -- OPT_ALIGNED, OPT_SECALIGNED, OPT_LAPTOP, OPT_SMI, OPT_TRACEMARK, -- OPT_POSIX_TIMERS, -+ OPT_AFFINITY=1, OPT_BREAKTRACE, OPT_CLOCK, -+ OPT_DISTANCE, OPT_DURATION, OPT_LATENCY, -+ OPT_FIFO, OPT_HISTOGRAM, OPT_HISTOFALL, OPT_HISTFILE, -+ OPT_INTERVAL, OPT_LOOPS, OPT_MLOCKALL, OPT_REFRESH, -+ OPT_NANOSLEEP, OPT_NSECS, OPT_OSCOPE, OPT_PRIORITY, -+ OPT_QUIET, OPT_PRIOSPREAD, OPT_RELATIVE, OPT_RESOLUTION, -+ OPT_SYSTEM, OPT_SMP, OPT_THREADS, OPT_TRIGGER, -+ OPT_TRIGGER_NODES, OPT_UNBUFFERED, OPT_NUMA, OPT_VERBOSE, -+ OPT_DBGCYCLIC, OPT_POLICY, OPT_HELP, OPT_NUMOPTS, -+ OPT_ALIGNED, OPT_SECALIGNED, OPT_LAPTOP, OPT_SMI, -+ OPT_TRACEMARK, OPT_POSIX_TIMERS, - }; - - /* Process commandline options */ -@@ -1524,32 +1177,24 @@ static void process_options (int argc, char *argv[], int max_cpus) - */ - static struct option long_options[] = { - {"affinity", optional_argument, NULL, OPT_AFFINITY}, -- {"notrace", no_argument, NULL, OPT_NOTRACE }, - {"aligned", optional_argument, NULL, OPT_ALIGNED }, - {"breaktrace", required_argument, NULL, OPT_BREAKTRACE }, -- {"preemptirqs", no_argument, NULL, OPT_PREEMPTIRQ }, - {"clock", required_argument, NULL, OPT_CLOCK }, -- {"context", no_argument, NULL, OPT_CONTEXT }, - {"distance", required_argument, NULL, OPT_DISTANCE }, - {"duration", required_argument, NULL, OPT_DURATION }, - {"latency", required_argument, NULL, OPT_LATENCY }, -- {"event", no_argument, NULL, OPT_EVENT }, -- {"ftrace", no_argument, NULL, OPT_FTRACE }, - {"fifo", required_argument, NULL, OPT_FIFO }, - {"histogram", required_argument, NULL, OPT_HISTOGRAM }, - {"histofall", required_argument, NULL, OPT_HISTOFALL }, - {"histfile", required_argument, NULL, OPT_HISTFILE }, - {"interval", required_argument, NULL, OPT_INTERVAL }, -- {"irqsoff", no_argument, NULL, OPT_IRQSOFF }, - {"laptop", no_argument, NULL, OPT_LAPTOP }, - {"loops", required_argument, NULL, OPT_LOOPS }, - {"mlockall", no_argument, NULL, OPT_MLOCKALL }, - {"refresh_on_max", no_argument, NULL, OPT_REFRESH }, - {"nsecs", no_argument, NULL, OPT_NSECS }, - {"oscope", required_argument, NULL, OPT_OSCOPE }, -- {"traceopt", required_argument, NULL, OPT_TRACEOPT }, - {"priority", required_argument, NULL, OPT_PRIORITY }, -- {"preemptoff", no_argument, NULL, OPT_PREEMPTOFF }, - {"quiet", no_argument, NULL, OPT_QUIET }, - {"priospread", no_argument, NULL, OPT_PRIOSPREAD }, - {"relative", no_argument, NULL, OPT_RELATIVE }, -@@ -1561,20 +1206,16 @@ static void process_options (int argc, char *argv[], int max_cpus) - {"spike", required_argument, NULL, OPT_TRIGGER }, - {"spike-nodes", required_argument, NULL, OPT_TRIGGER_NODES }, - {"threads", optional_argument, NULL, OPT_THREADS }, -- {"tracemark", no_argument, NULL, OPT_TRACEMARK }, -- {"tracer", required_argument, NULL, OPT_TRACER }, - {"unbuffered", no_argument, NULL, OPT_UNBUFFERED }, - {"numa", no_argument, NULL, OPT_NUMA }, - {"verbose", no_argument, NULL, OPT_VERBOSE }, -- {"wakeup", no_argument, NULL, OPT_WAKEUP }, -- {"wakeuprt", no_argument, NULL, OPT_WAKEUPRT }, - {"dbg_cyclictest", no_argument, NULL, OPT_DBGCYCLIC }, - {"policy", required_argument, NULL, OPT_POLICY }, - {"help", no_argument, NULL, OPT_HELP }, - {"posix_timers", no_argument, NULL, OPT_POSIX_TIMERS }, -- {NULL, 0, NULL, 0} -+ {NULL, 0, NULL, 0 }, - }; -- int c = getopt_long(argc, argv, "a::A::b:Bc:Cd:D:Efh:H:i:Il:MNo:O:p:PmqrRsSt::uUvD:wWT:x", -+ int c = getopt_long(argc, argv, "a::A::b:c:d:D:h:H:i:l:MNo:p:mqrRsSt::uUvD:x", - long_options, &option_index); - if (c == -1) - break; -@@ -1607,15 +1248,10 @@ static void process_options (int argc, char *argv[], int max_cpus) - case 'b': - case OPT_BREAKTRACE: - tracelimit = atoi(optarg); break; -- case 'B': -- case OPT_PREEMPTIRQ: -- tracetype = PREEMPTIRQSOFF; break; - case 'c': - case OPT_CLOCK: - clocksel = atoi(optarg); break; - case 'C': -- case OPT_CONTEXT: -- tracetype = CTXTSWITCH; break; - case 'd': - case OPT_DISTANCE: - distance = atoi(optarg); break; -@@ -1623,17 +1259,11 @@ static void process_options (int argc, char *argv[], int max_cpus) - case OPT_DURATION: - duration = parse_time_string(optarg); break; - case 'E': -- case OPT_EVENT: -- enable_events = 1; break; -- case 'f': -- case OPT_FTRACE: -- tracetype = FUNCTION; ftrace = 1; break; - case 'F': - case OPT_FIFO: - use_fifo = 1; - strncpy(fifopath, optarg, strlen(optarg)); - break; -- - case 'H': - case OPT_HISTOFALL: - histofall = 1; /* fall through */ -@@ -1647,16 +1277,6 @@ static void process_options (int argc, char *argv[], int max_cpus) - case 'i': - case OPT_INTERVAL: - interval = atoi(optarg); break; -- case 'I': -- case OPT_IRQSOFF: -- if (tracetype == PREEMPTOFF) { -- tracetype = PREEMPTIRQSOFF; -- strncpy(tracer, "preemptirqsoff", sizeof(tracer)); -- } else { -- tracetype = IRQSOFF; -- strncpy(tracer, "irqsoff", sizeof(tracer)); -- } -- break; - case 'l': - case OPT_LOOPS: - max_cycles = atoi(optarg); break; -@@ -1672,25 +1292,12 @@ static void process_options (int argc, char *argv[], int max_cpus) - case 'o': - case OPT_OSCOPE: - oscope_reduction = atoi(optarg); break; -- case 'O': -- case OPT_TRACEOPT: -- traceopt(optarg); break; - case 'p': - case OPT_PRIORITY: - priority = atoi(optarg); - if (policy != SCHED_FIFO && policy != SCHED_RR) - policy = SCHED_FIFO; - break; -- case 'P': -- case OPT_PREEMPTOFF: -- if (tracetype == IRQSOFF) { -- tracetype = PREEMPTIRQSOFF; -- strncpy(tracer, "preemptirqsoff", sizeof(tracer)); -- } else { -- tracetype = PREEMPTOFF; -- strncpy(tracer, "preemptoff", sizeof(tracer)); -- } -- break; - case 'q': - case OPT_QUIET: - quiet = 1; break; -@@ -1740,11 +1347,6 @@ static void process_options (int argc, char *argv[], int max_cpus) - if (trigger) - trigger_list_size = atoi(optarg); - break; -- case 'T': -- case OPT_TRACER: -- tracetype = CUSTOM; -- strncpy(tracer, optarg, sizeof(tracer)); -- break; - case 'u': - case OPT_UNBUFFERED: - setvbuf(stdout, NULL, _IONBF, 0); break; -@@ -1764,12 +1366,6 @@ static void process_options (int argc, char *argv[], int max_cpus) - break; - case 'v': - case OPT_VERBOSE: verbose = 1; break; -- case 'w': -- case OPT_WAKEUP: -- tracetype = WAKEUP; break; -- case 'W': -- case OPT_WAKEUPRT: -- tracetype = WAKEUPRT; break; - case 'x': - case OPT_POSIX_TIMERS: - use_nanosleep = MODE_CYCLIC; break; -@@ -1787,8 +1383,6 @@ static void process_options (int argc, char *argv[], int max_cpus) - if (latency_target_value < 0) - latency_target_value = 0; - break; -- case OPT_NOTRACE: -- notrace = 1; break; - case OPT_POLICY: - handlepolicy(optarg); break; - case OPT_DBGCYCLIC: -@@ -1802,9 +1396,6 @@ static void process_options (int argc, char *argv[], int max_cpus) - fatal("--smi is not available on your arch\n"); - #endif - break; -- case OPT_TRACEMARK: -- notrace = 1; /* using --tracemark implies --notrace */ -- trace_marker = 1; break; - } - } - -@@ -1887,43 +1478,6 @@ static void process_options (int argc, char *argv[], int max_cpus) - } - } - --static int check_kernel(void) --{ -- struct utsname kname; -- int maj, min, sub, kv, ret; -- -- ret = uname(&kname); -- if (ret) { -- fprintf(stderr, "uname failed: %s. Assuming not 2.6\n", -- strerror(errno)); -- return KV_NOT_SUPPORTED; -- } -- sscanf(kname.release, "%d.%d.%d", &maj, &min, &sub); -- if (maj == 2 && min == 6) { -- if (sub < 18) -- kv = KV_26_LT18; -- else if (sub < 24) -- kv = KV_26_LT24; -- else if (sub < 28) { -- kv = KV_26_33; -- strcpy(functiontracer, "ftrace"); -- strcpy(traceroptions, "iter_ctrl"); -- } else { -- kv = KV_26_33; -- strcpy(functiontracer, "function"); -- strcpy(traceroptions, "trace_options"); -- } -- } else if (maj >= 3) { -- kv = KV_30; -- strcpy(functiontracer, "function"); -- strcpy(traceroptions, "trace_options"); -- -- } else -- kv = KV_NOT_SUPPORTED; -- -- return kv; --} -- - static int check_timer(void) - { - struct timespec ts; -@@ -1952,8 +1506,6 @@ static void sighand(int sig) - shutdown = 1; - if (refresh_on_max) - pthread_cond_signal(&refresh_on_max_cond); -- if (tracelimit) -- tracing(0); - } - - static void print_tids(struct thread_param *par[], int nthreads) -@@ -2240,14 +1792,8 @@ int main(int argc, char **argv) - /* use the /dev/cpu_dma_latency trick if it's there */ - set_latency_target(); - -- kernelversion = check_kernel(); -- -- if (kernelversion == KV_NOT_SUPPORTED) -- warn("Running on unknown kernel version...YMMV\n"); -- -- setup_tracer(); -- -- enable_trace_mark(); -+ if (tracelimit) -+ enable_trace_mark(); - - if (check_timer()) - warn("High resolution timers not available\n"); -@@ -2597,35 +2143,16 @@ int main(int argc, char **argv) - threadfree(parameters[i], sizeof(struct thread_param), parameters[i]->node); - } - out: -- /* ensure that the tracer is stopped */ -- if (tracelimit) -- tracing(0); -- -- - /* close any tracer file descriptors */ - if (tracemark_fd >= 0) - close(tracemark_fd); - if (trace_fd >= 0) - close(trace_fd); - -- if (enable_events) -- /* turn off all events */ -- event_disable_all(); -- -- /* turn off the function tracer */ -- fileprefix = procfileprefix; -- if (tracetype && !notrace) -- setkernvar("ftrace_enabled", "0"); -- fileprefix = get_debugfileprefix(); -- - /* unlock everything */ - if (lockall) - munlockall(); - -- /* Be a nice program, cleanup */ -- if (kernelversion < KV_26_33) -- restorekernvars(); -- - /* close the latency_target_fd if it's open */ - if (latency_target_fd >= 0) - close(latency_target_fd); --- -2.14.3 - diff --git a/SOURCES/deadline_test-Increase-buffer-to-avoid-overflow.patch b/SOURCES/deadline_test-Increase-buffer-to-avoid-overflow.patch new file mode 100644 index 0000000..c7ae585 --- /dev/null +++ b/SOURCES/deadline_test-Increase-buffer-to-avoid-overflow.patch @@ -0,0 +1,42 @@ +From 33dff61afb032e5374c6ec60d4f88cdf57e83c53 Mon Sep 17 00:00:00 2001 +From: Daniel Wagner +Date: Mon, 19 Aug 2019 08:43:04 +0200 +Subject: [PATCH 04/10] deadline_test: Increase buffer to avoid overflow +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Increase the size of the char buffer. gcc 9.1.1 reports: + +src/sched_deadline/deadline_test.c:1803:24: warning: ‘%d’ directive writing between 1 and 11 bytes into a region of size 10 [-Wformat-overflow=] + 1803 | sprintf(setcpu_buf, "%d", cpu_count - 1); + | ^~ +src/sched_deadline/deadline_test.c:1803:23: note: directive argument in the range [-2147483648, 2147483646] + 1803 | sprintf(setcpu_buf, "%d", cpu_count - 1); + | ^~~~ +src/sched_deadline/deadline_test.c:1803:3: note: ‘sprintf’ output between 2 and 12 bytes into a destination of size 10 + 1803 | sprintf(setcpu_buf, "%d", cpu_count - 1); + | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Signed-off-by: Daniel Wagner +Signed-off-by: John Kacur +--- + src/sched_deadline/deadline_test.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/sched_deadline/deadline_test.c b/src/sched_deadline/deadline_test.c +index e2898de328bb..5b5f40dbb74d 100644 +--- a/src/sched_deadline/deadline_test.c ++++ b/src/sched_deadline/deadline_test.c +@@ -1795,7 +1795,7 @@ int main (int argc, char **argv) + + /* -b has us bind to the last CPU. */ + if (!all_cpus && !setcpu) { +- setcpu_buf = malloc(10); ++ setcpu_buf = malloc(12); + if (!setcpu_buf) { + perror("malloc"); + exit(-1); +-- +2.20.1 + diff --git a/SOURCES/hwlatdetect-disable-enable-c-state-transitions.patch b/SOURCES/hwlatdetect-disable-enable-c-state-transitions.patch deleted file mode 100644 index 3ae3ec6..0000000 --- a/SOURCES/hwlatdetect-disable-enable-c-state-transitions.patch +++ /dev/null @@ -1,77 +0,0 @@ -From ef49ccfab821010319d4ff6b1332fa890889aeac Mon Sep 17 00:00:00 2001 -From: Clark Williams -Date: Mon, 6 May 2019 14:40:46 -0500 -Subject: [PATCH 1/2] hwlatdetect: disable/enable c-state transitions during - detection - -Recent performance tuning problems led me to realize that just running -at fifo:99 and turning off interrupts isn't enough while looking for -BIOS induced latencies. Power savings logic is built into most modern -cpus and so must be disabled while looking for BIOS induced (SMI/NMI) -latencies. - -Use the /dev/cpu_dma_latency mechanism to disable c-state transitions -while running the hardware latency detector. Open the file -/dev/cpu_dma_latency and write a 32-bit zero to it, which will prevent -c-state transitions while the file is open. - -Signed-off-by: Clark Williams -Signed-off-by: John Kacur ---- - src/hwlatdetect/hwlatdetect.py | 20 +++++++++++++++++++- - 1 file changed, 19 insertions(+), 1 deletion(-) - -diff --git a/src/hwlatdetect/hwlatdetect.py b/src/hwlatdetect/hwlatdetect.py -index 2c8f9f160419..368079a158b1 100755 ---- a/src/hwlatdetect/hwlatdetect.py -+++ b/src/hwlatdetect/hwlatdetect.py -@@ -1,6 +1,6 @@ - #!/usr/bin/python3 - --# (C) 2018 Clark Williams -+# (C) 2018,2019 Clark Williams - # (C) 2015,2016 Clark Williams - # (C) 2009 Clark Williams - # -@@ -213,6 +213,22 @@ class Detector(object): - counts = [ int(x.strip()) for x in p.stdout.readlines()] - return counts - -+ # methods for preventing/enabling c-state transitions -+ # openinging /dev/cpu_dma_latency and writeing a 32-bit zero to that file will prevent -+ # c-state transitions while the file descriptor is open. -+ # use c_states_off() to disable c-state transitions -+ # use c_states_on() to close the file descriptor and re-enable c-states -+ # -+ def c_states_off(self): -+ self.dma_latency_handle = os.open("/dev/cpu_dma_latency", os.O_WRONLY) -+ os.write(self.dma_latency_handle, b'\x00\x00\x00\x00') -+ debug("c-states disabled") -+ -+ def c_states_on(self): -+ if self.dma_latency_handle: -+ os.close(self.dma_latency_handle) -+ debug("c-states enabled") -+ - def cleanup(self): - raise RuntimeError("must override base method 'cleanup'!") - -@@ -235,6 +251,7 @@ class Detector(object): - def start(self): - count = 0 - threshold = int(self.get("threshold")) -+ self.c_states_off() - debug("enabling detector module (threshold: %d)" % threshold) - self.set("enable", 1) - while self.get("enable") == 0: -@@ -258,6 +275,7 @@ class Detector(object): - time.sleep(0.1) - debug("retrying disable of detector module(%d)" % count) - self.set("enable", 0) -+ self.c_states_on() - debug("detector module disabled") - - def detect(self): --- -2.20.1 - diff --git a/SOURCES/pi_stress-Sync-man-page-with-help.patch b/SOURCES/pi_stress-Sync-man-page-with-help.patch new file mode 100644 index 0000000..ece1232 --- /dev/null +++ b/SOURCES/pi_stress-Sync-man-page-with-help.patch @@ -0,0 +1,47 @@ +From 8f96d299bf71bd922f0d45e1500c346e7e55db7c Mon Sep 17 00:00:00 2001 +From: John Kacur +Date: Thu, 23 Jan 2020 05:29:12 +0100 +Subject: [PATCH] rt-tests: pi_stress: Sync man page with help + +Sync the man page with help. +Specifically, remove the signal option which is not supported and +document the sched option + +Signed-off-by: John Kacur +--- + src/pi_tests/pi_stress.8 | 9 +++++---- + 1 file changed, 5 insertions(+), 4 deletions(-) + +diff --git a/src/pi_tests/pi_stress.8 b/src/pi_tests/pi_stress.8 +index 475d3c34f135..5e2af6189ca1 100644 +--- a/src/pi_tests/pi_stress.8 ++++ b/src/pi_tests/pi_stress.8 +@@ -21,7 +21,8 @@ pi_stress \- a stress test for POSIX Priority Inheritance mutexes + .IR groups + .RB [ \-d|\-\-debug ] + .RB [ \-v|\-\-verbose ] +-.RB [ \-s|\-\-signal ] ++.RB [ \-s|\-\-sched ++.IR sched_opts ] + .RB [ \-r|\-\-rr ] + .RB [ \-p|\-\-prompt ] + .RB [ \-m|\-\-mlockall ] +@@ -63,12 +64,12 @@ Specify a length for the test run. + Append 'm', 'h', or 'd' to specify minutes, hours or days. + .IP \-v|\-\-verbose + Run with verbose messages +-.IP \-s|\-\-signal +-Terminate on receipt of SIGTERM (Ctrl-C). Default is to terminate on +-any keypress. + .IP \-r|\-\-rr + Run inversion group threads as SCHED_RR (round-robin). The default is + to run the inversion threads as SCHED_FIFO. ++.IP \-s|\-\-sched ++scheduling options per thread type: ++id=[high|med|low],policy=[fifo,rr],priority=,policy=deadline,runtime=,deadline=,period= + .IP \-p|\-\-prompt + Prompt before actually starting the stress test + .IP \-u|\-\-uniprocessor +-- +2.20.1 + diff --git a/SOURCES/pmqtest-Increase-buffer-to-avoid-overflow.patch b/SOURCES/pmqtest-Increase-buffer-to-avoid-overflow.patch new file mode 100644 index 0000000..42a0cab --- /dev/null +++ b/SOURCES/pmqtest-Increase-buffer-to-avoid-overflow.patch @@ -0,0 +1,50 @@ +From f7c39616fe887f35abaa4b81466ab7f167e0a410 Mon Sep 17 00:00:00 2001 +From: Daniel Wagner +Date: Mon, 19 Aug 2019 08:43:01 +0200 +Subject: [PATCH 01/10] pmqtest: Increase buffer to avoid overflow +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Increase the size of the char buffer. gcc 9.1.1 reports: + +src/pmqtest/pmqtest.c: In function ‘main’: +src/pmqtest/pmqtest.c:46:21: warning: ‘%d’ directive writing between 1 and 10 bytes into a region of size 8 [-Wformat-overflow=] + 46 | #define SYNCMQ_NAME "/syncmsg%d" + | ^~~~~~~~~~~~ + +src/pmqtest/pmqtest.c:445:3: note: ‘sprintf’ output between 10 and 19 bytes into a destination of size 16 + 445 | sprintf(mqname, SYNCMQ_NAME, i); + | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Signed-off-by: Daniel Wagner +Signed-off-by: John Kacur +--- + src/pmqtest/pmqtest.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/src/pmqtest/pmqtest.c b/src/pmqtest/pmqtest.c +index a04fc49872bf..3ce799bd6319 100644 +--- a/src/pmqtest/pmqtest.c ++++ b/src/pmqtest/pmqtest.c +@@ -440,7 +440,7 @@ int main(int argc, char *argv[]) + goto nomem; + + for (i = 0; i < num_threads; i++) { +- char mqname[16]; ++ char mqname[19]; + + sprintf(mqname, SYNCMQ_NAME, i); + receiver[i].syncmq = mq_open(mqname, oflag, 0777, &mqstat); +@@ -567,7 +567,7 @@ int main(int argc, char *argv[]) + } + nanosleep(&maindelay, NULL); + for (i = 0; i < num_threads; i++) { +- char mqname[16]; ++ char mqname[19]; + + mq_close(receiver[i].syncmq); + sprintf(mqname, SYNCMQ_NAME, i); +-- +2.20.1 + diff --git a/SOURCES/ptsematest-sigwaittest-pmqtest-svsematest-reprot-err.patch b/SOURCES/ptsematest-sigwaittest-pmqtest-svsematest-reprot-err.patch deleted file mode 100644 index 9f4da69..0000000 --- a/SOURCES/ptsematest-sigwaittest-pmqtest-svsematest-reprot-err.patch +++ /dev/null @@ -1,77 +0,0 @@ -From 40eb214cc9b43f99df3d20b3303b7df1d149b5e2 Mon Sep 17 00:00:00 2001 -From: Qiao Zhao -Date: Thu, 25 Jul 2019 10:49:15 +0800 -Subject: [PATCH] ptsematest, sigwaittest, pmqtest, svsematest reprot error - "Could not access /sys/kernel/debug/tracing/tracing_enabled" - -tracing_enabled was deprecated a long time ago and is no longer -available, use tracing_on instead - -To reproduce - -This patches fixes that - -Signed-off-by: Qiao Zhao -Signed-off-by: John Kacur ---- - src/pmqtest/pmqtest.c | 2 +- - src/ptsematest/ptsematest.c | 2 +- - src/sigwaittest/sigwaittest.c | 2 +- - src/svsematest/svsematest.c | 2 +- - 4 files changed, 4 insertions(+), 4 deletions(-) - -diff --git a/src/pmqtest/pmqtest.c b/src/pmqtest/pmqtest.c -index 2191710961fe..a04fc49872bf 100644 ---- a/src/pmqtest/pmqtest.c -+++ b/src/pmqtest/pmqtest.c -@@ -204,7 +204,7 @@ void *pmqthread(void *param) - char tracing_enabled_file[MAX_PATH]; - - strcpy(tracing_enabled_file, get_debugfileprefix()); -- strcat(tracing_enabled_file, "tracing_enabled"); -+ strcat(tracing_enabled_file, "tracing_on"); - int tracing_enabled = - open(tracing_enabled_file, O_WRONLY); - if (tracing_enabled >= 0) { -diff --git a/src/ptsematest/ptsematest.c b/src/ptsematest/ptsematest.c -index e8a3177b63dd..553759212ac9 100644 ---- a/src/ptsematest/ptsematest.c -+++ b/src/ptsematest/ptsematest.c -@@ -131,7 +131,7 @@ void *semathread(void *param) - char tracing_enabled_file[MAX_PATH]; - - strcpy(tracing_enabled_file, get_debugfileprefix()); -- strcat(tracing_enabled_file, "tracing_enabled"); -+ strcat(tracing_enabled_file, "tracing_on"); - int tracing_enabled = - open(tracing_enabled_file, O_WRONLY); - if (tracing_enabled >= 0) { -diff --git a/src/sigwaittest/sigwaittest.c b/src/sigwaittest/sigwaittest.c -index 4579f903c909..59f28a5babcb 100644 ---- a/src/sigwaittest/sigwaittest.c -+++ b/src/sigwaittest/sigwaittest.c -@@ -179,7 +179,7 @@ void *semathread(void *param) - char tracing_enabled_file[MAX_PATH]; - - strcpy(tracing_enabled_file, get_debugfileprefix()); -- strcat(tracing_enabled_file, "tracing_enabled"); -+ strcat(tracing_enabled_file, "tracing_on"); - int tracing_enabled = - open(tracing_enabled_file, O_WRONLY); - if (tracing_enabled >= 0) { -diff --git a/src/svsematest/svsematest.c b/src/svsematest/svsematest.c -index 01083d13dde6..8f880786ec0f 100644 ---- a/src/svsematest/svsematest.c -+++ b/src/svsematest/svsematest.c -@@ -185,7 +185,7 @@ void *semathread(void *param) - char tracing_enabled_file[MAX_PATH]; - - strcpy(tracing_enabled_file, get_debugfileprefix()); -- strcat(tracing_enabled_file, "tracing_enabled"); -+ strcat(tracing_enabled_file, "tracing_on"); - int tracing_enabled = - open(tracing_enabled_file, O_WRONLY); - if (tracing_enabled >= 0) { --- -2.20.1 - diff --git a/SOURCES/queuelat-Assume-queuelat-and-queuelat-scripts-in-path.patch b/SOURCES/queuelat-Assume-queuelat-and-queuelat-scripts-in-path.patch deleted file mode 100644 index 16b1b28..0000000 --- a/SOURCES/queuelat-Assume-queuelat-and-queuelat-scripts-in-path.patch +++ /dev/null @@ -1,115 +0,0 @@ -From 59c7b5e334940fff29ea49aa722d1c43c88a436b Mon Sep 17 00:00:00 2001 -From: John Kacur -Date: Tue, 7 May 2019 15:26:38 +0200 -Subject: [PATCH 1/2] queuelat: Assume queuelat and queuelat scripts are in the - path - -Assume queuelat and queuelat scripts are in the path. Don't hardcode -their location. - -Write the temporary data to /usr/tmp/outfile - -Signed-off-by: John Kacur ---- - src/queuelat/determine_maximum_mpps.sh | 35 +++++++++++++------------- - 1 file changed, 17 insertions(+), 18 deletions(-) - -diff --git a/src/queuelat/determine_maximum_mpps.sh b/src/queuelat/determine_maximum_mpps.sh -index cf7a8cab9cc4..cd45454720f7 100755 ---- a/src/queuelat/determine_maximum_mpps.sh -+++ b/src/queuelat/determine_maximum_mpps.sh -@@ -8,6 +8,7 @@ - PREAMBLE="taskset -c 2 chrt -f 1" - MAXLAT="20000" - CYCLES_PER_PACKET="300" -+OUTFILE=/usr/tmp/outfile - - echo "Determining maximum mpps the machine can handle" - echo "Will take a few minutes to determine mpps value" -@@ -16,10 +17,10 @@ echo "And 10 minutes run to confirm the final mpps value is stable" - for mpps in `seq 3 3 50`; do - echo testing $mpps Mpps - -- outfile=`mktemp` -- $PREAMBLE ./queuelat -m $MAXLAT -c $CYCLES_PER_PACKET -f `sh ./get_cpuinfo_mhz.sh` -p $mpps -t 30 > $outfile -+ OUTFILE=`mktemp` -+ $PREAMBLE queuelat -m $MAXLAT -c $CYCLES_PER_PACKET -f `sh get_cpuinfo_mhz.sh` -p $mpps -t 30 > $OUTFILE - -- exceeded=`grep exceeded $outfile` -+ exceeded=`grep exceeded $OUTFILE` - if [ ! -z "$exceeded" ]; then - echo mpps failed: $mpps - break; -@@ -32,10 +33,10 @@ first_mpps=$(($mpps - 1)) - for mpps in `seq $first_mpps -1 3`; do - echo testing $mpps Mpps - -- outfile=`mktemp` -- $PREAMBLE ./queuelat -m $MAXLAT -c $CYCLES_PER_PACKET -f `sh ./get_cpuinfo_mhz.sh` -p $mpps -t 30 > $outfile -+ OUTFILE=`mktemp` -+ $PREAMBLE queuelat -m $MAXLAT -c $CYCLES_PER_PACKET -f `sh get_cpuinfo_mhz.sh` -p $mpps -t 30 > $OUTFILE - -- exceeded=`grep exceeded $outfile` -+ exceeded=`grep exceeded $OUTFILE` - if [ -z "$exceeded" ]; then - echo mpps success $mpps - break; -@@ -49,10 +50,10 @@ echo second loop mpps: $mpps - for mpps in `seq $second_mpps 0.3 $first_mpps`; do - echo testing $mpps Mpps - -- outfile=`mktemp` -- $PREAMBLE ./queuelat -m $MAXLAT -c $CYCLES_PER_PACKET -f `sh ./get_cpuinfo_mhz.sh` -p $mpps -t 30 > $outfile -+ OUTFILE=`mktemp` -+ $PREAMBLE queuelat -m $MAXLAT -c $CYCLES_PER_PACKET -f `sh get_cpuinfo_mhz.sh` -p $mpps -t 30 > $OUTFILE - -- exceeded=`grep exceeded $outfile` -+ exceeded=`grep exceeded $OUTFILE` - if [ ! -z "$exceeded" ]; then - echo mpps failure $mpps - break; -@@ -66,10 +67,10 @@ third_mpps=`echo "$mpps -0.1" | bc` - for mpps in `seq $third_mpps -0.1 3`; do - echo testing $mpps Mpps - -- outfile=`mktemp` -- $PREAMBLE ./queuelat -m $MAXLAT -c $CYCLES_PER_PACKET -f `sh ./get_cpuinfo_mhz.sh` -p $mpps -t 30 > $outfile -+ OUTFILE=`mktemp` -+ $PREAMBLE queuelat -m $MAXLAT -c $CYCLES_PER_PACKET -f `sh get_cpuinfo_mhz.sh` -p $mpps -t 30 > $OUTFILE - -- exceeded=`grep exceeded $outfile` -+ exceeded=`grep exceeded $OUTFILE` - if [ -z "$exceeded" ]; then - echo mpps success $mpps - break; -@@ -86,8 +87,8 @@ while [ $queuelat_failure == 1 ]; do - echo "$mpps Mpps" - - for i in `seq 1 10`; do -- $PREAMBLE ./queuelat -m $MAXLAT -c $CYCLES_PER_PACKET -f `./get_cpuinfo_mhz.sh` -p $mpps -t 30 > $outfile -- exceeded=`grep exceeded $outfile` -+ $PREAMBLE ./queuelat -m $MAXLAT -c $CYCLES_PER_PACKET -f `get_cpuinfo_mhz.sh` -p $mpps -t 30 > $OUTFILE -+ exceeded=`grep exceeded $OUTFILE` - - if [ ! -z "$exceeded" ]; then - echo "mpps failure (run $i) $mpps" -@@ -108,8 +109,8 @@ while [ $queuelat_failure == 1 ]; do - echo -n "Starting 10 minutes run with " - echo "$mpps Mpps" - -- $PREAMBLE ./queuelat -m $MAXLAT -c $CYCLES_PER_PACKET -f `./get_cpuinfo_mhz.sh` -p $mpps -t 600 > $outfile -- exceeded=`grep exceeded $outfile` -+ $PREAMBLE queuelat -m $MAXLAT -c $CYCLES_PER_PACKET -f `get_cpuinfo_mhz.sh` -p $mpps -t 600 > $OUTFILE -+ exceeded=`grep exceeded $OUTFILE` - - if [ ! -z "$exceeded" ]; then - echo "mpps failure (run $i) $mpps" -@@ -124,5 +125,3 @@ echo Final mpps is: $mpps - - unset queuelat_failure - unset mpps -- -- --- -2.20.1 - diff --git a/SOURCES/queuelat-Install-queuelat-helper-scripts-from-make.patch b/SOURCES/queuelat-Install-queuelat-helper-scripts-from-make.patch deleted file mode 100644 index 8d980a6..0000000 --- a/SOURCES/queuelat-Install-queuelat-helper-scripts-from-make.patch +++ /dev/null @@ -1,29 +0,0 @@ -From 38e7eb899ffbf23773f8c396c7195e6af0dad099 Mon Sep 17 00:00:00 2001 -From: John Kacur -Date: Tue, 7 May 2019 15:47:55 +0200 -Subject: [PATCH 2/2] queuelat: Install queuelat helper scripts from the - rt-tests Makefile - -Install queuelat helper scripts from the rt-tests Makefile - -Signed-off-by: John Kacur ---- - Makefile | 2 ++ - 1 file changed, 2 insertions(+) - -diff --git a/Makefile b/Makefile -index 16cd2f9bdd03..ea80923918f7 100644 ---- a/Makefile -+++ b/Makefile -@@ -180,6 +180,8 @@ install: all install_hwlatdetect - mkdir -p "$(DESTDIR)$(bindir)" "$(DESTDIR)$(mandir)/man4" - mkdir -p "$(DESTDIR)$(srcdir)" "$(DESTDIR)$(mandir)/man8" - cp $(TARGETS) "$(DESTDIR)$(bindir)" -+ install src/queuelat/get_cpuinfo_mhz.sh "$(DESTDIR)$(bindir)" -+ install src/queuelat/determine_maximum_mpps.sh "${DESTDIR}${bindir}" - gzip -c src/cyclictest/cyclictest.8 >"$(DESTDIR)$(mandir)/man8/cyclictest.8.gz" - gzip -c src/pi_tests/pi_stress.8 >"$(DESTDIR)$(mandir)/man8/pi_stress.8.gz" - gzip -c src/ptsematest/ptsematest.8 >"$(DESTDIR)$(mandir)/man8/ptsematest.8.gz" --- -2.20.1 - diff --git a/SOURCES/queuelat-use-mfence-for-rdtsc-ordering.patch b/SOURCES/queuelat-use-mfence-for-rdtsc-ordering.patch deleted file mode 100644 index 4db3c3e..0000000 --- a/SOURCES/queuelat-use-mfence-for-rdtsc-ordering.patch +++ /dev/null @@ -1,31 +0,0 @@ -From 5c7ee5d6a0444f785a96811b88e604954a1f1ef4 Mon Sep 17 00:00:00 2001 -From: Marcelo Tosatti -Date: Mon, 7 Jan 2019 15:35:56 -0200 -Subject: [PATCH] queuelat: use mfence for rdtsc ordering - -cpuid is causing register corruption: use mfence instead. - -Signed-off-by: Marcelo Tosatti - -v2: fix signed-off-by line -Signed-off-by: John Kacur ---- - src/queuelat/queuelat.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/src/queuelat/queuelat.c b/src/queuelat/queuelat.c -index 2230d04bf391..3b291f168768 100644 ---- a/src/queuelat/queuelat.c -+++ b/src/queuelat/queuelat.c -@@ -265,7 +265,7 @@ static inline unsigned long long __rdtscll(void) - { - DECLARE_ARGS(val, low, high); - -- asm volatile("cpuid; rdtsc" : EAX_EDX_RET(val, low, high)); -+ asm volatile("mfence; rdtsc" : EAX_EDX_RET(val, low, high)); - - return EAX_EDX_VAL(val, low, high); - } --- -2.20.1 - diff --git a/SOURCES/rt-tests-Add-SPDX-tags.patch b/SOURCES/rt-tests-Add-SPDX-tags.patch new file mode 100644 index 0000000..57183ff --- /dev/null +++ b/SOURCES/rt-tests-Add-SPDX-tags.patch @@ -0,0 +1,701 @@ +From 19a30e151b65f42e74db2a97f79ce21ce23d7c7c Mon Sep 17 00:00:00 2001 +From: John Kacur +Date: Mon, 25 Nov 2019 15:06:12 +0100 +Subject: [PATCH] rt-tests: Add SPDX tags V2 + +Add SPDX tags instead of having out-of-date and incomplete licences at +the top of files + +Audited again to make sure that GPL-2.0-only is used where appropriate +and not GPL-2.0-or-later (and the other way around) + +Signed-off-by: John Kacur +--- + src/backfire/backfire.c | 17 +-------------- + src/cyclictest/cyclictest.c | 5 +---- + src/cyclictest/rt_numa.h | 1 + + src/hackbench/hackbench.c | 1 + + src/hwlatdetect/hwlatdetect.py | 8 ++----- + src/include/bionic.h | 1 + + src/include/error.h | 1 + + src/include/pip_stress.h | 1 + + src/include/rt-get_cpu.h | 1 + + src/include/rt-sched.h | 24 +++++---------------- + src/include/rt-utils.h | 1 + + src/lib/error.c | 1 + + src/lib/rt-get_cpu.c | 1 + + src/lib/rt-sched.c | 25 ++++++---------------- + src/lib/rt-utils.c | 1 + + src/pi_tests/classic_pi.c | 22 ++++--------------- + src/pi_tests/pi_stress.c | 22 ++++--------------- + src/pi_tests/pip_stress.c | 14 +----------- + src/pi_tests/sigtest.c | 22 ++++--------------- + src/pi_tests/tst-mutexpi10.c | 27 ++++++------------------ + src/pmqtest/pmqtest.c | 16 +------------- + src/ptsematest/ptsematest.c | 17 +-------------- + src/queuelat/determine_maximum_mpps.sh | 3 +++ + src/queuelat/get_cpuinfo_mhz.sh | 3 +++ + src/queuelat/queuelat.c | 8 +++++++ + src/queuelat/targeted-ipi/targeted-ipi.c | 7 ++++++ + src/rt-migrate-test/rt-migrate-test.c | 19 +---------------- + src/sched_deadline/cyclicdeadline.c | 8 +++++++ + src/sched_deadline/deadline_test.c | 24 ++++++--------------- + src/signaltest/signaltest.c | 2 ++ + src/sigwaittest/sigwaittest.c | 2 ++ + src/ssdd/ssdd.c | 12 +++++------ + src/svsematest/svsematest.c | 16 ++------------ + 33 files changed, 95 insertions(+), 238 deletions(-) + +diff --git a/src/backfire/backfire.c b/src/backfire/backfire.c +index a8ac9f5e2b28..81a31d49f47b 100644 +--- a/src/backfire/backfire.c ++++ b/src/backfire/backfire.c +@@ -1,22 +1,7 @@ ++// SPDX-License-Identifier: GPL-2.0-or-later + /* + * backfire - send signal back to caller +- * + * Copyright (C) 2007 Carsten Emde +- * +- * This program is free software; you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation either version 2 of the License, or +- * (at your option) any later version. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program; if not, write to the Free Software +- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, +- * USA. + */ + + #include +diff --git a/src/cyclictest/cyclictest.c b/src/cyclictest/cyclictest.c +index 1c515ae1354c..beac9a3ce946 100644 +--- a/src/cyclictest/cyclictest.c ++++ b/src/cyclictest/cyclictest.c +@@ -1,3 +1,4 @@ ++// SPDX-License-Identifier: GPL-2.0-only + /* + * High resolution timer test software + * +@@ -6,10 +7,6 @@ + * (C) 2008-2012 Clark Williams + * (C) 2005-2007 Thomas Gleixner + * +- * This program is free software; you can redistribute it and/or +- * modify it under the terms of the GNU General Public License Version +- * 2 as published by the Free Software Foundation. +- * + */ + #include + #include +diff --git a/src/cyclictest/rt_numa.h b/src/cyclictest/rt_numa.h +index 983502d34c94..1f7c5a482150 100644 +--- a/src/cyclictest/rt_numa.h ++++ b/src/cyclictest/rt_numa.h +@@ -1,3 +1,4 @@ ++// SPDX-License-Identifier: GPL-2.0-or-later + /* + * A numa library for cyclictest. + * The functions here are designed to work whether cyclictest has been +diff --git a/src/hackbench/hackbench.c b/src/hackbench/hackbench.c +index ba804f519950..5a883d341f2e 100644 +--- a/src/hackbench/hackbench.c ++++ b/src/hackbench/hackbench.c +@@ -1,3 +1,4 @@ ++// SPDX-License-Identifier: GPL-2.0-or-later + /* + * This is the latest version of hackbench.c, that tests scheduler and + * unix-socket (or pipe) performance. +diff --git a/src/hwlatdetect/hwlatdetect.py b/src/hwlatdetect/hwlatdetect.py +index c11a6f8ea5b1..12228f45f852 100755 +--- a/src/hwlatdetect/hwlatdetect.py ++++ b/src/hwlatdetect/hwlatdetect.py +@@ -1,14 +1,10 @@ + #!/usr/bin/python3 + ++# SPDX-License-Identifier: GPL-2.0-only ++ + # (C) 2018,2019 Clark Williams + # (C) 2015,2016 Clark Williams + # (C) 2009 Clark Williams +-# +-# This program is free software; you can redistribute it and/or +-# modify it under the terms of the GNU General Public License Version 2 +-# as published by the Free Software Foundation. +- +- + + import sys + import os +diff --git a/src/include/bionic.h b/src/include/bionic.h +index 54f9c54b0824..e0433437f5d2 100644 +--- a/src/include/bionic.h ++++ b/src/include/bionic.h +@@ -1,3 +1,4 @@ ++// SPDX-License-Identifier: GPL-2.0-or-later + #ifndef BIONIC_H + #define BIONIC_H + +diff --git a/src/include/error.h b/src/include/error.h +index 4acff4952dd6..d205e49ff041 100644 +--- a/src/include/error.h ++++ b/src/include/error.h +@@ -1,3 +1,4 @@ ++// SPDX-License-Identifier: GPL-2.0-or-later + #ifndef __ERROR_H + #define __ERROR_H + +diff --git a/src/include/pip_stress.h b/src/include/pip_stress.h +index 8ed24522851c..ee8b545ab117 100644 +--- a/src/include/pip_stress.h ++++ b/src/include/pip_stress.h +@@ -1,3 +1,4 @@ ++// SPDX-License-Identifier: GPL-2.0-or-later + #ifndef __PIP_STRESS_H + #define __PIP_STRESS_H + +diff --git a/src/include/rt-get_cpu.h b/src/include/rt-get_cpu.h +index 15d05fcb15fa..74bf8f0fac25 100644 +--- a/src/include/rt-get_cpu.h ++++ b/src/include/rt-get_cpu.h +@@ -1,3 +1,4 @@ ++// SPDX-License-Identifier: GPL-2.0-or-later + #ifndef __RT_GET_CPU_H + #define __RT_GET_CPU_H + #include +diff --git a/src/include/rt-sched.h b/src/include/rt-sched.h +index 679c4bd10ae2..80171c76e0ee 100644 +--- a/src/include/rt-sched.h ++++ b/src/include/rt-sched.h +@@ -1,23 +1,9 @@ ++// SPDX-License-Identifier: GPL-2.0-or-later + /* +- rt-sched.h - sched_setattr() and sched_getattr() API +- +- (C) Dario Faggioli , 2009, 2010 +- Copyright (C) 2014 BMW Car IT GmbH, Daniel Wagner , 2009, 2010 ++ * Copyright (C) 2014 BMW Car IT GmbH, Daniel Wagner + * +diff --git a/src/lib/rt-get_cpu.c b/src/lib/rt-get_cpu.c +index 83430dd4d068..608cd9bb76e0 100644 +--- a/src/lib/rt-get_cpu.c ++++ b/src/lib/rt-get_cpu.c +@@ -1,3 +1,4 @@ ++// SPDX-License-Identifier: GPL-2.0-or-later + /* + * Copyright (C) 2009 John Kacur + */ +diff --git a/src/lib/rt-sched.c b/src/lib/rt-sched.c +index 4a8e3c42b49f..2aaf02d42aee 100644 +--- a/src/lib/rt-sched.c ++++ b/src/lib/rt-sched.c +@@ -1,23 +1,10 @@ ++// SPDX-License-Identifier: GPL-2.0-or-later + /* +- rt-sched.h - sched_setattr() and sched_getattr() API +- +- (C) Dario Faggioli , 2009, 2010 +- Copyright (C) 2014 BMW Car IT GmbH, Daniel Wagner , 2009, 2010 ++ * Copyright (C) 2014 BMW Car IT GmbH, Daniel Wagner + * Copyright (C) 2010 Clark Williams +diff --git a/src/pi_tests/classic_pi.c b/src/pi_tests/classic_pi.c +index 695ee4c4bd03..64af8890276f 100644 +--- a/src/pi_tests/classic_pi.c ++++ b/src/pi_tests/classic_pi.c +@@ -1,22 +1,8 @@ ++// SPDX-License-Identifier: GPL-2.0-or-later + /* +- classic_pi - Classic Priority Inversion deadlock test case +- +- Copyright (C) 2006, 2007 Clark Williams +- +- This program is free software; you can redistribute it and/or modify +- it under the terms of the GNU General Public License as published by +- the Free Software Foundation; either version 2 of the License, or +- (at your option) any later version. +- +- This program is distributed in the hope that it will be useful, +- but WITHOUT ANY WARRANTY; without even the implied warranty of +- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- GNU General Public License for more details. +- +- You should have received a copy of the GNU General Public License +- along with this program; if not, write to the Free Software +- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 +- USA */ ++ * classic_pi - Classic Priority Inversion deadlock test case ++ * Copyright (C) 2006, 2007 Clark Williams ++ */ + + /* This program tests Priority Inheritance mutexes and their ability + to avoid Priority Inversion deadlocks +diff --git a/src/pi_tests/pi_stress.c b/src/pi_tests/pi_stress.c +index 1286370c474b..7fa98dfb9ad4 100644 +--- a/src/pi_tests/pi_stress.c ++++ b/src/pi_tests/pi_stress.c +@@ -1,22 +1,8 @@ ++// SPDX-License-Identifier: GPL-2.0-or-later + /* +- pi_stress - Priority Inheritance stress test +- +- Copyright (C) 2006, 2007 Clark Williams +- +- This program is free software; you can redistribute it and/or modify +- it under the terms of the GNU General Public License as published by +- the Free Software Foundation; either version 2 of the License, or +- (at your option) any later version. +- +- This program is distributed in the hope that it will be useful, +- but WITHOUT ANY WARRANTY; without even the implied warranty of +- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- GNU General Public License for more details. +- +- You should have received a copy of the GNU General Public License +- along with this program; if not, write to the Free Software +- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 +- USA */ ++ * pi_stress - Priority Inheritance stress test ++ * Copyright (C) 2006, 2007 Clark Williams ++ */ + + /* This program stress tests pthreads priority inheritance mutexes + +diff --git a/src/pi_tests/pip_stress.c b/src/pi_tests/pip_stress.c +index e6cf0ce940ca..c9dbd992e15d 100644 +--- a/src/pi_tests/pip_stress.c ++++ b/src/pi_tests/pip_stress.c +@@ -1,20 +1,8 @@ ++// SPDX-License-Identifier: GPL-2.0-or-later + /* + Pip stress - Priority Inheritance with processes + + Copyright (C) 2009, John Kacur +- +- This program is free software: you can redistribute it and/or modify +- it under the terms of the GNU General Public License as published by +- the Free Software Foundation, either version 2 of the License, or +- (at your option) any later version. +- +- This program is distributed in the hope that it will be useful, +- but WITHOUT ANY WARRANTY; without even the implied warranty of +- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- GNU General Public License for more details. +- +- You should have received a copy of the GNU General Public License +- along with this program. If not, see . + */ + + /* +diff --git a/src/pi_tests/sigtest.c b/src/pi_tests/sigtest.c +index 0cf520c01335..17dd0d43bdc6 100644 +--- a/src/pi_tests/sigtest.c ++++ b/src/pi_tests/sigtest.c +@@ -1,22 +1,8 @@ ++// SPDX-License-Identifier: GPL-2.0-or-later + /* +- sigtest - simple little program to verify signal behavior +- +- Copyright (C) 2006, 2007 Clark Williams +- +- This program is free software; you can redistribute it and/or modify +- it under the terms of the GNU General Public License as published by +- the Free Software Foundation; either version 2 of the License, or +- (at your option) any later version. +- +- This program is distributed in the hope that it will be useful, +- but WITHOUT ANY WARRANTY; without even the implied warranty of +- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- GNU General Public License for more details. +- +- You should have received a copy of the GNU General Public License +- along with this program; if not, write to the Free Software +- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 +- USA */ ++ * sigtest - simple little program to verify signal behavior ++ * Copyright (C) 2006, 2007 Clark Williams ++*/ + + #include + #include +diff --git a/src/pi_tests/tst-mutexpi10.c b/src/pi_tests/tst-mutexpi10.c +index a63ea23ba621..97a345edd26e 100644 +--- a/src/pi_tests/tst-mutexpi10.c ++++ b/src/pi_tests/tst-mutexpi10.c +@@ -1,25 +1,10 @@ ++// SPDX-License-Identifier: LGPL-2.1-or-later + /* +- Classic Priority Inversion deadlock test case +- +- Copyright (C) 2006 Free Software Foundation, Inc. +- This file is part of the GNU C Library. +- Contributed by Clark Williams, 2006 +- +- The GNU C Library is free software; you can redistribute it and/or +- modify it under the terms of the GNU Lesser General Public License as +- published by the Free Software Foundation; either version 2.1 of the +- License, or (at your option) any later version. +- +- The GNU C Library is distributed in the hope that it will be useful, +- but WITHOUT ANY WARRANTY; without even the implied warranty of +- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +- Lesser General Public License for more details. +- +- You should have received a copy of the GNU Lesser General Public +- License along with the GNU C Library; see the file COPYING.LIB. If not, +- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, +- Boston, MA 02111-1307, USA. */ +- ++ * Classic Priority Inversion deadlock test case ++ * Copyright (C) 2006 Free Software Foundation, Inc. ++ * This file is part of the GNU C Library. ++ * Contributed by Clark Williams, 2006 ++ */ + + /* This program tests Priority Inheritance mutexes and their ability + to avoid Priority Inversion deadlocks +diff --git a/src/pmqtest/pmqtest.c b/src/pmqtest/pmqtest.c +index 3ce799bd6319..3ce29252b9a2 100644 +--- a/src/pmqtest/pmqtest.c ++++ b/src/pmqtest/pmqtest.c +@@ -1,22 +1,8 @@ ++// SPDX-License-Identifier: GPL-2.0-or-later + /* + * pmqtest.c + * + * Copyright (C) 2009 Carsten Emde +- * +- * This program is free software; you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation either version 2 of the License, or +- * (at your option) any later version. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program; if not, write to the Free Software +- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, +- * USA. + */ + + #include +diff --git a/src/ptsematest/ptsematest.c b/src/ptsematest/ptsematest.c +index 553759212ac9..78fa444c5578 100644 +--- a/src/ptsematest/ptsematest.c ++++ b/src/ptsematest/ptsematest.c +@@ -1,22 +1,7 @@ ++// SPDX-License-Identifier: GPL-2.0-or-later + /* + * ptsematest.c +- * + * Copyright (C) 2009 Carsten Emde +- * +- * This program is free software; you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation either version 2 of the License, or +- * (at your option) any later version. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program; if not, write to the Free Software +- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, +- * USA. + */ + + #include +diff --git a/src/queuelat/determine_maximum_mpps.sh b/src/queuelat/determine_maximum_mpps.sh +index 3acd6ba2e362..52d54c0f9065 100755 +--- a/src/queuelat/determine_maximum_mpps.sh ++++ b/src/queuelat/determine_maximum_mpps.sh +@@ -1,5 +1,8 @@ + #!/bin/bash + ++# SPDX-License-Identifier: GPL-2.0-or-later ++# Copyright (C) 2018 Marcelo Tosatti ++ + # A script to determine the maximum mpps. Logic: + # Increase mpps in 0.5 units + # +diff --git a/src/queuelat/get_cpuinfo_mhz.sh b/src/queuelat/get_cpuinfo_mhz.sh +index fb5158f31040..eafdd9577424 100755 +--- a/src/queuelat/get_cpuinfo_mhz.sh ++++ b/src/queuelat/get_cpuinfo_mhz.sh +@@ -1,5 +1,8 @@ + #!/bin/bash + ++# SPDX-License-Identifier: GPL-2.0-or-later ++# Copyright (C) 2018 Marcelo Tosatti ++ + mhz=`cat /proc/cpuinfo | grep "cpu MHz" | uniq | cut -f 3 -d " "` + echo $mhz + +diff --git a/src/queuelat/queuelat.c b/src/queuelat/queuelat.c +index a5525e41776a..cccb50ef0cc4 100644 +--- a/src/queuelat/queuelat.c ++++ b/src/queuelat/queuelat.c +@@ -1,3 +1,11 @@ ++// SPDX-License-Identifier: GPL-2.0-or-later ++ ++/* ++ * Copyright (C) 2018 Marcelo Tosatti ++ * Copyright (C) 2019 John Kacur ++ * Copyright (C) 2019 Clark Williams ++ */ ++ + #include + #include + #include +diff --git a/src/queuelat/targeted-ipi/targeted-ipi.c b/src/queuelat/targeted-ipi/targeted-ipi.c +index 4a10e0b24ecb..be2b153260c5 100644 +--- a/src/queuelat/targeted-ipi/targeted-ipi.c ++++ b/src/queuelat/targeted-ipi/targeted-ipi.c +@@ -1,3 +1,10 @@ ++// SPDX-License-Identifier: GPL-2.0-or-later ++/* ++ * Copyright (C) 2018 Marcelo Tosatti ++ * Copyright (C) 2019 John Kacur ++ * Copyright (C) 2019 Clark Williams ++ */ ++ + #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt + + #include +diff --git a/src/rt-migrate-test/rt-migrate-test.c b/src/rt-migrate-test/rt-migrate-test.c +index f0a285d1d45f..4863238edeb4 100644 +--- a/src/rt-migrate-test/rt-migrate-test.c ++++ b/src/rt-migrate-test/rt-migrate-test.c +@@ -1,24 +1,7 @@ ++// SPDX-License-Identifier: GPL-2.0-only + /* + * rt-migrate-test.c +- * + * Copyright (C) 2007-2009 Steven Rostedt +- * +- * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +- * +- * This program is free software; you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation; version 2 of the License (not later!) +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program; if not, write to the Free Software +- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +- * +- * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + */ + #include + #ifndef __USE_XOPEN2K +diff --git a/src/sched_deadline/cyclicdeadline.c b/src/sched_deadline/cyclicdeadline.c +index 7b5e8b36c4ea..a08e28e73c42 100644 +--- a/src/sched_deadline/cyclicdeadline.c ++++ b/src/sched_deadline/cyclicdeadline.c +@@ -1,3 +1,11 @@ ++// SPDX-License-Identifier: GPL-2.0-only ++ ++/* ++ * Copyright (C) 2016 Red Hat Inc, Steven Rostedt ++ * Copyright (C) 2019 John Kacur ++ * Copyright (C) 2019 Clark Williams ++ */ ++ + #include + #include + #include +diff --git a/src/sched_deadline/deadline_test.c b/src/sched_deadline/deadline_test.c +index 5b5f40dbb74d..4cef2609912e 100644 +--- a/src/sched_deadline/deadline_test.c ++++ b/src/sched_deadline/deadline_test.c +@@ -1,22 +1,12 @@ ++// SPDX-License-Identifier: GPL-2.0-only ++ + /* + * Copyright (C) 2016 Red Hat Inc, Steven Rostedt +- * +- * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +- * +- * This program is free software; you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation; version 2 of the License (not later!) +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program; if not, see +- * +- * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +- * ++ * Copyright (C) 2019 John Kacur ++ * Copyright (C) 2019 Clark Williams ++ */ ++ ++/* + * deadline_test.c + * + * This program is used to test the deadline scheduler (SCHED_DEADLINE tasks). +diff --git a/src/signaltest/signaltest.c b/src/signaltest/signaltest.c +index 4c952561d7f2..b5c86c5635cb 100644 +--- a/src/signaltest/signaltest.c ++++ b/src/signaltest/signaltest.c +@@ -1,3 +1,5 @@ ++// SPDX-License-Identifier: GPL-2.0-only ++ + /* + * RT signal roundtrip test software + * +diff --git a/src/sigwaittest/sigwaittest.c b/src/sigwaittest/sigwaittest.c +index 2d0c04132fa7..4678b68675b2 100644 +--- a/src/sigwaittest/sigwaittest.c ++++ b/src/sigwaittest/sigwaittest.c +@@ -1,3 +1,5 @@ ++// SPDX-License-Identifier: GPL-2.0-or-later ++ + /* + * sigwaittest.c + * +diff --git a/src/ssdd/ssdd.c b/src/ssdd/ssdd.c +index 080ed17107a8..f165da96e23a 100644 +--- a/src/ssdd/ssdd.c ++++ b/src/ssdd/ssdd.c +@@ -1,3 +1,9 @@ ++// SPDX-License-Identifier: GPL-2.0-or-later ++ ++/* ++ * Copyright (C) 2019 Joe Korty ++ */ ++ + /* + * Have a tracer do a bunch of PTRACE_SINGLESTEPs against + * a tracee as fast as possible. Create several of these +@@ -16,12 +22,6 @@ + * The tracer waits on each PTRACE_SINGLESTEP with a waitpid(2) + * and checks that waitpid's return values for correctness. + * +- * This program was originally written by +- * Joe Korty +- * This program is free software; you can redistribute it and / or modify +- * it under the terms of the GNU General Public License Version 2 +- * of the licence, or (at your option) any later version +- * see COPYING for more information + */ + #include + #include +diff --git a/src/svsematest/svsematest.c b/src/svsematest/svsematest.c +index 15e36af76288..7c15393fe1be 100644 +--- a/src/svsematest/svsematest.c ++++ b/src/svsematest/svsematest.c +@@ -1,22 +1,10 @@ ++// SPDX-License-Identifier: GPL-2.0-or-later ++ + /* + * svsematest.c + * + * Copyright (C) 2009 Carsten Emde + * +- * This program is free software; you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation either version 2 of the License, or +- * (at your option) any later version. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program; if not, write to the Free Software +- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, +- * USA. + */ + + #include +-- +2.20.1 + diff --git a/SOURCES/rt-tests-Makefile-Change-syntax-for-python3.patch b/SOURCES/rt-tests-Makefile-Change-syntax-for-python3.patch deleted file mode 100644 index f1902cd..0000000 --- a/SOURCES/rt-tests-Makefile-Change-syntax-for-python3.patch +++ /dev/null @@ -1,29 +0,0 @@ -From 026f2a31c505b244bbb4a811ba5329225e3f66f1 Mon Sep 17 00:00:00 2001 -From: John Kacur -Date: Wed, 13 Jun 2018 01:53:11 +0200 -Subject: [PATCH] rt-tests: Makefile: Change syntax for python3 - -When testing for the PYLIB version, we need to explicitly -specify python3 and fix the print syntax - -Signed-off-by: John Kacur ---- - Makefile | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/Makefile b/Makefile -index cffb255d96d1..8b08385890fe 100644 ---- a/Makefile -+++ b/Makefile -@@ -33,7 +33,7 @@ CFLAGS ?= -Wall -Wno-nonnull - CPPFLAGS += -D_GNU_SOURCE -Isrc/include - LDFLAGS ?= - --PYLIB ?= $(shell python -c 'import distutils.sysconfig; print distutils.sysconfig.get_python_lib()') -+PYLIB ?= $(shell python3 -c 'import distutils.sysconfig; print (distutils.sysconfig.get_python_lib())') - - ifndef DEBUG - CFLAGS += -O2 -g --- -2.14.4 - diff --git a/SOURCES/rt-tests-Makefile-ssdd-Incoroporate-ssdd-into-the-rt.patch b/SOURCES/rt-tests-Makefile-ssdd-Incoroporate-ssdd-into-the-rt.patch deleted file mode 100644 index 1270dd0..0000000 --- a/SOURCES/rt-tests-Makefile-ssdd-Incoroporate-ssdd-into-the-rt.patch +++ /dev/null @@ -1,48 +0,0 @@ -From 524aebc39039e0035a768b423ad66c4d03098a35 Mon Sep 17 00:00:00 2001 -From: John Kacur -Date: Mon, 14 Jan 2019 21:39:47 +0100 -Subject: [PATCH 2/5] rt-tests: Makefile: ssdd: Incoroporate ssdd into the - rt-tests Makefile - -Incoroporate ssdd into the rt-tests build - -Signed-off-by: John Kacur ---- - Makefile | 7 ++++++- - 1 file changed, 6 insertions(+), 1 deletion(-) - -diff --git a/Makefile b/Makefile -index 06f399cc629d..16cd2f9bdd03 100644 ---- a/Makefile -+++ b/Makefile -@@ -16,7 +16,8 @@ sources = cyclictest.c \ - svsematest.c \ - cyclicdeadline.c \ - deadline_test.c \ -- queuelat.c -+ queuelat.c \ -+ ssdd.c - - TARGETS = $(sources:.c=) - LIBS = -lrt -lpthread -@@ -86,6 +87,7 @@ VPATH += src/lib: - VPATH += src/hackbench: - VPATH += src/sched_deadline: - VPATH += src/queuelat: -+VPATH += src/ssdd: - - $(OBJDIR)/%.o: %.c | $(OBJDIR) - $(CC) -D VERSION=$(VERSION) -c $< $(CFLAGS) $(CPPFLAGS) -o $@ -@@ -146,6 +148,9 @@ hackbench: $(OBJDIR)/hackbench.o - queuelat: $(OBJDIR)/queuelat.o $(OBJDIR)/librttest.a - $(CC) $(CFLAGS) $(LDFLAGS) -o $@ $< $(LIBS) $(RTTESTLIB) - -+ssdd: $(OBJDIR)/ssdd.o $(OBJDIR)/librttest.a -+ $(CC) $(CFLAGS) $(LDFLAGS) -o $@ $< $(LIBS) $(RTTESTLIB) -+ - LIBOBJS =$(addprefix $(OBJDIR)/,error.o rt-get_cpu.o rt-sched.o rt-utils.o) - $(OBJDIR)/librttest.a: $(LIBOBJS) - $(AR) rcs $@ $^ --- -2.20.1 - diff --git a/SOURCES/rt-tests-Remove-install-and-build-of-backfire-and-sendme.patch b/SOURCES/rt-tests-Remove-install-and-build-of-backfire-and-sendme.patch deleted file mode 100644 index 914e00a..0000000 --- a/SOURCES/rt-tests-Remove-install-and-build-of-backfire-and-sendme.patch +++ /dev/null @@ -1,64 +0,0 @@ -From 1b68647387067fea4779a1c80d4155be2187ed21 Mon Sep 17 00:00:00 2001 -From: John Kacur -Date: Mon, 8 Oct 2018 15:11:43 +0200 -Subject: [PATCH] rt-tests: Remove install and build of backfire and sendme - -Leave the source code in place but remove the install and build of -backfire and sendme for now as it is broken - -Signed-off-by: John Kacur ---- - Makefile | 9 --------- - 1 file changed, 9 deletions(-) - -diff --git a/Makefile b/Makefile -index 5447ca9de108..26dd96f0c5fd 100644 ---- a/Makefile -+++ b/Makefile -@@ -11,7 +11,6 @@ sources = cyclictest.c \ - pmqtest.c \ - ptsematest.c \ - rt-migrate-test.c \ -- sendme.c \ - signaltest.c \ - sigwaittest.c \ - svsematest.c \ -@@ -83,7 +82,6 @@ VPATH += src/ptsematest: - VPATH += src/sigwaittest: - VPATH += src/svsematest: - VPATH += src/pmqtest: --VPATH += src/backfire: - VPATH += src/lib: - VPATH += src/hackbench: - VPATH += src/sched_deadline: -@@ -139,9 +137,6 @@ svsematest: $(OBJDIR)/svsematest.o $(OBJDIR)/librttest.a - pmqtest: $(OBJDIR)/pmqtest.o $(OBJDIR)/librttest.a - $(CC) $(CFLAGS) $(LDFLAGS) -o $@ $< $(LIBS) $(RTTESTLIB) $(EXTRA_LIBS) - --sendme: $(OBJDIR)/sendme.o $(OBJDIR)/librttest.a -- $(CC) $(CFLAGS) $(LDFLAGS) -o $@ $< $(LIBS) $(RTTESTLIB) $(EXTRA_LIBS) -- - pip_stress: $(OBJDIR)/pip_stress.o $(OBJDIR)/librttest.a - $(CC) $(CFLAGS) $(LDFLAGS) -o $@ $< $(LIBS) $(RTTESTLIB) - -@@ -180,9 +175,6 @@ install: all install_hwlatdetect - mkdir -p "$(DESTDIR)$(bindir)" "$(DESTDIR)$(mandir)/man4" - mkdir -p "$(DESTDIR)$(srcdir)" "$(DESTDIR)$(mandir)/man8" - cp $(TARGETS) "$(DESTDIR)$(bindir)" -- install -D -m 644 src/backfire/backfire.c "$(DESTDIR)$(srcdir)/backfire/backfire.c" -- install -m 644 src/backfire/Makefile "$(DESTDIR)$(srcdir)/backfire/Makefile" -- gzip -c src/backfire/backfire.4 >"$(DESTDIR)$(mandir)/man4/backfire.4.gz" - gzip -c src/cyclictest/cyclictest.8 >"$(DESTDIR)$(mandir)/man8/cyclictest.8.gz" - gzip -c src/pi_tests/pi_stress.8 >"$(DESTDIR)$(mandir)/man8/pi_stress.8.gz" - gzip -c src/ptsematest/ptsematest.8 >"$(DESTDIR)$(mandir)/man8/ptsematest.8.gz" -@@ -190,7 +182,6 @@ install: all install_hwlatdetect - gzip -c src/sigwaittest/sigwaittest.8 >"$(DESTDIR)$(mandir)/man8/sigwaittest.8.gz" - gzip -c src/svsematest/svsematest.8 >"$(DESTDIR)$(mandir)/man8/svsematest.8.gz" - gzip -c src/pmqtest/pmqtest.8 >"$(DESTDIR)$(mandir)/man8/pmqtest.8.gz" -- gzip -c src/backfire/sendme.8 >"$(DESTDIR)$(mandir)/man8/sendme.8.gz" - gzip -c src/hackbench/hackbench.8 >"$(DESTDIR)$(mandir)/man8/hackbench.8.gz" - gzip -c src/signaltest/signaltest.8 >"$(DESTDIR)$(mandir)/man8/signaltest.8.gz" - gzip -c src/pi_tests/pip_stress.8 >"$(DESTDIR)$(mandir)/man8/pip_stress.8.gz" --- -2.14.4 - diff --git a/SOURCES/rt-tests-Set-affinity-before-applying-numa.patch b/SOURCES/rt-tests-Set-affinity-before-applying-numa.patch new file mode 100644 index 0000000..6ad027e --- /dev/null +++ b/SOURCES/rt-tests-Set-affinity-before-applying-numa.patch @@ -0,0 +1,110 @@ +From e5f59a301e6585145c5b738a4e9327e943e16404 Mon Sep 17 00:00:00 2001 +From: John Kacur +Date: Fri, 6 Sep 2019 20:59:42 +0200 +Subject: [PATCH 1/8] rt-tests: Set affinity before applying numa + +There are three changes here. + +1. If affinity is not specified, but numa is available, then numa +implies AFFINITY_USEALL. + +2. Move setting affinity before applying numa +We need to set the affinity before applying numa, so that we don't +apply numa settings to cpus we don't intend to run on. + +3. Allow a greater number of threads than cpus to run in a round robin +fashion in the case of numa. + +Signed-off-by: John Kacur +--- + src/cyclictest/cyclictest.c | 34 +++++++++++++++++++++------------- + 1 file changed, 21 insertions(+), 13 deletions(-) + +diff --git a/src/cyclictest/cyclictest.c b/src/cyclictest/cyclictest.c +index d101e3d14854..52f93da7d074 100644 +--- a/src/cyclictest/cyclictest.c ++++ b/src/cyclictest/cyclictest.c +@@ -1349,8 +1349,12 @@ static void process_options (int argc, char *argv[], int max_cpus) + /* if smp wasn't requested, test for numa automatically */ + if (!smp) { + #ifdef NUMA +- if (numa_available() != -1) ++ if (numa_available() != -1) { + numa = 1; ++ if (setaffinity == AFFINITY_UNSPECIFIED) { ++ setaffinity = AFFINITY_USEALL; ++ } ++ } + #else + warn("cyclictest was not built with the numa option\n"); + numa = 0; +@@ -1716,6 +1720,7 @@ int main(int argc, char **argv) + sigset_t sigset; + int signum = SIGALRM; + int mode; ++ int cpu; + int max_cpus = sysconf(_SC_NPROCESSORS_ONLN); + int i, ret = -1; + int status; +@@ -1877,6 +1882,16 @@ int main(int argc, char **argv) + if (status != 0) + fatal("error from pthread_attr_init for thread %d: %s\n", i, strerror(status)); + ++ switch (setaffinity) { ++ case AFFINITY_UNSPECIFIED: cpu = -1; break; ++ case AFFINITY_SPECIFIED: ++ cpu = cpu_for_thread(i, max_cpus); ++ if (verbose) ++ printf("Thread %d using cpu %d.\n", i, cpu); ++ break; ++ case AFFINITY_USEALL: cpu = i % max_cpus; break; ++ } ++ + node = -1; + if (numa) { + void *stack; +@@ -1884,7 +1899,7 @@ int main(int argc, char **argv) + size_t stksize; + + /* find the memory node associated with the cpu i */ +- node = rt_numa_numa_node_of_cpu(i); ++ node = rt_numa_numa_node_of_cpu(cpu); + + /* get the stack size set for for this thread */ + if (pthread_attr_getstack(&attr, &currstk, &stksize)) +@@ -1895,7 +1910,7 @@ int main(int argc, char **argv) + stksize = PTHREAD_STACK_MIN * 2; + + /* allocate memory for a stack on appropriate node */ +- stack = rt_numa_numa_alloc_onnode(stksize, node, i); ++ stack = rt_numa_numa_alloc_onnode(stksize, node, cpu); + + /* touch the stack pages to pre-fault them in */ + memset(stack, 0, stksize); +@@ -1965,20 +1980,13 @@ int main(int argc, char **argv) + interval += distance; + if (verbose) + printf("Thread %d Interval: %d\n", i, interval); ++ + par->max_cycles = max_cycles; + par->stats = stat; + par->node = node; + par->tnum = i; +- switch (setaffinity) { +- case AFFINITY_UNSPECIFIED: par->cpu = -1; break; +- case AFFINITY_SPECIFIED: +- par->cpu = cpu_for_thread(i, max_cpus); +- if (verbose) +- printf("Thread %d using cpu %d.\n", i, +- par->cpu); +- break; +- case AFFINITY_USEALL: par->cpu = i % max_cpus; break; +- } ++ par->cpu = cpu; ++ + stat->min = 1000000; + stat->max = 0; + stat->avg = 0.0; +-- +2.20.1 + diff --git a/SOURCES/rt-tests-cyclicdeadline-Add-a-simple-manpage.patch b/SOURCES/rt-tests-cyclicdeadline-Add-a-simple-manpage.patch new file mode 100644 index 0000000..7e8fcf5 --- /dev/null +++ b/SOURCES/rt-tests-cyclicdeadline-Add-a-simple-manpage.patch @@ -0,0 +1,90 @@ +From f90391d1907279150c15c5e0afeeb4291943f636 Mon Sep 17 00:00:00 2001 +From: John Kacur +Date: Thu, 16 Jan 2020 17:59:26 +0100 +Subject: [PATCH] rt-tests: cyclicdeadline: Add a simple manpage for + cyclicdeadline + +- Add a simple manpage for cyclicdeadline +- Install it from the Makefile + +Signed-off-by: John Kacur +--- + Makefile | 1 + + src/sched_deadline/cyclicdeadline.8 | 53 +++++++++++++++++++++++++++++ + 2 files changed, 54 insertions(+) + create mode 100644 src/sched_deadline/cyclicdeadline.8 + +diff --git a/Makefile b/Makefile +index 552b3fe885cc..e2142ba3f4e9 100644 +--- a/Makefile ++++ b/Makefile +@@ -193,6 +193,7 @@ install: all install_hwlatdetect + gzip -c src/queuelat/queuelat.8 >"$(DESTDIR)$(mandir)/man8/queuelat.8.gz" + gzip -c src/sched_deadline/deadline_test.8 >"$(DESTDIR)$(mandir)/man8/deadline_test.8.gz" + gzip -c src/ssdd/ssdd.8 >"$(DESTDIR)$(mandir)/man8/ssdd.8.gz" ++ gzip -c src/sched_deadline/cyclicdeadline.8 >"$(DESTDIR)$(mandir)/man8/cyclicdeadline.8.gz" + + .PHONY: install_hwlatdetect + install_hwlatdetect: hwlatdetect +diff --git a/src/sched_deadline/cyclicdeadline.8 b/src/sched_deadline/cyclicdeadline.8 +new file mode 100644 +index 000000000000..91766fb391c4 +--- /dev/null ++++ b/src/sched_deadline/cyclicdeadline.8 +@@ -0,0 +1,53 @@ ++.\" Hey, EMACS: -*- nroff -*- ++.TH CYCLICDEADLINE 8 "January 16, 2020" ++.\" Please adjust this date whenever revising the manpage. ++.\" ++.\" Some roff macros, for reference: ++.\" .nh disable hyphenation ++.\" .hy enable hyphenation ++.\" .ad l left justify ++.\" .ad b justify to both left and right margins ++.\" .nf disable filling ++.\" .fi enable filling ++.\" .br insert line break ++.\" .sp insert n+1 empty lines ++.\" for manpage-specific macros, see man(7) ++.SH NAME ++cyclicdeadline \- This program is used to test the deadline scheduler (SCHED_DEADLINE) using a cyclictest style program ++.PP ++.SH SYNOPSIS ++.B cyclicdeadline ++.RI "[-ha] [-c cpulist] [-i interval] [-s step] [-t nr_threads] [-D duration] ++.PP ++.SH DESCRIPTION ++.B cyclicdeadline ++is a cyclictest style program for testing the deadline scheduler ++.PP ++.SH OPTIONS ++.TP ++.B \-h ++Show this help menu ++.TP ++.B \-a ++Use all CPUs ++.TP ++.B \-c cpulist ++Comma / hypen separated list of CPUs to run deadline tasks on ++.TP ++.B \-i interval ++The shortest deadline for the tasks in us. (default 1000us) ++.TP ++.B \-s step ++The amount to increase the deadline for each task in us. (default 500us) ++.TP ++.B \-t nr_threads ++The number of threads to run as deadline (default 1) ++.TP ++.B \-D time ++Specify a length for the test to run ++.br ++Append 'm', 'h', or 'd' to specify minutes, hours, or days ++.SH AUTHOR ++cyclicdeadline was written by Steven Rostedt ++.PP ++This manual page was written by John Kacur +-- +2.20.1 + diff --git a/SOURCES/rt-tests-cyclictest-Assume-libnuma-version-2-by-defa.patch b/SOURCES/rt-tests-cyclictest-Assume-libnuma-version-2-by-defa.patch new file mode 100644 index 0000000..cd97daf --- /dev/null +++ b/SOURCES/rt-tests-cyclictest-Assume-libnuma-version-2-by-defa.patch @@ -0,0 +1,32 @@ +From bb93611dd8248c0a4c05b9ccd9a93a78432044d7 Mon Sep 17 00:00:00 2001 +From: John Kacur +Date: Thu, 19 Sep 2019 20:19:17 +0200 +Subject: [PATCH 7/8] rt-tests: cyclictest: Assume libnuma version 2 by default + +Most distributions have used libnuma version 2 for awhile now, so make +it the default. + +This doesn't prevent people from defining it as version 1, or compiling +without numa. + +Signed-off-by: John Kacur +--- + src/cyclictest/rt_numa.h | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/cyclictest/rt_numa.h b/src/cyclictest/rt_numa.h +index e0f4b2e9d8b2..7adeb3c01324 100644 +--- a/src/cyclictest/rt_numa.h ++++ b/src/cyclictest/rt_numa.h +@@ -29,7 +29,7 @@ static int numa = 0; + #include + + #ifndef LIBNUMA_API_VERSION +-#define LIBNUMA_API_VERSION 1 ++#define LIBNUMA_API_VERSION 2 + #endif + + static void * +-- +2.20.1 + diff --git a/SOURCES/rt-tests-cyclictest-Don-t-allow-OPT_SYSTEM-with-OPT_POSIX_TIMERS.patch b/SOURCES/rt-tests-cyclictest-Don-t-allow-OPT_SYSTEM-with-OPT_POSIX_TIMERS.patch new file mode 100644 index 0000000..824937b --- /dev/null +++ b/SOURCES/rt-tests-cyclictest-Don-t-allow-OPT_SYSTEM-with-OPT_POSIX_TIMERS.patch @@ -0,0 +1,42 @@ +From 0bf35a2fb58177318353c3a2e02df5b20728d5b9 Mon Sep 17 00:00:00 2001 +From: John Kacur +Date: Mon, 16 Sep 2019 23:43:32 +0200 +Subject: [PATCH 5/8] rt-tests: cyclictest: Don't allow OPT_SYSTEM with + OPT_POSIX_TIMERS + +OPT_SYSTEM means use sys_nanosleep and sys_setitimer +if you try to combine it with OPT_POSIX_TIMERS, it breaks. + +cyclictest becomes unkillable with ctrl-C and only the first thread is +updated. + +Fix this by issuing a warning if the user tries to combine the two +options and then use clock_nanosleep. + +Reported-by: Tom Rix +Signed-off-by: John Kacur +--- + src/cyclictest/cyclictest.c | 7 +++++++ + 1 file changed, 7 insertions(+) + +diff --git a/src/cyclictest/cyclictest.c b/src/cyclictest/cyclictest.c +index 3a78912b34f8..6be0525822ca 100644 +--- a/src/cyclictest/cyclictest.c ++++ b/src/cyclictest/cyclictest.c +@@ -1353,6 +1353,13 @@ static void process_options (int argc, char *argv[], int max_cpus) + } + } + ++ if ((use_system == MODE_SYS_OFFSET) && (use_nanosleep == MODE_CYCLIC)) { ++ warn("The system option requires clock_nanosleep\n"); ++ warn("and is not compatible with posix_timers\n"); ++ warn("Using clock_nanosleep\n"); ++ use_nanosleep = MODE_CLOCK_NANOSLEEP; ++ } ++ + /* if smp wasn't requested, test for numa automatically */ + if (!smp) { + #ifdef NUMA +-- +2.20.1 + diff --git a/SOURCES/rt-tests-cyclictest-Fix-warning-cpu-may-be-used-uninitialized.patch b/SOURCES/rt-tests-cyclictest-Fix-warning-cpu-may-be-used-uninitialized.patch new file mode 100644 index 0000000..5501b51 --- /dev/null +++ b/SOURCES/rt-tests-cyclictest-Fix-warning-cpu-may-be-used-uninitialized.patch @@ -0,0 +1,33 @@ +From f70d5f0de62114cfcd8d8b5032138111730665e6 Mon Sep 17 00:00:00 2001 +From: John Kacur +Date: Mon, 16 Sep 2019 21:06:28 +0200 +Subject: [PATCH 4/8] =?UTF-8?q?rt-tests:=20cyclictest:=20Fix=20=20warning:?= + =?UTF-8?q?=20=E2=80=98cpu=E2=80=99=20may=20be=20used=20uninitialized?= +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Fix warning 'cpu' maybe uninitialized by giving it a default value in +the switch statement. Note, this is a false positive, but documenting +the default value in the switch statement isn't a bad thing. + +Signed-off-by: John Kacur +--- + src/cyclictest/cyclictest.c | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/src/cyclictest/cyclictest.c b/src/cyclictest/cyclictest.c +index 72fb35da3238..3a78912b34f8 100644 +--- a/src/cyclictest/cyclictest.c ++++ b/src/cyclictest/cyclictest.c +@@ -1897,6 +1897,7 @@ int main(int argc, char **argv) + printf("Thread %d using cpu %d.\n", i, cpu); + break; + case AFFINITY_USEALL: cpu = i % max_cpus; break; ++ default: cpu = -1; + } + + node = -1; +-- +2.20.1 + diff --git a/SOURCES/rt-tests-cyclictest-Get-a-snapshot-of-cyclictest.patch b/SOURCES/rt-tests-cyclictest-Get-a-snapshot-of-cyclictest.patch new file mode 100644 index 0000000..6452685 --- /dev/null +++ b/SOURCES/rt-tests-cyclictest-Get-a-snapshot-of-cyclictest.patch @@ -0,0 +1,294 @@ +From 26bd002f00753b3b6aa857eeee62c051a15b6fa5 Mon Sep 17 00:00:00 2001 +From: John Kacur +Date: Fri, 6 Sep 2019 21:48:59 +0200 +Subject: [PATCH] rt-tests: cyclictest: Get a snapshot of cyclictest without + interuppting it + +Right now if you are running cyclictest you can send it SIGUSR1 +and it will spill out the data at a moment in time, and keep running. + +However, this can be problematic if you are using another program such +as rteval to consume the data. + +This feature here lets you send SIGUSR2 to cyclictest and it dumps +status to shared memory so you can read it without interrupting +cyclictest and without interferring with the data it is outputing. + +To use it, start cyclictest in one term, then in another term send it +SIGUSR2, and then you can just cat the results like this: + + [jkacur@planxty rt-tests]$ ps ax | tail + 14083 ? I 0:00 [kworker/1:0-events] + 14108 ? I 0:01 [kworker/u16:3-events_unbound] + 14150 ? I 0:00 [kworker/7:0-mm_percpu_wq] + 14287 pts/9 SLl+ 0:14 ./cyclictest -t + 14324 ? I 0:00 [kworker/1:2] + 14341 ? I 0:00 [kworker/0:2] + 14342 ? I 0:00 [kworker/2:1] + 14363 ? I 0:00 [kworker/u16:0-events_unbound] + 14381 pts/2 R+ 0:00 ps ax + 14382 pts/2 S+ 0:00 tail + + [jkacur@planxty rt-tests]$ cat /dev/shm/cyclictest_shm + [jkacur@planxty rt-tests]$ kill -s USR2 14287 + [jkacur@planxty rt-tests]$ cat /dev/shm/cyclictest_shm + #--------------------------- + # cyclictest current status: + T: 0 (14288) P: 0 I:1000 C: 124852 Min: 20 Act: 65 Avg: 104 Max: 354 + T: 1 (14289) P: 0 I:1500 C: 83235 Min: 6 Act: 77 Avg: 82 Max: 330 + T: 2 (14290) P: 0 I:2000 C: 62426 Min: 9 Act: 71 Avg: 110 Max: 358 + T: 3 (14291) P: 0 I:2500 C: 49940 Min: 9 Act: 77 Avg: 111 Max: 453 + T: 4 (14292) P: 0 I:3000 C: 41617 Min: 14 Act: 68 Avg: 69 Max: 815 + T: 5 (14293) P: 0 I:3500 C: 35672 Min: 15 Act: 68 Avg: 105 Max: 360 + T: 6 (14294) P: 0 I:4000 C: 31212 Min: 15 Act: 64 Avg: 103 Max: 372 + T: 7 (14295) P: 0 I:4500 C: 27744 Min: 20 Act: 118 Avg: 93 Max: 681 + #--------------------------- + +Signed-off-by: John Kacur +--- + src/cyclictest/cyclictest.c | 184 ++++++++++++++++++++++++++++++++++++ + 1 file changed, 184 insertions(+) + +diff --git a/src/cyclictest/cyclictest.c b/src/cyclictest/cyclictest.c +index bca028fedffd..1c515ae1354c 100644 +--- a/src/cyclictest/cyclictest.c ++++ b/src/cyclictest/cyclictest.c +@@ -231,10 +231,14 @@ static struct thread_param **parameters; + static struct thread_stat **statistics; + + static void print_stat(FILE *fp, struct thread_param *par, int index, int verbose, int quiet); ++static void rstat_print_stat(struct thread_param *par, int index, int verbose, int quiet); ++static void rstat_setup(void); + + static int latency_target_fd = -1; + static int32_t latency_target_value = 0; + ++static int rstat_fd = -1; ++ + /* Latency trick + * if the file /dev/cpu_dma_latency exists, + * open it and write a zero into it. This will tell +@@ -1475,6 +1479,22 @@ static void sighand(int sig) + fprintf(stderr, "#---------------------------\n"); + quiet = oldquiet; + return; ++ } else if (sig == SIGUSR2) { ++ int i; ++ int oldquiet = quiet; ++ ++ if (rstat_fd == -1) { ++ fprintf(stderr, "ERROR: rstat_fd not valid\n"); ++ return; ++ } ++ quiet = 0; ++ dprintf(rstat_fd, "#---------------------------\n"); ++ dprintf(rstat_fd, "# cyclictest current status:\n"); ++ for (i = 0; i < num_threads; i++) ++ rstat_print_stat(parameters[i], i, 0, 0); ++ dprintf(rstat_fd, "#---------------------------\n"); ++ quiet = oldquiet; ++ return; + } + shutdown = 1; + if (refresh_on_max) +@@ -1642,6 +1662,62 @@ static void print_stat(FILE *fp, struct thread_param *par, int index, int verbos + } + } + ++static void rstat_print_stat(struct thread_param *par, int index, int verbose, int quiet) ++{ ++ struct thread_stat *stat = par->stats; ++ int fd = rstat_fd; ++ ++ if (!verbose) { ++ if (quiet != 1) { ++ char *fmt; ++ if (use_nsecs) ++ fmt = "T:%2d (%5d) P:%2d I:%ld C:%7lu " ++ "Min:%7ld Act:%8ld Avg:%8ld Max:%8ld"; ++ else ++ fmt = "T:%2d (%5d) P:%2d I:%ld C:%7lu " ++ "Min:%7ld Act:%5ld Avg:%5ld Max:%8ld"; ++ ++ dprintf(fd, fmt, index, stat->tid, par->prio, ++ par->interval, stat->cycles, stat->min, ++ stat->act, stat->cycles ? ++ (long)(stat->avg/stat->cycles) : 0, stat->max); ++ ++ if (smi) ++ dprintf(fd," SMI:%8ld", stat->smi_count); ++ ++ dprintf(fd, "\n"); ++ } ++ } else { ++ while (stat->cycles != stat->cyclesread) { ++ unsigned long diff_smi; ++ long diff = stat->values ++ [stat->cyclesread & par->bufmsk]; ++ ++ if (smi) ++ diff_smi = stat->smis ++ [stat->cyclesread & par->bufmsk]; ++ ++ if (diff > stat->redmax) { ++ stat->redmax = diff; ++ stat->cycleofmax = stat->cyclesread; ++ } ++ if (++stat->reduce == oscope_reduction) { ++ if (!smi) ++ dprintf(fd, "%8d:%8lu:%8ld\n", index, ++ stat->cycleofmax, stat->redmax); ++ else ++ dprintf(fd, "%8d:%8lu:%8ld%8ld\n", ++ index, stat->cycleofmax, ++ stat->redmax, diff_smi); ++ ++ stat->reduce = 0; ++ stat->redmax = 0; ++ } ++ stat->cyclesread++; ++ } ++ } ++} ++ + + /* + * thread that creates a named fifo and hands out run stats when someone +@@ -1729,6 +1805,105 @@ static void trigger_update(struct thread_param *par, int diff, int64_t ts) + pthread_mutex_unlock(&trigger_lock); + } + ++/* Running status shared memory open */ ++static int rstat_shm_open(void) ++{ ++ int fd; ++ ++ errno = 0; ++ fd = shm_unlink("/cyclictest_shm"); ++ ++ if ((fd == -1) && (errno != ENOENT)) { ++ fprintf(stderr, "ERROR: shm_unlink %s\n", strerror(errno)); ++ return fd; ++ } ++ ++ errno = 9; ++ fd = shm_open("/cyclictest_shm", O_RDWR|O_CREAT|O_EXCL, S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH); ++ if (fd == -1) { ++ fprintf(stderr, "ERROR: shm_open %s\n", strerror(errno)); ++ } ++ ++ rstat_fd = fd; ++ ++ return fd; ++} ++ ++static int rstat_ftruncate(int fd) ++{ ++ int err; ++ ++ errno = 0; ++ err = ftruncate(fd, _SC_PAGE_SIZE); ++ if (err) { ++ fprintf(stderr, "ftruncate error %s\n", strerror(errno)); ++ } ++ ++ return err; ++} ++ ++static void *rstat_mmap(int fd) ++{ ++ void *mptr; ++ ++ errno = 0; ++ mptr = mmap(0, _SC_PAGE_SIZE, PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0); ++ ++ if (mptr == (void*)-1) { ++ fprintf(stderr, "ERROR: mmap, %s\n", strerror(errno)); ++ } ++ ++ return mptr; ++} ++ ++static int rstat_mlock(void *mptr) ++{ ++ int err; ++ ++ err = mlock(mptr, _SC_PAGE_SIZE); ++ ++ errno = 0; ++ if (err == -1) { ++ fprintf(stderr, "ERROR, mlock %s\n", strerror(errno)); ++ } ++ ++ return err; ++} ++ ++static void rstat_setup(void) ++{ ++ int res; ++ void *mptr = NULL; ++ ++ int sfd = rstat_shm_open(); ++ if (sfd < 0) ++ goto rstat_err; ++ ++ res = rstat_ftruncate(sfd); ++ if (res) ++ goto rstat_err1; ++ ++ mptr = rstat_mmap(sfd); ++ if (mptr == MAP_FAILED) ++ goto rstat_err1; ++ ++ res = rstat_mlock(mptr); ++ if (res) ++ goto rstat_err2; ++ ++ return; ++ ++rstat_err2: ++ munmap(mptr, _SC_PAGE_SIZE); ++rstat_err1: ++ close(sfd); ++ shm_unlink("/cyclictest_shm"); ++rstat_err: ++ rstat_fd = -1; ++ return; ++} ++ ++ + int main(int argc, char **argv) + { + sigset_t sigset; +@@ -1869,6 +2044,7 @@ int main(int argc, char **argv) + + } + ++ + mode = use_nanosleep + use_system; + + sigemptyset(&sigset); +@@ -1878,6 +2054,10 @@ int main(int argc, char **argv) + signal(SIGINT, sighand); + signal(SIGTERM, sighand); + signal(SIGUSR1, sighand); ++ signal(SIGUSR2, sighand); ++ ++ /* Set-up shm */ ++ rstat_setup(); + + parameters = calloc(num_threads, sizeof(struct thread_param *)); + if (!parameters) +@@ -2138,5 +2318,9 @@ int main(int argc, char **argv) + if (affinity_mask) + rt_bitmask_free(affinity_mask); + ++ /* Remove running status shared memory file if it exists */ ++ if (rstat_fd >= 0) ++ shm_unlink("/cyclictest_shm"); ++ + exit(ret); + } +-- +2.20.1 + diff --git a/SOURCES/rt-tests-cyclictest-Just-use-LIBNUMA_API_VERSION-2.patch b/SOURCES/rt-tests-cyclictest-Just-use-LIBNUMA_API_VERSION-2.patch new file mode 100644 index 0000000..0c41da0 --- /dev/null +++ b/SOURCES/rt-tests-cyclictest-Just-use-LIBNUMA_API_VERSION-2.patch @@ -0,0 +1,151 @@ +From 97632deddf783249e0e3d34630792c7696b7d5d5 Mon Sep 17 00:00:00 2001 +From: John Kacur +Date: Tue, 24 Sep 2019 19:37:48 +0200 +Subject: [PATCH 8/8] rt-tests: cyclictest: Just use LIBNUMA_API_VERSION 2 + +This removes support for LIBNUMA_API_VERSION 1. + +You can still build without numa support by doing +make NUMA=0 + +You can also build with numa and run on machines without numa support. + +Suggested-by: Sebastian Siewior +Signed-off-by: John Kacur +--- + src/cyclictest/rt_numa.h | 98 +--------------------------------------- + 1 file changed, 1 insertion(+), 97 deletions(-) + +diff --git a/src/cyclictest/rt_numa.h b/src/cyclictest/rt_numa.h +index 7adeb3c01324..983502d34c94 100644 +--- a/src/cyclictest/rt_numa.h ++++ b/src/cyclictest/rt_numa.h +@@ -1,16 +1,7 @@ + /* + * A numa library for cyclictest. + * The functions here are designed to work whether cyclictest has been +- * compiled with numa support or not, and whether the user uses the --numa +- * option or not. +- * They should also work correctly with older versions of the numactl lib +- * such as the one found on RHEL5, or with the newer version 2 and above. +- * +- * The difference in behavior hinges on whether LIBNUMA_API_VERSION >= 2, +- * in which case we will employ the bitmask affinity behavior -or- +- * either LIBNUMA_API_VERSION < 2 or NUMA support is missing altogether, +- * in which case we retain the older affinity behavior which can either +- * specify a single CPU core or else use all cores. ++ * compiled with numa support or not. + * + * (C) 2010 John Kacur + * (C) 2010 Clark Williams +@@ -28,10 +19,6 @@ static int numa = 0; + #ifdef NUMA + #include + +-#ifndef LIBNUMA_API_VERSION +-#define LIBNUMA_API_VERSION 2 +-#endif +- + static void * + threadalloc(size_t size, int node) + { +@@ -69,8 +56,6 @@ static void *rt_numa_numa_alloc_onnode(size_t size, int node, int cpu) + return stack; + } + +-#if LIBNUMA_API_VERSION >= 2 +- + /* + * Use new bit mask CPU affinity behavior + */ +@@ -110,87 +95,6 @@ static inline void rt_bitmask_free(struct bitmask *mask) + numa_bitmask_free(mask); + } + +-#else /* LIBNUMA_API_VERSION == 1 */ +- +-struct bitmask { +- unsigned long size; /* number of bits in the map */ +- unsigned long *maskp; +-}; +-#define BITS_PER_LONG (8*sizeof(long)) +- +-/* +- * Map legacy CPU affinity behavior onto bit mask infrastructure +- */ +-static int rt_numa_numa_node_of_cpu(int cpu) +-{ +- unsigned char cpumask[256]; +- int node, idx, bit; +- int max_node, max_cpus; +- +- max_node = numa_max_node(); +- max_cpus = sysconf(_SC_NPROCESSORS_ONLN); +- +- if (cpu > max_cpus) { +- errno = EINVAL; +- return -1; +- } +- +- /* calculate bitmask index and relative bit position of cpu */ +- idx = cpu / 8; +- bit = cpu % 8; +- +- for (node = 0; node <= max_node; node++) { +- if (numa_node_to_cpus(node, (void *) cpumask, sizeof(cpumask))) +- return -1; +- +- if (cpumask[idx] & (1<maskp[i/BITS_PER_LONG] & (1<<(i % BITS_PER_LONG)); +- return (bit != 0); +-} +- +-static inline struct bitmask* rt_numa_parse_cpustring(const char* s, +- int max_cpus) +-{ +- int cpu; +- struct bitmask *mask = NULL; +- cpu = atoi(s); +- if (0 <= cpu && cpu < max_cpus) { +- mask = malloc(sizeof(*mask)); +- if (mask) { +- /* Round up to integral number of longs to contain +- * max_cpus bits */ +- int nlongs = (max_cpus+BITS_PER_LONG-1)/BITS_PER_LONG; +- +- mask->maskp = calloc(nlongs, sizeof(long)); +- if (mask->maskp) { +- mask->maskp[cpu/BITS_PER_LONG] |= +- (1UL << (cpu % BITS_PER_LONG)); +- mask->size = max_cpus; +- } else { +- free(mask); +- mask = NULL; +- } +- } +- } +- return mask; +-} +- +-static inline void rt_bitmask_free(struct bitmask *mask) +-{ +- free(mask->maskp); +- free(mask); +-} +- +-#endif /* LIBNUMA_API_VERSION */ + + #else /* ! NUMA */ + +-- +2.20.1 + diff --git a/SOURCES/rt-tests-cyclictest-Make-tracemark-work-correctly-ag.patch b/SOURCES/rt-tests-cyclictest-Make-tracemark-work-correctly-ag.patch new file mode 100644 index 0000000..33765ee --- /dev/null +++ b/SOURCES/rt-tests-cyclictest-Make-tracemark-work-correctly-ag.patch @@ -0,0 +1,68 @@ +From 33f07f6ee2053dc16dd667c763326515e87f19e3 Mon Sep 17 00:00:00 2001 +From: John Kacur +Date: Mon, 16 Sep 2019 20:37:22 +0200 +Subject: [PATCH] rt-tests: cyclictest: Make tracemark work correctly again + +commit f5ccfbe4d6641e48f56152be135d901dd31cba7e +was a little too aggressive removing ftrace code. + +We were able to remove ftrace code because this functionality is +available using trace-cmd, in conjunction with the tracemark option in +cyclictest. Put back the parts of tracemark needed to make this work +correctly. + +After this patch you can get tracing info like this as an example. + +trace-cmd record -p function ./cyclictest -t -b100 --tracemark + +Signed-off-by: John Kacur + +Corrected a typo +Reported-by: Kurt Kanzenbach +Signed-off-by: John Kacur +--- + src/cyclictest/cyclictest.c | 7 +++++++ + 1 file changed, 7 insertions(+) + +diff --git a/src/cyclictest/cyclictest.c b/src/cyclictest/cyclictest.c +index 52f93da7d074..72fb35da3238 100644 +--- a/src/cyclictest/cyclictest.c ++++ b/src/cyclictest/cyclictest.c +@@ -184,6 +184,7 @@ static void trigger_update(struct thread_param *par, int diff, int64_t ts); + + static int shutdown; + static int tracelimit = 0; ++static int trace_marker = 0; + static int verbose = 0; + static int oscope_reduction = 1; + static int lockall = 0; +@@ -400,6 +401,9 @@ static void debugfs_prepare(void) + + static void enable_trace_mark(void) + { ++ if (!trace_marker) ++ return; ++ + debugfs_prepare(); + open_tracemark_fd(); + } +@@ -1167,6 +1171,7 @@ static void process_options (int argc, char *argv[], int max_cpus) + {"spike", required_argument, NULL, OPT_TRIGGER }, + {"spike-nodes", required_argument, NULL, OPT_TRIGGER_NODES }, + {"threads", optional_argument, NULL, OPT_THREADS }, ++ {"tracemark", no_argument, NULL, OPT_TRACEMARK }, + {"unbuffered", no_argument, NULL, OPT_UNBUFFERED }, + {"verbose", no_argument, NULL, OPT_VERBOSE }, + {"dbg_cyclictest", no_argument, NULL, OPT_DBGCYCLIC }, +@@ -1343,6 +1348,8 @@ static void process_options (int argc, char *argv[], int max_cpus) + fatal("--smi is not available on your arch\n"); + #endif + break; ++ case OPT_TRACEMARK: ++ trace_marker = 1; break; + } + } + +-- +2.20.1 + diff --git a/SOURCES/rt-tests-cyclictest-Remove-numa-from-help.patch b/SOURCES/rt-tests-cyclictest-Remove-numa-from-help.patch deleted file mode 100644 index 0bfba17..0000000 --- a/SOURCES/rt-tests-cyclictest-Remove-numa-from-help.patch +++ /dev/null @@ -1,85 +0,0 @@ -From 7ea837b01d7e75e403a935bb40b11824f8568d4a Mon Sep 17 00:00:00 2001 -From: John Kacur -Date: Mon, 5 Nov 2018 15:11:31 +0100 -Subject: [PATCH] rt-tests: cyclictest: Remove numa from help - -The numa mode is invoked automatically now, and not from the commandline. -Remove it from help and the man page as well. -Clean-up messages to refer to "numa" or "numa" mode instead of "--numa" - -Even though --smp can still be invoked, change messages to "smp mode" -for consistency. - -Signed-off-by: John Kacur ---- - src/cyclictest/cyclictest.8 | 3 --- - src/cyclictest/cyclictest.c | 10 +++------- - src/cyclictest/rt_numa.h | 2 +- - 3 files changed, 4 insertions(+), 11 deletions(-) - -diff --git a/src/cyclictest/cyclictest.8 b/src/cyclictest/cyclictest.8 -index 36edacc3209f..a05d1f4c9d4a 100644 ---- a/src/cyclictest/cyclictest.8 -+++ b/src/cyclictest/cyclictest.8 -@@ -185,9 +185,6 @@ of the trace functions available from /kernel/debug/tracing/ - .B \-u, \-\-unbuffered - force unbuffered output for live processing - .TP --.B \-U, --numa --Standard NUMA testing (similar to SMP option) thread data structures allocated from local node. --.TP - .B \-v, \-\-verbose - Output values on stdout for statistics. This option is used to gather statistical information about the latency distribution. The output is sent to stdout. The output format is: - -diff --git a/src/cyclictest/cyclictest.c b/src/cyclictest/cyclictest.c -index 8bba9fc63ee3..188a202c5171 100644 ---- a/src/cyclictest/cyclictest.c -+++ b/src/cyclictest/cyclictest.c -@@ -1025,10 +1025,6 @@ static void display_help(int error) - " without -t default = 1\n" - " --tracemark write a trace mark when -b latency is exceeded\n" - "-u --unbuffered force unbuffered output for live processing\n" --#ifdef NUMA -- "-U --numa Standard NUMA testing (similar to SMP option)\n" -- " thread data structures allocated from local node\n" --#endif - "-v --verbose output values on stdout for statistics\n" - " format: n:c:v n=tasknum c=count v=value in us\n" - " --dbg_cyclictest print info useful for debugging cyclictest\n" -@@ -1329,7 +1325,7 @@ static void process_options (int argc, char *argv[], int max_cpus) - case 't': - case OPT_THREADS: - if (smp) { -- warn("-t ignored due to --smp\n"); -+ warn("-t ignored due to smp mode\n"); - break; - } - if (optarg != NULL) -@@ -1399,9 +1395,9 @@ static void process_options (int argc, char *argv[], int max_cpus) - - if (option_affinity) { - if (smp) { -- warn("-a ignored due to --smp\n"); -+ warn("-a ignored due to smp mode\n"); - } else if (numa) { -- warn("-a ignored due to --numa\n"); -+ warn("-a ignored due to numa mode\n"); - } - } - -diff --git a/src/cyclictest/rt_numa.h b/src/cyclictest/rt_numa.h -index 3970e681fe7b..e8cd7f481baa 100644 ---- a/src/cyclictest/rt_numa.h -+++ b/src/cyclictest/rt_numa.h -@@ -253,7 +253,7 @@ static inline void rt_bitmask_free(struct bitmask *mask) - static void numa_on_and_available() - { - if (numa) /* NUMA is not defined here */ -- fatal("--numa specified and numa functions not available.\n"); -+ fatal("numa mode and numa functions not available.\n"); - } - - #endif /* NUMA */ --- -2.14.5 - diff --git a/SOURCES/rt-tests-cyclictest.8-Remove-invalid-tracing-options.patch b/SOURCES/rt-tests-cyclictest.8-Remove-invalid-tracing-options.patch new file mode 100644 index 0000000..7289707 --- /dev/null +++ b/SOURCES/rt-tests-cyclictest.8-Remove-invalid-tracing-options.patch @@ -0,0 +1,117 @@ +From abc74dca458bb81b81ad40efecda69a6fa28fd3c Mon Sep 17 00:00:00 2001 +From: John Kacur +Date: Sat, 14 Sep 2019 04:57:35 +0200 +Subject: [PATCH] rt-tests: cyclictest.8: Remove invalid tracing options from + the manpage + +Most tracing options have been removed from cyclictest since the +user can now use trace-cmd together with cyclictest to get the same +functionality. Update the manpage to reflect this. + +Reported-by: Tom Rix +Signed-off-by: John Kacur +--- + src/cyclictest/cyclictest.8 | 35 ----------------------------------- + 1 file changed, 35 deletions(-) + +diff --git a/src/cyclictest/cyclictest.8 b/src/cyclictest/cyclictest.8 +index a05d1f4c9d4a..b64a16ae8bbb 100644 +--- a/src/cyclictest/cyclictest.8 ++++ b/src/cyclictest/cyclictest.8 +@@ -52,9 +52,6 @@ Align thread wakeups to a specific offset in microseconds + .B \-b, \-\-breaktrace=USEC + Send break trace command when latency > USEC + .TP +-.B \-B, \-\-preemptirqs +-Both preempt and irqsoff tracing (used with -b) +-.TP + .B \-c, \-\-clock=CLOCK + select clock + .br +@@ -62,9 +59,6 @@ select clock + .br + 1 = CLOCK_REALTIME + .TP +-.B \-C, \-\-context +-context switch tracing (used with \-b) +-.TP + .B \-d, \-\-distance=DIST + Distance of thread intervals in us, default = 500 + .TP +@@ -73,12 +67,6 @@ Specify a length for the test run. + .br + Append 'm', 'h', or 'd' to specify minutes, hours or days. + .TP +-.B \-E, \-\-event +-event tracing (used with \-b) +-.TP +-.B \-f, \-\-ftrace +-Enable function tracing using ftrace as tracer. This option is available only with \-b. +-.TP + .B \-F, \-\-fifo= + Create a named pipe at path and write stats to it + .TP +@@ -94,9 +82,6 @@ Dump the latency histogram to instead of stdout. + .B \-i, \-\-interval=INTV + Set the base interval of the thread(s) in microseconds (default is 1000us). This sets the interval of the first thread. See also \-d. + .TP +-.B \-I, \-\-irqsoff +-Irgsoff tracing (used with \-b) +-.TP + .B \-l, \-\-loops=LOOPS + Set the number of loops. The default is 0 (endless). This option is useful for automated tests with a given number of test cycles. Cyclictest is stopped once the number of timer intervals has been reached. + .TP +@@ -113,26 +98,16 @@ running cyclictest on low-bandwidth connections) + .B \-n, \-\-nanosleep + Use clock_nanosleep instead of posix interval timers. Setting this option runs the tests with clock_nanosleep instead of posix interval timers. + .TP +-.B \-\-notrace +-suppress tracing +-.TP + .B \-N, \-\-nsecs + Show results in nanoseconds instead of microseconds, which is the default unit. + .TP + .B \-o, \-\-oscope=RED + Oscilloscope mode, reduce verbose output by RED. + .TP +-.B \-O, \-\-traceopt=TRACING_OPTION +-Used to pass tracing options to ftrace tracers. May be invoked multiple +-times for multiple trace options. For example trace options look at /sys/kernel/debug/tracing/trace_options +-.TP + .B \-p, \-\-prio=PRIO + Set the priority of the first thread. The given priority is set to the first test thread. Each further thread gets a lower priority: + Priority(Thread N) = max(Priority(Thread N\-1) \- 1, 0) + .TP +-.B \-P, \-\-preemptoff +-Preempt off tracing (used with -b) +-.TP + .B \-\-policy=NAME + set the scheduler policy of the measurement threads + where NAME is one of: other, normal, batch, idle, fifo, rr +@@ -178,10 +153,6 @@ the number of available CPUs. See \-d, \-i and \-p for further information. + .B \-\-tracemark + write a trace mark when \-b latency is exceeded. + .TP +-.B \-T, \-\-tracer=TRACEFUNC +-set the ftrace tracer function. Used with the \-b option. Must be one +-of the trace functions available from /kernel/debug/tracing/available_tracers +-.TP + .B \-u, \-\-unbuffered + force unbuffered output for live processing + .TP +@@ -192,12 +163,6 @@ n:c:v + + where n=task number c=count v=latency value in us. + .TP +-.B \\-w, \-\-wakeup +-task wakeup tracing (used with \-b) +-.TP +-.B \\-W, \-\-wakeuprt +-rt-task wakeup tracing (used with \-b) +-.TP + .B \-\-dbg_cyclictest + Print info userful for debugging cyclictest + +-- +2.20.1 + diff --git a/SOURCES/rt-tests-deadline_test-Add-NULL-check-before-freeing.patch b/SOURCES/rt-tests-deadline_test-Add-NULL-check-before-freeing.patch deleted file mode 100644 index 14fb0f8..0000000 --- a/SOURCES/rt-tests-deadline_test-Add-NULL-check-before-freeing.patch +++ /dev/null @@ -1,30 +0,0 @@ -From ed58e7ad038f11a8e5f194fb9314ebc791e21b99 Mon Sep 17 00:00:00 2001 -From: John Kacur -Date: Thu, 15 Nov 2018 13:00:06 +0100 -Subject: [PATCH] rt-tests: deadline_test: Add NULL check before freeing - setcpu_buf - -setcpu_buf doesn't always call malloc, so NULL check it before freeing - -Signed-off-by: John Kacur ---- - src/sched_deadline/deadline_test.c | 4 +++- - 1 file changed, 3 insertions(+), 1 deletion(-) - -diff --git a/src/sched_deadline/deadline_test.c b/src/sched_deadline/deadline_test.c -index 2a63c5f91639..b213c206559c 100644 ---- a/src/sched_deadline/deadline_test.c -+++ b/src/sched_deadline/deadline_test.c -@@ -2092,6 +2092,8 @@ int main (int argc, char **argv) - printf("\n"); - } - -- free(setcpu_buf); -+ if (!setcpu_buf) -+ free(setcpu_buf); -+ - return 0; - } --- -2.14.5 - diff --git a/SOURCES/rt-tests-deadline_test-Add-a-manpage.patch b/SOURCES/rt-tests-deadline_test-Add-a-manpage.patch deleted file mode 100644 index 15cc291..0000000 --- a/SOURCES/rt-tests-deadline_test-Add-a-manpage.patch +++ /dev/null @@ -1,101 +0,0 @@ -From 803c33cfe83a8e215bdb4f393f90d1e175f78318 Mon Sep 17 00:00:00 2001 -From: John Kacur -Date: Fri, 2 Nov 2018 16:16:45 +0100 -Subject: [PATCH] rt-tests: deadline_test: Add a manpage - -Add an initial manpage for deadline_test. -Modify the Makefile to install it too. - -Signed-off-by: John Kacur ---- - Makefile | 1 + - src/sched_deadline/deadline_test.8 | 65 ++++++++++++++++++++++++++++++++++++++ - 2 files changed, 66 insertions(+) - create mode 100644 src/sched_deadline/deadline_test.8 - -diff --git a/Makefile b/Makefile -index 26dd96f0c5fd..06f399cc629d 100644 ---- a/Makefile -+++ b/Makefile -@@ -186,6 +186,7 @@ install: all install_hwlatdetect - gzip -c src/signaltest/signaltest.8 >"$(DESTDIR)$(mandir)/man8/signaltest.8.gz" - gzip -c src/pi_tests/pip_stress.8 >"$(DESTDIR)$(mandir)/man8/pip_stress.8.gz" - gzip -c src/queuelat/queuelat.8 >"$(DESTDIR)$(mandir)/man8/queuelat.8.gz" -+ gzip -c src/sched_deadline/deadline_test.8 >"$(DESTDIR)$(mandir)/man8/deadline_test.8.gz" - - .PHONY: install_hwlatdetect - install_hwlatdetect: hwlatdetect -diff --git a/src/sched_deadline/deadline_test.8 b/src/sched_deadline/deadline_test.8 -new file mode 100644 -index 000000000000..5dc99c0bfc63 ---- /dev/null -+++ b/src/sched_deadline/deadline_test.8 -@@ -0,0 +1,65 @@ -+.\" Hey, EMACS: -*- nroff -*- -+.TH DEADLINE_TEST 8 "November 1, 2018" -+.\" Please adjust this date whenever revising the manpage. -+.\" -+.\" Some roff macros, for reference: -+.\" .nh disable hyphenation -+.\" .hy enable hyphenation -+.\" .ad l left justify -+.\" .ad b justify to both left and right margins -+.\" .nf disable filling -+.\" .fi enable filling -+.\" .br insert line break -+.\" .sp insert n+1 empty lines -+.\" for manpage-specific macros, see man(7) -+.SH NAME -+deadline_test \- High resolution test program -+.SH DESCRIPTION -+.PP -+This program is used to test the deadline scheduler (SCHED_DEADLINE tasks) -+.SH SYNOPSIS -+.B deadline_test -+.RI "[ \-hb ] [ \-r prio ] [ \-c cpulist ] [ \-i interval ] [ \-p percent ] [ \-P percent ] [ \-t threads ] [ \-s step[us) ]" -+ -+.SH OPTIONS -+.TP -+.B \-h -+Show this help menu -+.br -+.TP -+.B \-b -+Bind on the last cpu. (shortcut for -c ) -+.br -+.TP -+.B \-r prio -+Add an RT task with given prio to stress system -+.br -+.TP -+.B \-c cpulist -+Comma/hyphen separated list of CPUs to run deadline tasks on -+.br -+.TP -+.B \-i interval -+The shortest deadline for the tasks -+.br -+.TP -+.B \-p percent -+The percent of bandwidth to use (1-90%) -+.br -+.TP -+.B \-P percent -+The percent of runtime for execution completion -+ (Default 100%) -+.br -+.TP -+.B \-t threads -+The number of threads to run as deadline (default 1) -+.br -+.TP -+.B \-s step(us) -+The amount to increase the deadline for each task (default 500us) -+.br -+.SH AUTHOR -+Deadline test was written by Steven Rostedt -+.PP -+This manual page was written by John Kacur --- -2.14.5 - diff --git a/SOURCES/rt-tests-determine_maximum_mpps.sh-Fix-quoting-and-o.patch b/SOURCES/rt-tests-determine_maximum_mpps.sh-Fix-quoting-and-o.patch new file mode 100644 index 0000000..e2fd822 --- /dev/null +++ b/SOURCES/rt-tests-determine_maximum_mpps.sh-Fix-quoting-and-o.patch @@ -0,0 +1,165 @@ +From f19e2cbc5f811acbdbcb0eb4a2ec745e0e1804d8 Mon Sep 17 00:00:00 2001 +From: John Kacur +Date: Fri, 17 Jan 2020 04:04:27 +0100 +Subject: [PATCH 4/5] rt-tests: determine_maximum_mpps.sh: Fix quoting and + other shell issue + +Fix a number of issues in the script determine_maximum_mpps.sh such as +1. Convert legacy backticks to $(...) notation +2. Double quote where necessary to prevent globbing +3. Double quote where necessary to prevent word splitting. + +Note: these fixes are more than just cosmetic, they are needed for the +script to work correctly. + +Signed-off-by: John Kacur +--- + src/queuelat/determine_maximum_mpps.sh | 75 +++++++++++++------------- + 1 file changed, 38 insertions(+), 37 deletions(-) + +diff --git a/src/queuelat/determine_maximum_mpps.sh b/src/queuelat/determine_maximum_mpps.sh +index f6cf1dea27cf..f785147f1bbd 100755 +--- a/src/queuelat/determine_maximum_mpps.sh ++++ b/src/queuelat/determine_maximum_mpps.sh +@@ -17,65 +17,65 @@ echo "Determining maximum mpps the machine can handle" + echo "Will take a few minutes to determine mpps value" + echo "And 10 minutes run to confirm the final mpps value is stable" + +-for mpps in `seq 3 3 50`; do +- echo testing $mpps Mpps ++for mpps in $(seq 3 3 50); do ++ echo testing "$mpps" Mpps + +- OUTFILE=`mktemp` +- $PREAMBLE queuelat -m $MAXLAT -c $CYCLES_PER_PACKET -f `sh get_cpuinfo_mhz.sh` -p "$mpps" -t 30 > $OUTFILE ++ OUTFILE=$(mktemp) ++ $PREAMBLE queuelat -m $MAXLAT -c $CYCLES_PER_PACKET -f "$(sh get_cpuinfo_mhz.sh)" -p "$mpps" -t 30 > "$OUTFILE" + +- exceeded=`grep exceeded $OUTFILE` ++ exceeded=$(grep exceeded "$OUTFILE") + if [ ! -z "$exceeded" ]; then +- echo mpps failed: $mpps ++ echo mpps failed: "$mpps" + break; + fi + echo success + done +-echo first loop mpps: $mpps ++echo first loop mpps: "$mpps" + + first_mpps=$(($mpps - 1)) +-for mpps in `seq $first_mpps -1 3`; do +- echo testing $mpps Mpps ++for mpps in $(seq $first_mpps -1 3); do ++ echo testing "$mpps" Mpps + +- OUTFILE=`mktemp` +- $PREAMBLE queuelat -m $MAXLAT -c $CYCLES_PER_PACKET -f `sh get_cpuinfo_mhz.sh` -p "$mpps" -t 30 > $OUTFILE ++ OUTFILE=$(mktemp) ++ $PREAMBLE queuelat -m $MAXLAT -c $CYCLES_PER_PACKET -f "$(sh get_cpuinfo_mhz.sh)" -p "$mpps" -t 30 > "$OUTFILE" + +- exceeded=`grep exceeded $OUTFILE` ++ exceeded=$(grep exceeded "$OUTFILE") + if [ -z "$exceeded" ]; then +- echo mpps success $mpps ++ echo mpps success "$mpps" + break; + fi + echo failure + done + +-second_mpps=`echo "$mpps + 0.3" | bc` +-echo second loop mpps: $mpps ++second_mpps=$(echo "$mpps + 0.3" | bc) ++echo second loop mpps: "$mpps" + +-for mpps in `seq $second_mpps 0.3 $first_mpps`; do +- echo testing $mpps Mpps ++for mpps in $(seq "$second_mpps" 0.3 $first_mpps); do ++ echo testing "$mpps" Mpps + +- OUTFILE=`mktemp` +- $PREAMBLE queuelat -m $MAXLAT -c $CYCLES_PER_PACKET -f `sh get_cpuinfo_mhz.sh` -p "$mpps" -t 30 > $OUTFILE ++ OUTFILE=$(mktemp) ++ $PREAMBLE queuelat -m $MAXLAT -c $CYCLES_PER_PACKET -f "$(sh get_cpuinfo_mhz.sh)" -p "$mpps" -t 30 > "$OUTFILE" + +- exceeded=`grep exceeded $OUTFILE` ++ exceeded=$(grep exceeded "$OUTFILE") + if [ ! -z "$exceeded" ]; then +- echo mpps failure $mpps ++ echo mpps failure "$mpps" + break; + fi + echo success + done + +-echo third loop mpps: $mpps +-third_mpps=`echo "$mpps -0.1" | bc` ++echo third loop mpps: "$mpps" ++third_mpps=$(echo "$mpps -0.1" | bc) + +-for mpps in `seq $third_mpps -0.1 3`; do +- echo testing $mpps Mpps ++for mpps in $(seq "$third_mpps" -0.1 3); do ++ echo testing "$mpps" Mpps + +- OUTFILE=`mktemp` +- $PREAMBLE queuelat -m $MAXLAT -c $CYCLES_PER_PACKET -f `sh get_cpuinfo_mhz.sh` -p "$mpps" -t 30 > $OUTFILE ++ OUTFILE=$(mktemp) ++ $PREAMBLE queuelat -m $MAXLAT -c $CYCLES_PER_PACKET -f "$(sh get_cpuinfo_mhz.sh)" -p "$mpps" -t 30 > "$OUTFILE" + +- exceeded=`grep exceeded $OUTFILE` ++ exceeded=$(grep exceeded "$OUTFILE") + if [ -z "$exceeded" ]; then +- echo mpps success $mpps ++ echo mpps success "$mpps" + break; + fi + echo failure +@@ -89,14 +89,14 @@ while [ $queuelat_failure == 1 ]; do + echo -n "Starting 10 runs of 30 seconds with " + echo "$mpps Mpps" + +- for i in `seq 1 10`; do +- $PREAMBLE queuelat -m $MAXLAT -c $CYCLES_PER_PACKET -f `get_cpuinfo_mhz.sh` -p "$mpps" -t 30 > $OUTFILE +- exceeded=`grep exceeded $OUTFILE` ++ for i in $(seq 1 10); do ++ $PREAMBLE queuelat -m $MAXLAT -c $CYCLES_PER_PACKET -f "$(get_cpuinfo_mhz.sh)" -p "$mpps" -t 30 > "$OUTFILE" ++ exceeded=$(grep exceeded "$OUTFILE") + + if [ ! -z "$exceeded" ]; then + echo "mpps failure (run $i) $mpps" + export queuelat_failure=1 +- mpps=`echo $mpps - 0.1 | bc` ++ mpps=$(echo "$mpps" - 0.1 | bc) + export mpps + break + fi +@@ -113,19 +113,20 @@ while [ $queuelat_failure == 1 ]; do + echo -n "Starting 10 minutes run with " + echo "$mpps Mpps" + +- $PREAMBLE queuelat -m $MAXLAT -c $CYCLES_PER_PACKET -f `get_cpuinfo_mhz.sh` -p "$mpps" -t 600 > $OUTFILE +- exceeded=`grep exceeded $OUTFILE` ++ $PREAMBLE queuelat -m $MAXLAT -c $CYCLES_PER_PACKET -f "$(get_cpuinfo_mhz.sh)" -p "$mpps" -t 600 > "$OUTFILE" ++ exceeded=$(grep exceeded "$OUTFILE") + + if [ ! -z "$exceeded" ]; then + echo "mpps failure (run $i) $mpps" + export queuelat_failure=1 +- export mpps=`echo $mpps - 0.1 | bc` ++ mpps=$(echo "$mpps" - 0.1 | bc) ++ export mpps + continue + fi + echo "run $i success" + done + +-echo Final mpps is: $mpps ++echo Final mpps is: "$mpps" + + unset queuelat_failure + unset mpps +-- +2.20.1 + diff --git a/SOURCES/rt-tests-hwlatdetect-Code-clean-up.patch b/SOURCES/rt-tests-hwlatdetect-Code-clean-up.patch deleted file mode 100644 index deff24e..0000000 --- a/SOURCES/rt-tests-hwlatdetect-Code-clean-up.patch +++ /dev/null @@ -1,97 +0,0 @@ -From bbf4d5adf23fa2b81a1cdb92c40c3451376ac672 Mon Sep 17 00:00:00 2001 -From: John Kacur -Date: Fri, 10 May 2019 15:58:39 +0200 -Subject: [PATCH 2/2] rt-tests: hwlatdetect.py: Code clean-up - -- Remove obsolete from __future__ -- Fix spacing around calls to print, open and brackets -- Fix spacing around assignments - -Signed-off-by: John Kacur ---- - src/hwlatdetect/hwlatdetect.py | 18 +++++++++--------- - 1 file changed, 9 insertions(+), 9 deletions(-) - -diff --git a/src/hwlatdetect/hwlatdetect.py b/src/hwlatdetect/hwlatdetect.py -index 368079a158b1..b72bdc3aa930 100755 ---- a/src/hwlatdetect/hwlatdetect.py -+++ b/src/hwlatdetect/hwlatdetect.py -@@ -8,7 +8,7 @@ - # modify it under the terms of the GNU General Public License Version 2 - # as published by the Free Software Foundation. - --from __future__ import print_function -+ - - import sys - import os -@@ -84,7 +84,7 @@ class DebugFS(object): - try: - val = f.readline() - except OSError as e: -- print ("errno: %s" % e) -+ print("errno: %s" % e) - if e.errno == errno.EAGAIN: - val = None - else: -@@ -159,7 +159,7 @@ class Kmod(object): - return - - # now look for already loaded module -- for l in open ('/proc/modules'): -+ for l in open('/proc/modules'): - field = l.split() - if self.name in field[0]: - self.preloaded = True -@@ -210,7 +210,7 @@ class Detector(object): - if self.have_msr: - p = subprocess.Popen(['/usr/sbin/rdmsr', '-a', '-d', '0x34'], stdout=subprocess.PIPE) - p.wait() -- counts = [ int(x.strip()) for x in p.stdout.readlines()] -+ counts = [int(x.strip()) for x in p.stdout.readlines()] - return counts - - # methods for preventing/enabling c-state transitions -@@ -295,11 +295,11 @@ class Tracer(Detector): - - class Sample(object): - 'private class for tracer sample data' -- __slots__= 'timestamp', 'inner', 'outer', -+ __slots__ = 'timestamp', 'inner', 'outer', - def __init__(self, line): - fields = line.split() - i,o = fields[6].split('/') -- ts=fields[7][3:] -+ ts = fields[7][3:] - self.timestamp = str(ts) - self.inner = int(i) - self.outer = int(o) -@@ -332,14 +332,14 @@ class Tracer(Detector): - self.set('current_tracer', 'hwlat') - - def set(self, field, val): -- path=self.translate(field) -+ path = self.translate(field) - self.debugfs.putval(path, str(val)) - - def get(self, field): - if field == "count": - return len(self.samples) - elif field == "max": -- max=0 -+ max = 0 - for values in self.samples: - s = int(values.largest()) - if s > max: -@@ -435,7 +435,7 @@ class Hwlat(Detector): - - def display(self): - for s in self.samples: -- print (s) -+ print(s) - - def save(self, output=None): - if output: --- -2.20.1 - diff --git a/SOURCES/rt-tests-manpages-Modify-makefile-for-queuelat.8-and.patch b/SOURCES/rt-tests-manpages-Modify-makefile-for-queuelat.8-and.patch deleted file mode 100644 index c8bb2b6..0000000 --- a/SOURCES/rt-tests-manpages-Modify-makefile-for-queuelat.8-and.patch +++ /dev/null @@ -1,30 +0,0 @@ -From 77be335d8b09afa662eb0965b9b18a6105fa9dcc Mon Sep 17 00:00:00 2001 -From: John Kacur -Date: Tue, 18 Sep 2018 02:30:00 +0200 -Subject: [PATCH] rt-tests: manpages: Modify makefile for queuelat.8 and - pip_stress.8 - -Modify the manpage to include queuelat.8 and pip_stress.8 for the -install - -Signed-off-by: John Kacur ---- - Makefile | 2 ++ - 1 file changed, 2 insertions(+) - -diff --git a/Makefile b/Makefile -index 8b08385890fe..5447ca9de108 100644 ---- a/Makefile -+++ b/Makefile -@@ -193,6 +193,8 @@ install: all install_hwlatdetect - gzip -c src/backfire/sendme.8 >"$(DESTDIR)$(mandir)/man8/sendme.8.gz" - gzip -c src/hackbench/hackbench.8 >"$(DESTDIR)$(mandir)/man8/hackbench.8.gz" - gzip -c src/signaltest/signaltest.8 >"$(DESTDIR)$(mandir)/man8/signaltest.8.gz" -+ gzip -c src/pi_tests/pip_stress.8 >"$(DESTDIR)$(mandir)/man8/pip_stress.8.gz" -+ gzip -c src/queuelat/queuelat.8 >"$(DESTDIR)$(mandir)/man8/queuelat.8.gz" - - .PHONY: install_hwlatdetect - install_hwlatdetect: hwlatdetect --- -2.14.4 - diff --git a/SOURCES/rt-tests-pi_stress-Add-short-options-to-usage-msg.patch b/SOURCES/rt-tests-pi_stress-Add-short-options-to-usage-msg.patch new file mode 100644 index 0000000..b37eca0 --- /dev/null +++ b/SOURCES/rt-tests-pi_stress-Add-short-options-to-usage-msg.patch @@ -0,0 +1,65 @@ +From 7a2ce964eaaa4de96fb81d7fea72350d1c82b3ba Mon Sep 17 00:00:00 2001 +From: John Kacur +Date: Thu, 16 Jan 2020 21:51:40 +0100 +Subject: [PATCH 2/8] rt-tests: pi_stress: Add short options to usage message + +Add short options to usage message. Note, the options all ready exist, +they simply were not documented in the usage message. + +Signed-off-by: John Kacur +--- + src/pi_tests/pi_stress.c | 34 +++++++++++++++------------------- + 1 file changed, 15 insertions(+), 19 deletions(-) + +diff --git a/src/pi_tests/pi_stress.c b/src/pi_tests/pi_stress.c +index 7fa98dfb9ad4..0ed844c636cd 100644 +--- a/src/pi_tests/pi_stress.c ++++ b/src/pi_tests/pi_stress.c +@@ -1008,29 +1008,25 @@ void *high_priority(void *arg) + + void usage(void) + { +- printf("usage: pi_stress \n"); +- printf(" options:\n"); +- printf("\t--verbose\t- lots of output\n"); +- printf("\t--quiet\t\t- suppress running output\n"); +- printf +- ("\t--duration=\t- length of the test run in seconds [infinite]\n"); +- printf("\t\t\t Append 'm', 'h', or 'd' to specify minutes, hours or days.\n"); +- printf("\t--groups=\t- set the number of inversion groups [%d]\n", ++ printf("usage: pi_stress \n\n"); ++ printf("-v\t--verbose\t- lots of output\n"); ++ printf("-q\t--quiet\t\t- suppress running output\n"); ++ printf ("-D TIME\t--duration=TIME\n\t\t\t- length of test run in seconds (default is infinite)\n"); ++ printf("\t\t\t Append 'm', 'h', or 'd'\n\t\t\t to specify minutes, hours or days.\n"); ++ printf("-g\t--groups=\t- set the number of inversion groups [%d]\n", + ngroups); +- printf +- ("\t--inversions=- number of inversions per group [infinite]\n"); +- printf("\t--rr\t\t- use SCHED_RR for test threads [SCHED_FIFO]\n"); +- printf("\t--sched\t\t- scheduling options per thread type:\n"); ++ printf ("-i INVERSIONS\t\t--inversions=INVERSIONS\n\t\t\t number of inversions per group (default is infinite)\n"); ++ printf("-r\t--rr\t\t- use SCHED_RR for test threads [SCHED_FIFO]\n"); ++ printf("-s SCHED_OPTS\t--sched\t\t- scheduling options per thread type:\n"); + printf("\t\tid=[high|med|low]\t\t\t- select thread\n"); + printf("\t\t,policy=[fifo,rr],priority=\t\t- SCHED_FIFO or SCHED_RR\n"); + printf("\t\t,policy=deadline,runtime=,deadline=,period=\t- SCHED_DEADLINE\n"); +- printf("\t--prompt\t- prompt before starting the test\n"); +- printf +- ("\t--uniprocessor\t- force all threads to run on one processor\n"); +- printf("\t--mlockall\t- lock current and future memory\n"); +- printf("\t--debug\t\t- turn on debug prints\n"); +- printf("\t--version\t- print version number on output\n"); +- printf("\t--help\t\t- print this message\n"); ++ printf("-p\t--prompt\t- prompt before starting the test\n"); ++ printf ("-u\t--uniprocessor\t- force all threads to run on one processor\n"); ++ printf("-m\t--mlockall\t- lock current and future memory\n"); ++ printf("-d\t--debug\t\t- turn on debug prints\n"); ++ printf("-V\t--version\t- print version number on output\n"); ++ printf("-h\t--help\t\t- print this message\n"); + } + + /* block all signals (called from main) */ +-- +2.20.1 + diff --git a/SOURCES/rt-tests-pi_stress-remove-unused-report-options.patch b/SOURCES/rt-tests-pi_stress-remove-unused-report-options.patch deleted file mode 100644 index e5ba8a1..0000000 --- a/SOURCES/rt-tests-pi_stress-remove-unused-report-options.patch +++ /dev/null @@ -1,32 +0,0 @@ -From 4b58d4277496b5ad61b66cbc6fb4aea91ceec6dd Mon Sep 17 00:00:00 2001 -From: Juri Lelli -Date: Fri, 14 Sep 2018 12:04:48 +0200 -Subject: [PATCH 1/5] rt-tests: pi_stress: remove unused report option from - help - -Command line --report option is not actually implemented (even if -advertised on --help). - -Remove it from the help banner. - -Signed-off-by: Juri Lelli -Signed-off-by: John Kacur ---- - src/pi_tests/pi_stress.c | 1 - - 1 file changed, 1 deletion(-) - -diff --git a/src/pi_tests/pi_stress.c b/src/pi_tests/pi_stress.c -index 36b64ca1672c..ac7646cd2613 100644 ---- a/src/pi_tests/pi_stress.c -+++ b/src/pi_tests/pi_stress.c -@@ -1032,7 +1032,6 @@ void usage(void) - ngroups); - printf - ("\t--inversions=- number of inversions per group [infinite]\n"); -- printf("\t--report=\t- output to file [/dev/null]\n"); - printf("\t--rr\t\t- use SCHED_RR for test threads [SCHED_FIFO]\n"); - printf("\t--sched\t\t- scheduling options per thread type:\n"); - printf("\t\tid=[high|med|low]\t\t\t- select thread\n"); --- -2.14.4 - diff --git a/SOURCES/rt-tests-pip_stress-Add-an-initial-man-page-for-pip_stress.patch b/SOURCES/rt-tests-pip_stress-Add-an-initial-man-page-for-pip_stress.patch deleted file mode 100644 index 12566e7..0000000 --- a/SOURCES/rt-tests-pip_stress-Add-an-initial-man-page-for-pip_stress.patch +++ /dev/null @@ -1,70 +0,0 @@ -From 2342d8be62a510569f8cbc9fe41574b6bc370073 Mon Sep 17 00:00:00 2001 -From: John Kacur -Date: Mon, 17 Sep 2018 23:13:53 +0200 -Subject: [PATCH 3/5] rt-tests: pip_stress: Add an initial man page for - pip_stress - -This adds a man page for pip_stress - -Signed-off-by: John Kacur ---- - src/pi_tests/pip_stress.8 | 47 +++++++++++++++++++++++++++++++++++++++++++++++ - 1 file changed, 47 insertions(+) - create mode 100644 src/pi_tests/pip_stress.8 - -diff --git a/src/pi_tests/pip_stress.8 b/src/pi_tests/pip_stress.8 -new file mode 100644 -index 000000000000..1808330b2e17 ---- /dev/null -+++ b/src/pi_tests/pip_stress.8 -@@ -0,0 +1,47 @@ -+.\" -+.TH PIP\ STRESS 8 "September 17, 2018" -+.SH NAME -+.B pip_stress \- Priority Inheritance with processes -+.SH SYNOPSIS -+.B pip_stress -+ -+.SH DESCRIPTION -+This program demonstrates the technique of using priority inheritance (PI) -+mutexes with processes instead of threads. -+The way to do this is to obtain some shared memory - in this case with -+mmap that backs a pthread_mutex_t since this will support PI. -+Pay particular attention to how this is intialized to support processes. -+Function init_shared_pthread_mutex() does this by setting the -+pthread_mutexattr to PTHREAD_PROCESS_SHARED and the mutex protocol to -+PTHREAD_PRIO_INHERIT. -+In this program we purposely try to invoke a classic priority inversion. -+A low priority process grabs the mutex and does some work. -+A high priority process comes a long and is blocked since the mutex is taken. -+A medium priority process that doesn't require the mutex then takes the -+processor. Because the processes are restricted to one cpu, the low priority -+processes never makes any progress because the medium priority process -+runs in an infinite loop. This is a priority inversion because the -+medium priority process is running at the expensive of the high priority -+process. However, since we have used PRIO_INHERIT and are running on a -+machine that supports preemption, the high priority process will lend it's -+priority to the low priority process which will preempt the medium priority -+process. The low priority process will then release the mutex which the -+high priority process can obtain. When the high priority process gets to run -+it kills the medium priority process. -+The state structure keeps track of the progress. Although this program -+is set up to likely trigger an inversion, there is no guarantee that -+scheduling will make that happen. After the program completes it reports -+whether a priority inversion occurred or not. In either case this program -+demonstrates how to use priority inheritance mutexes with processes. -+In fact, you would be better off to avoid scenarios in which a priority -+inversion occurs if possible - this program tries to trigger them just -+to show that it works. If you are having difficulty triggering an inversion, -+merely increase the time that the low priority process sleeps while -+holding the lock. (usleep); -+Also note that you have to run as a user with permission to change -+scheduling priorities. -+.BR -+.SH AUTHOR -+pip_stress was written by John Kacur -+.PP -+This manual page was also written by John Kacur --- -2.14.4 - diff --git a/SOURCES/rt-tests-ptsematest-Update-man-page-and-add-h-option.patch b/SOURCES/rt-tests-ptsematest-Update-man-page-and-add-h-option.patch new file mode 100644 index 0000000..e3274b8 --- /dev/null +++ b/SOURCES/rt-tests-ptsematest-Update-man-page-and-add-h-option.patch @@ -0,0 +1,76 @@ +From 68cba61ce524c40163d5f76ef09f738b69f0c331 Mon Sep 17 00:00:00 2001 +From: John Kacur +Date: Thu, 23 Jan 2020 18:19:34 +0100 +Subject: [PATCH 6/8] rt-tests: ptsematest: Update man page and add -h option + +- Update the man page with the -s or --smp option +- Reorder the program help to match the man page +- Make the -h option work correctly + +Signed-off-by: John Kacur +--- + src/ptsematest/ptsematest.8 | 3 +++ + src/ptsematest/ptsematest.c | 10 ++++++---- + 2 files changed, 9 insertions(+), 4 deletions(-) + +diff --git a/src/ptsematest/ptsematest.8 b/src/ptsematest/ptsematest.8 +index 4bb1434babf4..8f76bca4b6a8 100644 +--- a/src/ptsematest/ptsematest.8 ++++ b/src/ptsematest/ptsematest.8 +@@ -35,6 +35,9 @@ Set the number of loops. The default is 0 (endless). This option is useful for a + .B \-p, \-\-prio=PRIO + Set the priority of the process. + .TP ++.B \-s, \-\-smp ++SMP testing: options -a -t and same priority ++.TP + .B \-t, \-\-threads[=NUM] + Set the number of test threads (default is 1, if this option is not given). If NUM is specified, create NUM test threads. If NUM is not specified, NUM is set to the number of available CPUs. + .SH "EXAMPLES" +diff --git a/src/ptsematest/ptsematest.c b/src/ptsematest/ptsematest.c +index 78fa444c5578..485c991ec173 100644 +--- a/src/ptsematest/ptsematest.c ++++ b/src/ptsematest/ptsematest.c +@@ -154,10 +154,10 @@ static void display_help(void) + " with NUM pin all threads to the processor NUM\n" + "-b USEC --breaktrace=USEC send break trace command when latency > USEC\n" + "-d DIST --distance=DIST distance of thread intervals in us default=500\n" +- "-i INTV --interval=INTV base interval of thread in us default=1000\n" +- "-l LOOPS --loops=LOOPS number of loops: default=0(endless)\n" + "-D --duration=TIME specify a length for the test run.\n" + " Append 'm', 'h', or 'd' to specify minutes, hours or days.\n" ++ "-i INTV --interval=INTV base interval of thread in us default=1000\n" ++ "-l LOOPS --loops=LOOPS number of loops: default=0(endless)\n" + "-p PRIO --prio=PRIO priority\n" + "-S --smp SMP testing: options -a -t and same priority\n" + " of all threads\n" +@@ -202,7 +202,7 @@ static void process_options (int argc, char *argv[]) + {"help", no_argument, NULL, '?'}, + {NULL, 0, NULL, 0} + }; +- int c = getopt_long (argc, argv, "a::b:d:i:l:D:p:St::", ++ int c = getopt_long (argc, argv, "a::b:d:i:l:D:p:St::h", + long_options, &option_index); + if (c == -1) + break; +@@ -245,6 +245,8 @@ static void process_options (int argc, char *argv[]) + else + num_threads = max_cpus; + break; ++ case 'h': ++ display_help(); + case '?': error = 1; break; + } + } +@@ -275,7 +277,7 @@ static void process_options (int argc, char *argv[]) + sameprio = 1; + + if (error) +- display_help (); ++ display_help(); + } + + +-- +2.20.1 + diff --git a/SOURCES/rt-tests-queuelat-Assume-queuelat-is-in-the-path.patch b/SOURCES/rt-tests-queuelat-Assume-queuelat-is-in-the-path.patch new file mode 100644 index 0000000..1d5f082 --- /dev/null +++ b/SOURCES/rt-tests-queuelat-Assume-queuelat-is-in-the-path.patch @@ -0,0 +1,29 @@ +From 9b3a1e9dcf01fbe8587a1684454a0568b7495504 Mon Sep 17 00:00:00 2001 +From: John Kacur +Date: Wed, 15 Jan 2020 19:37:29 +0100 +Subject: [PATCH] rt-tests: queuelat: Assume queuelat is in the path + +The script determine_maximum_mpps.sh in queuelat hard codes the path to +queuelat. Assume that it is in the path. + +Signed-off-by: John Kacur +--- + src/queuelat/determine_maximum_mpps.sh | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/queuelat/determine_maximum_mpps.sh b/src/queuelat/determine_maximum_mpps.sh +index 52d54c0f9065..f6cf1dea27cf 100755 +--- a/src/queuelat/determine_maximum_mpps.sh ++++ b/src/queuelat/determine_maximum_mpps.sh +@@ -90,7 +90,7 @@ while [ $queuelat_failure == 1 ]; do + echo "$mpps Mpps" + + for i in `seq 1 10`; do +- $PREAMBLE ./queuelat -m $MAXLAT -c $CYCLES_PER_PACKET -f `get_cpuinfo_mhz.sh` -p "$mpps" -t 30 > $OUTFILE ++ $PREAMBLE queuelat -m $MAXLAT -c $CYCLES_PER_PACKET -f `get_cpuinfo_mhz.sh` -p "$mpps" -t 30 > $OUTFILE + exceeded=`grep exceeded $OUTFILE` + + if [ ! -z "$exceeded" ]; then +-- +2.20.1 + diff --git a/SOURCES/rt-tests-queuelat-Fix-some-warnings-in-determine_max.patch b/SOURCES/rt-tests-queuelat-Fix-some-warnings-in-determine_max.patch new file mode 100644 index 0000000..9a7f78a --- /dev/null +++ b/SOURCES/rt-tests-queuelat-Fix-some-warnings-in-determine_max.patch @@ -0,0 +1,86 @@ +From 6a9f1f6d5a19beed45dd81f74a41c18dcd3bd3dc Mon Sep 17 00:00:00 2001 +From: John Kacur +Date: Mon, 11 Nov 2019 22:20:23 +0100 +Subject: [PATCH] rt-tests: queuelat: Fix some warnings in + determine_maximum_mpps.sh + +Coverity advises to quote some values to prevent word splitting and to +export variables separately after declaraing them to avoid masking +errors. + +Fix these warnings + +Signed-off-by: John Kacur +--- + src/queuelat/determine_maximum_mpps.sh | 15 ++++++++------- + 1 file changed, 8 insertions(+), 7 deletions(-) + +diff --git a/src/queuelat/determine_maximum_mpps.sh b/src/queuelat/determine_maximum_mpps.sh +index cd45454720f7..3acd6ba2e362 100755 +--- a/src/queuelat/determine_maximum_mpps.sh ++++ b/src/queuelat/determine_maximum_mpps.sh +@@ -18,7 +18,7 @@ for mpps in `seq 3 3 50`; do + echo testing $mpps Mpps + + OUTFILE=`mktemp` +- $PREAMBLE queuelat -m $MAXLAT -c $CYCLES_PER_PACKET -f `sh get_cpuinfo_mhz.sh` -p $mpps -t 30 > $OUTFILE ++ $PREAMBLE queuelat -m $MAXLAT -c $CYCLES_PER_PACKET -f `sh get_cpuinfo_mhz.sh` -p "$mpps" -t 30 > $OUTFILE + + exceeded=`grep exceeded $OUTFILE` + if [ ! -z "$exceeded" ]; then +@@ -34,7 +34,7 @@ for mpps in `seq $first_mpps -1 3`; do + echo testing $mpps Mpps + + OUTFILE=`mktemp` +- $PREAMBLE queuelat -m $MAXLAT -c $CYCLES_PER_PACKET -f `sh get_cpuinfo_mhz.sh` -p $mpps -t 30 > $OUTFILE ++ $PREAMBLE queuelat -m $MAXLAT -c $CYCLES_PER_PACKET -f `sh get_cpuinfo_mhz.sh` -p "$mpps" -t 30 > $OUTFILE + + exceeded=`grep exceeded $OUTFILE` + if [ -z "$exceeded" ]; then +@@ -51,7 +51,7 @@ for mpps in `seq $second_mpps 0.3 $first_mpps`; do + echo testing $mpps Mpps + + OUTFILE=`mktemp` +- $PREAMBLE queuelat -m $MAXLAT -c $CYCLES_PER_PACKET -f `sh get_cpuinfo_mhz.sh` -p $mpps -t 30 > $OUTFILE ++ $PREAMBLE queuelat -m $MAXLAT -c $CYCLES_PER_PACKET -f `sh get_cpuinfo_mhz.sh` -p "$mpps" -t 30 > $OUTFILE + + exceeded=`grep exceeded $OUTFILE` + if [ ! -z "$exceeded" ]; then +@@ -68,7 +68,7 @@ for mpps in `seq $third_mpps -0.1 3`; do + echo testing $mpps Mpps + + OUTFILE=`mktemp` +- $PREAMBLE queuelat -m $MAXLAT -c $CYCLES_PER_PACKET -f `sh get_cpuinfo_mhz.sh` -p $mpps -t 30 > $OUTFILE ++ $PREAMBLE queuelat -m $MAXLAT -c $CYCLES_PER_PACKET -f `sh get_cpuinfo_mhz.sh` -p "$mpps" -t 30 > $OUTFILE + + exceeded=`grep exceeded $OUTFILE` + if [ -z "$exceeded" ]; then +@@ -87,13 +87,14 @@ while [ $queuelat_failure == 1 ]; do + echo "$mpps Mpps" + + for i in `seq 1 10`; do +- $PREAMBLE ./queuelat -m $MAXLAT -c $CYCLES_PER_PACKET -f `get_cpuinfo_mhz.sh` -p $mpps -t 30 > $OUTFILE ++ $PREAMBLE ./queuelat -m $MAXLAT -c $CYCLES_PER_PACKET -f `get_cpuinfo_mhz.sh` -p "$mpps" -t 30 > $OUTFILE + exceeded=`grep exceeded $OUTFILE` + + if [ ! -z "$exceeded" ]; then + echo "mpps failure (run $i) $mpps" + export queuelat_failure=1 +- export mpps=`echo $mpps - 0.1 | bc` ++ mpps=`echo $mpps - 0.1 | bc` ++ export mpps + break + fi + echo "run $i success" +@@ -109,7 +110,7 @@ while [ $queuelat_failure == 1 ]; do + echo -n "Starting 10 minutes run with " + echo "$mpps Mpps" + +- $PREAMBLE queuelat -m $MAXLAT -c $CYCLES_PER_PACKET -f `get_cpuinfo_mhz.sh` -p $mpps -t 600 > $OUTFILE ++ $PREAMBLE queuelat -m $MAXLAT -c $CYCLES_PER_PACKET -f `get_cpuinfo_mhz.sh` -p "$mpps" -t 600 > $OUTFILE + exceeded=`grep exceeded $OUTFILE` + + if [ ! -z "$exceeded" ]; then +-- +2.20.1 + diff --git a/SOURCES/rt-tests-queuelat-Fixes-to-man-page-and-display_help.patch b/SOURCES/rt-tests-queuelat-Fixes-to-man-page-and-display_help.patch new file mode 100644 index 0000000..0a5e2de --- /dev/null +++ b/SOURCES/rt-tests-queuelat-Fixes-to-man-page-and-display_help.patch @@ -0,0 +1,80 @@ +From d823298c8b09b9cc406b272ea91cc2b5d697cc08 Mon Sep 17 00:00:00 2001 +From: John Kacur +Date: Thu, 23 Jan 2020 19:17:21 +0100 +Subject: [PATCH 7/8] rt-tests: queuelat: Fixes to man page and display_help + +- Make sure that help is displayed and not just the message +"Unknown option" when the options are incorrect. +- Add -q to the man page and to the print_help() + +Signed-off-by: John Kacur +--- + src/queuelat/queuelat.8 | 4 +++- + src/queuelat/queuelat.c | 22 +++++++++++++--------- + 2 files changed, 16 insertions(+), 10 deletions(-) + +diff --git a/src/queuelat/queuelat.8 b/src/queuelat/queuelat.8 +index d68beb98bff7..f67a0bb7556e 100644 +--- a/src/queuelat/queuelat.8 ++++ b/src/queuelat/queuelat.8 +@@ -52,7 +52,9 @@ TSC frequency in MHz. + .TP + .B \-t timeout + Timeout in seconds to quit the program. +- ++.TP ++.B \-q min_queue_len_to_print_trace ++Minimum queue length to print in the trace + + .SH AUTHOR + queuelat was written by Marcelo Tosatti +diff --git a/src/queuelat/queuelat.c b/src/queuelat/queuelat.c +index 98346f346f82..7e5e35768a8b 100644 +--- a/src/queuelat/queuelat.c ++++ b/src/queuelat/queuelat.c +@@ -571,6 +571,7 @@ void print_help(void) + printf("-p million-packet-per-sec (million packets per second) (float)\n"); + printf("-f tsc-freq-mhz (TSC frequency in MHz) (float)\n"); + printf("-t timeout (timeout, in seconds) (int)\n"); ++ printf("-q min_queue_len_to_print_trace (int)\n"); + } + + int main(int argc, char **argv) +@@ -616,22 +617,25 @@ int main(int argc, char **argv) + return 0; + case '?': + if (optopt == 'm' || optopt == 'c' || optopt == 'p' || +- optopt == 'f' || optopt == 't' || optopt == 'q') ++ optopt == 'f' || optopt == 't' || optopt == 'q') { + printf ("Option -%c requires an argument.\n", optopt); +- else if (isprint (optopt)) ++ } else if (isprint (optopt)) { + printf ("Unknown option `-%c'.\n", optopt); +- else +- printf ( "Unknown option character `\\x%x'.\n", +- +-optopt); ++ print_help(); ++ return 1; ++ } else { ++ printf ( "Unknown option character `\\x%x'.\n", optopt); ++ print_help(); + return 1; +- default: +- abort (); ++ } ++ break; ++ default: ++ abort (); + } + + if (mvalue == NULL || cvalue == NULL || pvalue == NULL || + fvalue == NULL) { +- printf("options -m, -c, -p and -f required.\n"); ++ printf("options -m, -c, -p and -f are required.\n"); + printf("usage: %s -m maxlatency -c cycles_per_packet -p mpps(million-packet-per-sec) -f tsc_freq_mhz [-t timeout (in secs)] [-q min_queue_len_to_print_trace]\n", argv[0]); + return 1; + } +-- +2.20.1 + diff --git a/SOURCES/rt-tests-queuelat-get_cpuinfo_mhz.sh-highest-value.patch b/SOURCES/rt-tests-queuelat-get_cpuinfo_mhz.sh-highest-value.patch new file mode 100644 index 0000000..9164ee2 --- /dev/null +++ b/SOURCES/rt-tests-queuelat-get_cpuinfo_mhz.sh-highest-value.patch @@ -0,0 +1,37 @@ +From 99f69126221ad8e3abd723576e638e270ab9deb3 Mon Sep 17 00:00:00 2001 +From: John Kacur +Date: Fri, 17 Jan 2020 18:19:19 +0100 +Subject: [PATCH 5/5] rt-tests: queuelat: get_cpuinfo_mhz.sh highest value + +get_cpuinfo_mhz.sh greps for the Mhz from the /proc/cpuinfo file +It assumes that for multiple cpus the value will be the same, and +intends to return one value using uniq as a filter. + +Typically the reported Mhz values can all be slightly different though +It would probably be good enough to simply take the first match as a +heuristic, but to be safe, take the highest number. + +Also replace the legacy backticks with the modern $(...) construct, and +quote the $mhz variable. + +Signed-off-by: John Kacur +--- + src/queuelat/get_cpuinfo_mhz.sh | 5 ++--- + 1 file changed, 2 insertions(+), 3 deletions(-) + +diff --git a/src/queuelat/get_cpuinfo_mhz.sh b/src/queuelat/get_cpuinfo_mhz.sh +index eafdd9577424..14a2c12c478f 100755 +--- a/src/queuelat/get_cpuinfo_mhz.sh ++++ b/src/queuelat/get_cpuinfo_mhz.sh +@@ -3,6 +3,5 @@ + # SPDX-License-Identifier: GPL-2.0-or-later + # Copyright (C) 2018 Marcelo Tosatti + +-mhz=`cat /proc/cpuinfo | grep "cpu MHz" | uniq | cut -f 3 -d " "` +-echo $mhz +- ++mhz=$(grep "cpu MHz" /proc/cpuinfo | cut -f 3 -d " " | sort -rn | head -n1) ++echo "$mhz" +-- +2.20.1 + diff --git a/SOURCES/rt-tests-ssdd-Add-a-simple-manpage-for-ssdd.patch b/SOURCES/rt-tests-ssdd-Add-a-simple-manpage-for-ssdd.patch deleted file mode 100644 index 341299f..0000000 --- a/SOURCES/rt-tests-ssdd-Add-a-simple-manpage-for-ssdd.patch +++ /dev/null @@ -1,65 +0,0 @@ -From e86709cd38349514dddbef0bf2b43c1d459797d3 Mon Sep 17 00:00:00 2001 -From: John Kacur -Date: Fri, 14 Jun 2019 15:03:26 +0200 -Subject: [PATCH] rt-tests: ssdd: Add a simple manpage for ssdd - -Add a simple manpage to rt-tests for ssdd, and modify the manpage to -install it - -Signed-off-by: John Kacur ---- - Makefile | 1 + - src/ssdd/ssdd.8 | 29 +++++++++++++++++++++++++++++ - 2 files changed, 30 insertions(+) - create mode 100644 src/ssdd/ssdd.8 - -diff --git a/Makefile b/Makefile -index ea80923918f7..0258fe9b6dfd 100644 ---- a/Makefile -+++ b/Makefile -@@ -194,6 +194,7 @@ install: all install_hwlatdetect - gzip -c src/pi_tests/pip_stress.8 >"$(DESTDIR)$(mandir)/man8/pip_stress.8.gz" - gzip -c src/queuelat/queuelat.8 >"$(DESTDIR)$(mandir)/man8/queuelat.8.gz" - gzip -c src/sched_deadline/deadline_test.8 >"$(DESTDIR)$(mandir)/man8/deadline_test.8.gz" -+ gzip -c src/ssdd/ssdd.8 >"$(DESTDIR)$(mandir)/man8/ssdd.8.gz" - - .PHONY: install_hwlatdetect - install_hwlatdetect: hwlatdetect -diff --git a/src/ssdd/ssdd.8 b/src/ssdd/ssdd.8 -new file mode 100644 -index 000000000000..44638489f0d1 ---- /dev/null -+++ b/src/ssdd/ssdd.8 -@@ -0,0 +1,29 @@ -+.TH SSDD 8 "June 13, 2019" -+.SH NAME -+ssdd \- have a tracer do a bunch of PTRACE_SINGLESTEPs -+.SH SYNOPSIS -+.B ssdd -+.RI "[nforks] [niters]" -+.SH DESCRIPTION -+Have a tracer do a bunch of PTRACE_SINGLESTEPs against -+a tracee as fast as possible. Create several of these -+tracer/tracee pairs and see if they can be made to -+interfere with each other. -+The tracer waits on each PTRACE_SINGLESTEP with a waitpid(2) -+and checks that waitpid's return values for correctness. -+.SH OPTIONS -+.B nforks -+number of tracer/tracee pairs to fork off. -+Default is 10. -+.br -+.TP -+.B niters -+number of PTRACE_SINGLESTEP iterations to -+do before declaring success, for each tracer/ -+tracee pair set up. Default is 10,000. -+ -+.SH AUTHOR -+ssdd was written by Joe Korty -+.PP -+This manual page was written by John Kacur -+ --- -2.20.1 - diff --git a/SOURCES/rt-tests-ssdd-Add-short-and-long-functions-and-help.patch b/SOURCES/rt-tests-ssdd-Add-short-and-long-functions-and-help.patch new file mode 100644 index 0000000..0fc561c --- /dev/null +++ b/SOURCES/rt-tests-ssdd-Add-short-and-long-functions-and-help.patch @@ -0,0 +1,123 @@ +From a6f1ab221f80e2f2e1d1f184710ab65c35ed5b36 Mon Sep 17 00:00:00 2001 +From: John Kacur +Date: Tue, 12 Nov 2019 01:21:09 +0100 +Subject: [PATCH] rt-tests: ssdd: Add short and long functions as well as help + +Add short and long functions as well as help to make ssdd consistent +with the rest of the test suite. Add a help function as well + +Signed-off-by: John Kacur +--- + src/ssdd/ssdd.8 | 10 +++++++--- + src/ssdd/ssdd.c | 45 +++++++++++++++++++++++++++++++++++++++------ + 2 files changed, 46 insertions(+), 9 deletions(-) + +diff --git a/src/ssdd/ssdd.8 b/src/ssdd/ssdd.8 +index 44638489f0d1..99f30145d079 100644 +--- a/src/ssdd/ssdd.8 ++++ b/src/ssdd/ssdd.8 +@@ -3,7 +3,7 @@ + ssdd \- have a tracer do a bunch of PTRACE_SINGLESTEPs + .SH SYNOPSIS + .B ssdd +-.RI "[nforks] [niters]" ++.RI "" + .SH DESCRIPTION + Have a tracer do a bunch of PTRACE_SINGLESTEPs against + a tracee as fast as possible. Create several of these +@@ -12,15 +12,19 @@ interfere with each other. + The tracer waits on each PTRACE_SINGLESTEP with a waitpid(2) + and checks that waitpid's return values for correctness. + .SH OPTIONS +-.B nforks ++.B \-f, \-\-forks + number of tracer/tracee pairs to fork off. + Default is 10. + .br + .TP +-.B niters ++.B \-i, \-\-iters + number of PTRACE_SINGLESTEP iterations to + do before declaring success, for each tracer/ + tracee pair set up. Default is 10,000. ++.br ++.TP ++.B \-h, \-\-help ++Display usage + + .SH AUTHOR + ssdd was written by Joe Korty +diff --git a/src/ssdd/ssdd.c b/src/ssdd/ssdd.c +index 2c3a779be9f1..080ed17107a8 100644 +--- a/src/ssdd/ssdd.c ++++ b/src/ssdd/ssdd.c +@@ -27,6 +27,7 @@ + #include + #include + #include ++#include + #include + #include + #include +@@ -65,6 +66,17 @@ static const char *get_state_name(int state) + + static int got_sigchld; + ++enum option_value { OPT_NFORKS=1, OPT_NITERS, OPT_HELP }; ++ ++static void usage() ++{ ++ printf("ssdd \n"); ++ printf("\t-f --forks=\n"); ++ printf("\t-i --iters=\n"); ++ printf("\t-h --help\n"); ++ exit(0); ++} ++ + static int do_wait(pid_t *wait_pid, int *ret_sig) + { + int status, child_status; +@@ -276,13 +288,34 @@ int main(int argc, char **argv) + + setbuf(stdout, NULL); + +- argc--, argv++; +- if (argc) { +- nforks = atoi(*argv); +- argc--, argv++; +- if (argc) +- nsteps = atoi(*argv); ++ for (;;) { ++ int option_index = 0; ++ ++ static struct option long_options[] = { ++ {"forks", required_argument, NULL, OPT_NFORKS}, ++ {"iters", required_argument, NULL, OPT_NITERS}, ++ {"help", no_argument, NULL, OPT_HELP}, ++ {NULL, 0, NULL, 0}, ++ }; ++ int c = getopt_long(argc, argv, "f:i:h", long_options, &option_index); ++ if (c == -1) ++ break; ++ switch(c) { ++ case 'f': ++ case OPT_NFORKS: ++ nforks = atoi(optarg); ++ break; ++ case 'i': ++ case OPT_NITERS: ++ nsteps = atoi(optarg); ++ break; ++ case 'h': ++ case OPT_HELP: ++ usage(); ++ break; ++ } + } ++ + printf("#main : %d\n", getpid()); + printf("#forks: %d\n", nforks); + printf("#steps: %d\n", nsteps); +-- +2.20.1 + diff --git a/SOURCES/rt-tests-svsematest-Display-help-with-an-error-msg.patch b/SOURCES/rt-tests-svsematest-Display-help-with-an-error-msg.patch new file mode 100644 index 0000000..4fa8492 --- /dev/null +++ b/SOURCES/rt-tests-svsematest-Display-help-with-an-error-msg.patch @@ -0,0 +1,37 @@ +From 7437ee24d0638a27a5d5ca84389dafe320a7dc5b Mon Sep 17 00:00:00 2001 +From: John Kacur +Date: Thu, 23 Jan 2020 19:59:26 +0100 +Subject: [PATCH 8/8] rt-tests: svsematest: Display help with an error message + for -h + +Display help without an error message if the user uses the -h option + +Signed-off-by: John Kacur +--- + src/svsematest/svsematest.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/src/svsematest/svsematest.c b/src/svsematest/svsematest.c +index 7c15393fe1be..023a303fd7df 100644 +--- a/src/svsematest/svsematest.c ++++ b/src/svsematest/svsematest.c +@@ -281,7 +281,7 @@ static void process_options (int argc, char *argv[]) + {"help", no_argument, NULL, '?'}, + {NULL, 0, NULL, 0} + }; +- int c = getopt_long (argc, argv, "a::b:d:f::i:l:D:p:St::", ++ int c = getopt_long (argc, argv, "a::b:d:f::i:l:D:p:St::h", + long_options, &option_index); + if (c == -1) + break; +@@ -335,6 +335,7 @@ static void process_options (int argc, char *argv[]) + else + num_threads = max_cpus; + break; ++ case 'h': error = 1; break; + case '?': error = 1; break; + } + } +-- +2.20.1 + diff --git a/SOURCES/sigwaittest-Increase-buffer-to-avoid-overflow.patch b/SOURCES/sigwaittest-Increase-buffer-to-avoid-overflow.patch new file mode 100644 index 0000000..a91e436 --- /dev/null +++ b/SOURCES/sigwaittest-Increase-buffer-to-avoid-overflow.patch @@ -0,0 +1,39 @@ +From 2d101866365ac75e29cfc9800ca569802fee64c7 Mon Sep 17 00:00:00 2001 +From: Daniel Wagner +Date: Mon, 19 Aug 2019 08:43:02 +0200 +Subject: [PATCH 02/10] sigwaittest: Increase buffer to avoid overflow +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Increase the size of the char buffer. gcc 9.1.1 reports: + +src/sigwaittest/sigwaittest.c:494:5: note: ‘sprintf’ output between 5 and 14 bytes into a destination of size 8 + 494 | sprintf(f_opt, "-fr%d", i); + | ^~~~~~~~~~~~~~~~~~~~~~~~~~ +src/sigwaittest/sigwaittest.c:522:24: warning: ‘%d’ directive writing between 1 and 10 bytes into a region of size 5 [-Wformat-overflow=] + 522 | sprintf(f_opt, "-fs%d", i); + | ^~ + +Signed-off-by: Daniel Wagner +Signed-off-by: John Kacur +--- + src/sigwaittest/sigwaittest.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/sigwaittest/sigwaittest.c b/src/sigwaittest/sigwaittest.c +index 59f28a5babcb..2d0c04132fa7 100644 +--- a/src/sigwaittest/sigwaittest.c ++++ b/src/sigwaittest/sigwaittest.c +@@ -352,7 +352,7 @@ int main(int argc, char *argv[]) + struct params *sender = NULL; + sigset_t sigset; + void *param = NULL; +- char f_opt[8]; ++ char f_opt[14]; + struct timespec launchdelay, maindelay; + + process_options(argc, argv); +-- +2.20.1 + diff --git a/SOURCES/ssdd-change-the-written-pid.patch b/SOURCES/ssdd-change-the-written-pid.patch deleted file mode 100644 index 7ff2e91..0000000 --- a/SOURCES/ssdd-change-the-written-pid.patch +++ /dev/null @@ -1,48 +0,0 @@ -From 153c8171e07d88260b4d40fc7894eca220bbee5b Mon Sep 17 00:00:00 2001 -From: Sebastian Andrzej Siewior -Date: Tue, 15 Jan 2019 11:32:26 +0100 -Subject: [PATCH 5/5] ssdd: change the written pid - -During debugging it turned out to be helpful to see the parent pid -and mostly the two tasks interact with each other: the tracer and -tracee. -Add this information it can searched for it. - -Signed-off-by: Sebastian Andrzej Siewior -Signed-off-by: John Kacur ---- - src/ssdd/ssdd.c | 4 +++- - 1 file changed, 3 insertions(+), 1 deletion(-) - -diff --git a/src/ssdd/ssdd.c b/src/ssdd/ssdd.c -index 68a426266dd9..4e293586526e 100644 ---- a/src/ssdd/ssdd.c -+++ b/src/ssdd/ssdd.c -@@ -144,7 +144,6 @@ static int forktests(int testid) - struct sigaction act, oact; - - parent = getpid(); -- printf("forktest#%d/%d: STARTING\n", testid, parent); - - child = fork(); - if (child == -1) { -@@ -155,6 +154,8 @@ static int forktests(int testid) - if (!child) - child_process(); - -+ printf("forktest#%d/%d/%d: STARTING\n", testid, parent, child); -+ - act.sa_sigaction = sigchld; - sigemptyset(&act.sa_mask); - act.sa_flags = SA_SIGINFO; -@@ -275,6 +276,7 @@ int main(int argc, char **argv) - if (argc) - nsteps = atoi(*argv); - } -+ printf("#main : %d\n", getpid()); - printf("#forks: %d\n", nforks); - printf("#steps: %d\n", nsteps); - printf("\n"); --- -2.20.1 - diff --git a/SOURCES/ssdd-make-every-function-static.patch b/SOURCES/ssdd-make-every-function-static.patch deleted file mode 100644 index 6f9620a..0000000 --- a/SOURCES/ssdd-make-every-function-static.patch +++ /dev/null @@ -1,61 +0,0 @@ -From c3521e2c81e99078e7d32c43ddbd2287c67ff859 Mon Sep 17 00:00:00 2001 -From: Sebastian Andrzej Siewior -Date: Tue, 15 Jan 2019 11:32:24 +0100 -Subject: [PATCH 3/5] ssdd: make every function static - -Those functions and variables are not used outside of main so they can -be static. - -Signed-off-by: Sebastian Andrzej Siewior -Signed-off-by: John Kacur ---- - src/ssdd/ssdd.c | 12 ++++++------ - 1 file changed, 6 insertions(+), 6 deletions(-) - -diff --git a/src/ssdd/ssdd.c b/src/ssdd/ssdd.c -index 6d09d54e34e1..9b85dfa9d223 100644 ---- a/src/ssdd/ssdd.c -+++ b/src/ssdd/ssdd.c -@@ -37,7 +37,7 @@ - #define STATE_EXITED_TSIG 6 /* exited with termination signal */ - #define STATE_EXITED_ERRSTAT 7 /* exited with non-zero status */ - --char *state_name[] = { -+static char *state_name[] = { - [STATE_EXITED] = "STATE_EXITED", - [STATE_STOPPED] = "STATE_STOPPED", - [STATE_SIGNALED] = "STATE_SIGNALED", -@@ -47,7 +47,7 @@ char *state_name[] = { - [STATE_EXITED_ERRSTAT] = "STATE_EXITED_ERRSTAT" - }; - --const char *get_state_name(int state) -+static const char *get_state_name(int state) - { - if (state < STATE_EXITED || state > STATE_EXITED_ERRSTAT) - return "?"; -@@ -100,7 +100,7 @@ static int do_wait(pid_t *wait_pid, int *ret_sig) - return STATE_UNKNOWN; - } - --int check_sigchld(void) -+static int check_sigchld(void) - { - int i; - /* -@@ -121,9 +121,9 @@ int check_sigchld(void) - return got_sigchld; - } - --pid_t parent; --int nforks = 10; --int nsteps = 10000; -+static pid_t parent; -+static int nforks = 10; -+static int nsteps = 10000; - - static void sigchld(int sig, unused siginfo_t * info, unused void *arg) - { --- -2.20.1 - diff --git a/SOURCES/ssdd-remove-sleeps.patch b/SOURCES/ssdd-remove-sleeps.patch deleted file mode 100644 index 6db562c..0000000 --- a/SOURCES/ssdd-remove-sleeps.patch +++ /dev/null @@ -1,53 +0,0 @@ -From b9f812a0c49584d82c37582c7523a5808628b985 Mon Sep 17 00:00:00 2001 -From: Sebastian Andrzej Siewior -Date: Tue, 15 Jan 2019 11:32:25 +0100 -Subject: [PATCH 4/5] ssdd: remove sleeps -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -There two sleep functions which ensure that the forked function sleeps -and does not spin until everything is setup. There is no need for that, -the scheduler will take care of that anyway. Also that sleep may -complete before or after the testcase starts. If it completes afterwards -then the testcase waits to start so… - -Remove the sleep, it does change the outcome of the testcase. - -Signed-off-by: Sebastian Andrzej Siewior -Signed-off-by: John Kacur ---- - src/ssdd/ssdd.c | 9 +-------- - 1 file changed, 1 insertion(+), 8 deletions(-) - -diff --git a/src/ssdd/ssdd.c b/src/ssdd/ssdd.c -index 9b85dfa9d223..68a426266dd9 100644 ---- a/src/ssdd/ssdd.c -+++ b/src/ssdd/ssdd.c -@@ -132,12 +132,8 @@ static void sigchld(int sig, unused siginfo_t * info, unused void *arg) - - static void child_process(void) - { -- unused volatile int i; -- -- /* wait for ptrace attach */ -- usleep(100000); - while (1) -- i = 0; -+ ; - } - - static int forktests(int testid) -@@ -170,9 +166,6 @@ static int forktests(int testid) - exit(1); - } - -- /* give both our child and parent time to set things up */ -- usleep(125000); -- - /* - * Attach to the child. - */ --- -2.20.1 - diff --git a/SOURCES/svsematest-Add-S-smp-option-to-manpage.patch b/SOURCES/svsematest-Add-S-smp-option-to-manpage.patch new file mode 100644 index 0000000..40817cc --- /dev/null +++ b/SOURCES/svsematest-Add-S-smp-option-to-manpage.patch @@ -0,0 +1,32 @@ +From b8a602c2b94a62811b73ee0249526ba6c3ce4437 Mon Sep 17 00:00:00 2001 +From: John Kacur +Date: Fri, 22 Nov 2019 14:59:05 +0100 +Subject: [PATCH] svsematest: Add -S, --smp option to manpage + +The -S, or --smp option is in the help but missing from the manpage. + +We should really revisit these tests as these options have changed a bit +in cyclictest and they are all modeled after cyclictest. + +Signed-off-by: John Kacur +--- + src/svsematest/svsematest.8 | 3 +++ + 1 file changed, 3 insertions(+) + +diff --git a/src/svsematest/svsematest.8 b/src/svsematest/svsematest.8 +index f67ab4c669d3..98322c105803 100644 +--- a/src/svsematest/svsematest.8 ++++ b/src/svsematest/svsematest.8 +@@ -38,6 +38,9 @@ Set the number of loops. The default is 0 (endless). This option is useful for a + .B \-p, \-\-prio=PRIO + Set the priority of the process. + .TP ++.B \-S, \-\-smp ++SMP testing: options -a -t and same priority of all threads ++.TP + .B \-t, \-\-threads[=NUM] + Set the number of test threads (default is 1, if this option is not given). If NUM is specified, create NUM test threads. If NUM is not specified, NUM is set to the number of available CPUs. + .SH "EXAMPLES" +-- +2.20.1 + diff --git a/SOURCES/svsematest-Increase-buffer-to-avoid-overflow.patch b/SOURCES/svsematest-Increase-buffer-to-avoid-overflow.patch new file mode 100644 index 0000000..93dee7d --- /dev/null +++ b/SOURCES/svsematest-Increase-buffer-to-avoid-overflow.patch @@ -0,0 +1,39 @@ +From 06519443224b7da5b336040f07bff8f929148426 Mon Sep 17 00:00:00 2001 +From: Daniel Wagner +Date: Mon, 19 Aug 2019 08:43:03 +0200 +Subject: [PATCH 03/10] svsematest: Increase buffer to avoid overflow +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Increase the size of the char buffer. gcc 9.1.1 reports: + +rc/svsematest/svsematest.c:578:24: warning: ‘%d’ directive writing between 1 and 10 bytes into a region of size 5 [-Wformat-overflow=] + 578 | sprintf(f_opt, "-fr%d", i); + | ^~ +src/svsematest/svsematest.c:606:5: note: ‘sprintf’ output between 5 and 14 bytes into a destination of size 8 + 606 | sprintf(f_opt, "-fs%d", i); + | ^~~~~~~~~~~~~~~~~~~~~~~~~~ + +Signed-off-by: Daniel Wagner +Signed-off-by: John Kacur +--- + src/svsematest/svsematest.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/svsematest/svsematest.c b/src/svsematest/svsematest.c +index 8f880786ec0f..15e36af76288 100644 +--- a/src/svsematest/svsematest.c ++++ b/src/svsematest/svsematest.c +@@ -401,7 +401,7 @@ int main(int argc, char *argv[]) + struct params *sender = NULL; + sigset_t sigset; + void *param = NULL; +- char f_opt[8]; ++ char f_opt[14]; + struct timespec launchdelay, maindelay; + + myfile = getenv("_"); +-- +2.20.1 + diff --git a/SPECS/rt-tests.spec b/SPECS/rt-tests.spec index 9c11ee6..612ed74 100644 --- a/SPECS/rt-tests.spec +++ b/SPECS/rt-tests.spec @@ -5,46 +5,47 @@ Name: rt-tests # BuildRequires: numactl-devel # Numa argument to make: NUMA=1 # -Version: 1.3 -Release: 21%{?dist} +Version: 1.5 +Release: 18%{?dist} License: GPLv2 Group: Development/Tools URL: git://git.kernel.org/pub/scm/utils/rt-tests/rt-tests.git -Source0: https://www.kernel.org/pub/linux/utils/rt-tests/%{name}-%{version}.tar.gz - -Patch1: cyclictest-remove-ftrace-code.patch -Patch2: rt-tests-Makefile-Change-syntax-for-python3.patch -Patch3: Remove-numa-option.patch -Patch4: rt-tests-pi_stress-remove-unused-report-options.patch -Patch5: rt-tests-pip_stress-Add-an-initial-man-page-for-pip_stress.patch -Patch6: add-h-option-to-queuelat.patch -Patch7: Add-queuelat-manpage.patch -Patch8: rt-tests-manpages-Modify-makefile-for-queuelat.8-and.patch -Patch9: rt-tests-Remove-install-and-build-of-backfire-and-sendme.patch -Patch10: rt-tests-deadline_test-Add-a-manpage.patch -Patch11: rt-tests-cyclictest-Remove-numa-from-help.patch -Patch12: rt-tests-deadline_test-Add-NULL-check-before-freeing.patch -Patch13: queuelat-use-mfence-for-rdtsc-ordering.patch -Patch14: cyclictest-fix_with_expected_identifier_in_latest.patch -Patch15: cyclictest-Fix-compiler-warning-about-srncpy-output.patch -Patch16: cyclictest-Make-sure-affinity-is-respected-when-numa.patch -Patch17: Add-ssdd-test-to-the-rt-tests-suite.patch -Patch18: rt-tests-Makefile-ssdd-Incoroporate-ssdd-into-the-rt.patch -Patch19: ssdd-make-every-function-static.patch -Patch20: ssdd-remove-sleeps.patch -Patch21: ssdd-change-the-written-pid.patch -Patch22: queuelat-Assume-queuelat-and-queuelat-scripts-in-path.patch -Patch23: queuelat-Install-queuelat-helper-scripts-from-make.patch -Patch24: hwlatdetect-disable-enable-c-state-transitions.patch -Patch25: rt-tests-hwlatdetect-Code-clean-up.patch -Patch26: rt-tests-ssdd-Add-a-simple-manpage-for-ssdd.patch -Patch27: ptsematest-sigwaittest-pmqtest-svsematest-reprot-err.patch +Source0: https://www.kernel.org/pub/linux/utils/rt-tests/%{name}-%{version}.tar.xz BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root Obsoletes: cyclictest signaltest pi_tests ExclusiveArch: x86_64 BuildRequires: numactl-devel python3-devel %{?__python3:Requires: %{__python3}} +Requires: bash bc + +#Patches +Patch1: rt-tests-cyclictest-Make-tracemark-work-correctly-ag.patch +Patch2: rt-tests-cyclictest.8-Remove-invalid-tracing-options.patch +Patch3: pmqtest-Increase-buffer-to-avoid-overflow.patch +Patch4: sigwaittest-Increase-buffer-to-avoid-overflow.patch +Patch5: svsematest-Increase-buffer-to-avoid-overflow.patch +Patch6: deadline_test-Increase-buffer-to-avoid-overflow.patch +Patch7: rt-tests-Set-affinity-before-applying-numa.patch +Patch8: rt-tests-cyclictest-Don-t-allow-OPT_SYSTEM-with-OPT_POSIX_TIMERS.patch +Patch9: rt-tests-cyclictest-Fix-warning-cpu-may-be-used-uninitialized.patch +Patch10: rt-tests-cyclictest-Assume-libnuma-version-2-by-defa.patch +Patch11: rt-tests-cyclictest-Just-use-LIBNUMA_API_VERSION-2.patch +Patch12: rt-tests-queuelat-Fix-some-warnings-in-determine_max.patch +Patch13: rt-tests-ssdd-Add-short-and-long-functions-and-help.patch +Patch14: rt-tests-cyclictest-Get-a-snapshot-of-cyclictest.patch +Patch15: rt-tests-Add-SPDX-tags.patch +Patch16: rt-tests-queuelat-Assume-queuelat-is-in-the-path.patch +Patch17: rt-tests-determine_maximum_mpps.sh-Fix-quoting-and-o.patch +Patch18: rt-tests-queuelat-get_cpuinfo_mhz.sh-highest-value.patch +Patch19: rt-tests-cyclicdeadline-Add-a-simple-manpage.patch +Patch20: cyclictest-Sync-manpage-with-the-help-option.patch +Patch21: pi_stress-Sync-man-page-with-help.patch +Patch22: rt-tests-pi_stress-Add-short-options-to-usage-msg.patch +Patch23: svsematest-Add-S-smp-option-to-manpage.patch +Patch24: rt-tests-ptsematest-Update-man-page-and-add-h-option.patch +Patch25: rt-tests-queuelat-Fixes-to-man-page-and-display_help.patch +Patch26: rt-tests-svsematest-Display-help-with-an-error-msg.patch %description rt-tests is a set of programs that test and measure various components of @@ -79,7 +80,6 @@ latency. It also tests the functioning of priority-inheritance mutexes. %patch24 -p1 %patch25 -p1 %patch26 -p1 -%patch27 -p1 %build make NUMA=1 HAVE_PARSE_CPUSTRING_ALL=1 @@ -128,9 +128,91 @@ rm -rf $RPM_BUILD_ROOT /usr/share/man/man8/pip_stress.8.gz /usr/share/man/man8/queuelat.8.gz /usr/share/man/man8/deadline_test.8.gz +/usr/share/man/man8/cyclicdeadline.8.gz /usr/share/man/man8/ssdd.8.gz %changelog +* Thu Jan 23 2020 John Kacur - 1.5-18 +- Add a man page for cyclicdeadline +- Sync cyclictest man page with the help option +- Sync pi_stress man page with the help option +- Add pi_stress short options to usage message +- Add -S --smp to svsematest man page +- Update ptsematest man page and add -h option +- queuelat man page and help fixes +- display svsematest help without an error message +Resolves: rhbz#1766656 + +* Fri Jan 17 2020 John Kacur - 1.5-17 +- Fix more quoting problems to prevent work splitting +- get_cpuinfo_mhz.sh should print one value +Resolves: rhbz#1719493 + +* Wed Jan 15 2020 John Kacur - 1.5-16 +- Fix hardcoded path to queuelat in determine_maximum_mpps.sh +Resolves: rhbz#1791403 + +* Mon Nov 25 2019 John Kacur - 1.5-15 +- Respun Add SPDX tags patch to correct two incorrect licenes +Resolves: rhbz#1721215 + +* Mon Nov 25 2019 John Kacur - 1.5-14 +- Add SPDX tags +Resolves: rhbz#1721215 + +* Fri Nov 22 2019 John Kacur - 1.5-13 +- Improved version of getting a snapshot of cyclictest without interrupting +- Fixes some problems uncovered by covscan +Resolves: rhbz#1469185 + +* Tue Nov 19 2019 John Kacur - 1.5-12 +- Get a running snapshot of cyclictest without interrupting it +Resolves: rhbz#1469185 + +* Tue Nov 12 2019 John Kacur - 1.5-11 +- Add short and long options and help to ssdd +Resolves: rhbz#1720360 + +* Mon Nov 11 2019 John Kacur - 1.5-10 +- Fix some warnings in determine_maximum_mpps.sh +Resolves: rhbz#1719493 + +* Wed Oct 30 2019 John Kacur - 1.5-9 +-Use libnuma version 2 by default +Resolves: rhbz#1753758 + +* Wed Oct 30 2019 John Kacur - 1.5-8 +- Don't allow OPT_SYSTEM with OPT_POSIX_TIMERS +Resolves: rhbz#1753026 + +* Wed Oct 30 2019 John Kacur - 1.5-7 +- Set affinity before applying numa +Resolves: rhbz#1749958 + +* Tue Oct 29 2019 John Kacur - 1.5-6 +- Increase buffers to avoid overflow +Resolves: rhbz#1753317 + +* Fri Oct 25 2019 John Kacur - 1.5-5 +- Remove invalid / obsolete tracing options from cyclictest manpage +Resolves: rhbz#1749238 + +* Fri Oct 25 2019 John Kacur - 1.5-4 +- Make tracemark work correctly again +Resolves: rhbz#1725134 + +* Wed Oct 23 2019 John Kacur - 1.5-3 +- Add Requires bc for queuelat +Resolves: rhbz#1764290 + +* Tue Oct 15 2019 John Kacur - 1.5-2 +- Add bash as a Require in the spec file, since the suite contains some scripts +Resolves: rhbz#1744983 + +* Tue Oct 15 2019 John Kacur - 1.5-1 +- Rebase to upstream rt-tests-1.5 +Resolves: rhbz#1722521 + * Wed Jul 31 2019 John Kacur - 1.3-21 - Fix problem when tests use tracing_enabled which is no longer supported Resolves: rhbz#1731336