diff --git a/.gitignore b/.gitignore index cda655d..d52a338 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1 @@ -SOURCES/rt-tests-1.5.tar.xz +SOURCES/rt-tests-1.8.tar.xz diff --git a/.rt-tests.metadata b/.rt-tests.metadata index 76fa2df..77a85ed 100644 --- a/.rt-tests.metadata +++ b/.rt-tests.metadata @@ -1 +1 @@ -13ef79a90a810103e8a0fa5da92544b5d31c3838 SOURCES/rt-tests-1.5.tar.xz +50737a762ff27d6440798f10a33f720f476e1438 SOURCES/rt-tests-1.8.tar.xz diff --git a/SOURCES/cyclictest-Fix-setaffinity-error-on-large-NUMA-machines.patch b/SOURCES/cyclictest-Fix-setaffinity-error-on-large-NUMA-machines.patch new file mode 100644 index 0000000..96084c2 --- /dev/null +++ b/SOURCES/cyclictest-Fix-setaffinity-error-on-large-NUMA-machines.patch @@ -0,0 +1,84 @@ +From b07c57b33e4e24e873e680b8327f9be4f321caa9 Mon Sep 17 00:00:00 2001 +From: Yunfeng Ye +Date: Wed, 22 Apr 2020 10:19:52 +0800 +Subject: [PATCH] cyclictest: Fix setaffinity error on large NUMA machines + +An Error occurs when run: ./cyclictest -v -t 5 -p 80 -i 1000 -a 3 + +On large NUMA machines still getting the following error +WARN: Couldn't setaffinity in main thread: Invalid argument + +Instead of calling numa_bitmask_alloc() with max_cpus, use +numa_allocate_cpumask() to fix this. + +Also, make sure numa_available() is called before any other calls to the +numa library. Depending on how the options were invoked this could +happen in parse_cpumask for example. Note, this did not seem to cause +any problems in practice, but let's adhere to the library contract. + +Signed-off-by: John Kacur +--- + src/cyclictest/cyclictest.c | 26 +++++++++++++++++++------- + 1 file changed, 19 insertions(+), 7 deletions(-) + +diff --git a/src/cyclictest/cyclictest.c b/src/cyclictest/cyclictest.c +index c5f1fd46567a..79bb1cb71c68 100644 +--- a/src/cyclictest/cyclictest.c ++++ b/src/cyclictest/cyclictest.c +@@ -1135,7 +1135,7 @@ static void use_current_cpuset(const int max_cpus) + + pid = getpid(); + +- curmask = numa_bitmask_alloc(sizeof(struct bitmask)); ++ curmask = numa_allocate_cpumask(); + numa_sched_getaffinity(pid, curmask); + + /* Clear bits that are not set in both the cpuset from the environment, +@@ -1225,6 +1225,20 @@ enum option_values { + OPT_TRACEMARK, OPT_POSIX_TIMERS, + }; + ++/* numa_available() must be called before any other calls to the numa library */ ++static void numa_initialize(void) ++{ ++ static int is_initialized; ++ ++ if (is_initialized == 1) ++ return; ++ ++ if (numa_available() != -1) ++ numa = 1; ++ ++ is_initialized = 1; ++} ++ + /* Process commandline options */ + static void process_options (int argc, char *argv[], int max_cpus) + { +@@ -1288,6 +1302,7 @@ static void process_options (int argc, char *argv[], int max_cpus) + /* smp sets AFFINITY_USEALL in OPT_SMP */ + if (smp) + break; ++ numa_initialize(); + if (optarg != NULL) { + parse_cpumask(optarg, max_cpus); + setaffinity = AFFINITY_SPECIFIED; +@@ -1460,12 +1475,9 @@ 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) { +- numa = 1; +- if (setaffinity == AFFINITY_UNSPECIFIED) { +- setaffinity = AFFINITY_USEALL; +- } +- } ++ numa_initialize(); ++ if (setaffinity == AFFINITY_UNSPECIFIED) ++ setaffinity = AFFINITY_USEALL; + #else + warn("cyclictest was not built with the numa option\n"); + numa = 0; +-- +2.21.3 + diff --git a/SOURCES/deadline_test-Increase-buffer-to-avoid-overflow.patch b/SOURCES/deadline_test-Increase-buffer-to-avoid-overflow.patch deleted file mode 100644 index c7ae585..0000000 --- a/SOURCES/deadline_test-Increase-buffer-to-avoid-overflow.patch +++ /dev/null @@ -1,42 +0,0 @@ -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/pmqtest-Increase-buffer-to-avoid-overflow.patch b/SOURCES/pmqtest-Increase-buffer-to-avoid-overflow.patch deleted file mode 100644 index 42a0cab..0000000 --- a/SOURCES/pmqtest-Increase-buffer-to-avoid-overflow.patch +++ /dev/null @@ -1,50 +0,0 @@ -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/rt-tests-Add-SPDX-tags.patch b/SOURCES/rt-tests-Add-SPDX-tags.patch deleted file mode 100644 index 57183ff..0000000 --- a/SOURCES/rt-tests-Add-SPDX-tags.patch +++ /dev/null @@ -1,701 +0,0 @@ -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-Set-affinity-before-applying-numa.patch b/SOURCES/rt-tests-Set-affinity-before-applying-numa.patch deleted file mode 100644 index 6ad027e..0000000 --- a/SOURCES/rt-tests-Set-affinity-before-applying-numa.patch +++ /dev/null @@ -1,110 +0,0 @@ -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-cyclictest-Assume-libnuma-version-2-by-defa.patch b/SOURCES/rt-tests-cyclictest-Assume-libnuma-version-2-by-defa.patch deleted file mode 100644 index cd97daf..0000000 --- a/SOURCES/rt-tests-cyclictest-Assume-libnuma-version-2-by-defa.patch +++ /dev/null @@ -1,32 +0,0 @@ -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 deleted file mode 100644 index 824937b..0000000 --- a/SOURCES/rt-tests-cyclictest-Don-t-allow-OPT_SYSTEM-with-OPT_POSIX_TIMERS.patch +++ /dev/null @@ -1,42 +0,0 @@ -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 deleted file mode 100644 index 5501b51..0000000 --- a/SOURCES/rt-tests-cyclictest-Fix-warning-cpu-may-be-used-uninitialized.patch +++ /dev/null @@ -1,33 +0,0 @@ -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 deleted file mode 100644 index 6452685..0000000 --- a/SOURCES/rt-tests-cyclictest-Get-a-snapshot-of-cyclictest.patch +++ /dev/null @@ -1,294 +0,0 @@ -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 deleted file mode 100644 index 0c41da0..0000000 --- a/SOURCES/rt-tests-cyclictest-Just-use-LIBNUMA_API_VERSION-2.patch +++ /dev/null @@ -1,151 +0,0 @@ -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 deleted file mode 100644 index 33765ee..0000000 --- a/SOURCES/rt-tests-cyclictest-Make-tracemark-work-correctly-ag.patch +++ /dev/null @@ -1,68 +0,0 @@ -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.8-Remove-invalid-tracing-options.patch b/SOURCES/rt-tests-cyclictest.8-Remove-invalid-tracing-options.patch deleted file mode 100644 index 7289707..0000000 --- a/SOURCES/rt-tests-cyclictest.8-Remove-invalid-tracing-options.patch +++ /dev/null @@ -1,117 +0,0 @@ -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-queuelat-Fix-some-warnings-in-determine_max.patch b/SOURCES/rt-tests-queuelat-Fix-some-warnings-in-determine_max.patch deleted file mode 100644 index 9a7f78a..0000000 --- a/SOURCES/rt-tests-queuelat-Fix-some-warnings-in-determine_max.patch +++ /dev/null @@ -1,86 +0,0 @@ -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-Fix-storing-unsigned-long-long-int.patch b/SOURCES/rt-tests-queuelat-Fix-storing-unsigned-long-long-int.patch new file mode 100644 index 0000000..c3be1d2 --- /dev/null +++ b/SOURCES/rt-tests-queuelat-Fix-storing-unsigned-long-long-int.patch @@ -0,0 +1,111 @@ +From 41a3f9e53920d50b48c04593bfa3eb0e87fcf49f Mon Sep 17 00:00:00 2001 +From: John Kacur +Date: Tue, 12 May 2020 11:02:39 -0400 +Subject: [PATCH] rt-tests: queuelat: Fix storing unsigned long long in int + +queuelat can occassionally hang because of overflow mixing +unsigned long long and int + +Attaching to process 173912 +Reading symbols from /root/rt-tests/queuelat...done. +Reading symbols from /lib64/librt.so.1...Reading symbols from /usr/lib/debug/usr/lib64/librt-2.28.so.debug...done. +done. +Reading symbols from /lib64/libpthread.so.0...Reading symbols from /usr/lib/debug/usr/lib64/libpthread-2.28.so.debug...done. +done. +[Thread debugging using libthread_db enabled] +Using host libthread_db library "/lib64/libthread_db.so.1". +Reading symbols from /lib64/libc.so.6...Reading symbols from /usr/lib/debug/usr/lib64/libc-2.28.so.debug...done. +done. +Reading symbols from /lib64/ld-linux-x86-64.so.2...Reading symbols from /usr/lib/debug/usr/lib64/ld-2.28.so.debug...done. +done. +__memmove_avx_unaligned_erms () + at ../sysdeps/x86_64/multiarch/memmove-vec-unaligned-erms.S:254 +254 rep movsb +(gdb) c +Continuing. + +Program received signal SIGSEGV, Segmentation fault. +0x0000000000400c02 in account (val=18446744071562067968) + at src/queuelat/queuelat.c:93 +93 buckets[bucket_nr]++; +(gdb) bt full + at src/queuelat/queuelat.c:93 + bucket_nr = -193273529 + a = 825932047802952 + b = 825925371232340 + dest = 0xf322b0 + src = 0xf4e3f0 + i = 45749 + delta = -2147483648 + loops = 50000 + time = 6500 + bucket_nr = 65 + n = 115000 + delta = 3500 + at src/queuelat/queuelat.c:671 + tsc_freq_mhz = 2398.5039999999999 + max_queue_len_f = 159.900284 + mvalue = 0x7ffc99d3021c "20000" + cvalue = 0x7ffc99d30225 "300" + pvalue = 0x7ffc99d30238 "6.1" + fvalue = 0x7ffc99d3022c "2398.504" + tvalue = 0x7ffc99d3023f "30" + qvalue = 0x0 + index = 0 + c = -1 + +Fix the above by declaring delta as an unsigned long long + +Signed-off-by: John Kacur +--- + src/queuelat/queuelat.c | 11 +++++------ + 1 file changed, 5 insertions(+), 6 deletions(-) + +diff --git a/src/queuelat/queuelat.c b/src/queuelat/queuelat.c +index 7e5e35768a8b..22b68a84d6ae 100644 +--- a/src/queuelat/queuelat.c ++++ b/src/queuelat/queuelat.c +@@ -354,9 +354,9 @@ static void trace_write(char *buf, int len) + + static void run_n(int n) + { +- u64 a, b; ++ u64 a, b, delta; + void *dest, *src; +- int i, delta, loops = 50000; ++ int i, loops = 50000; + + init_buckets(); + +@@ -445,9 +445,8 @@ static void print_exit_info(void) + + void main_loop(void) + { +- u64 a, b; ++ u64 a, b, delta; + void *dest, *src; +- int delta; + int queue_size = 0; + + trace_open(); +@@ -500,7 +499,7 @@ void main_loop(void) + continue; + + ret = sprintf(buf, "memmove block queue_size=%d queue_dec=%d" +- " queue_inc=%d delta=%d ns\n", queue_size, ++ " queue_inc=%d delta=%llu ns\n", queue_size, + nr_packets_drain_per_block, + nr_packets_fill, delta); + trace_write(buf, ret); +@@ -536,7 +535,7 @@ static void install_signals(void) + + int calculate_nr_packets_drain_per_block(void) + { +- int maxcount; ++ unsigned long long maxcount; + int i, time; + int found = 0; + int bucket_nr = find_highest_count_bucket(); +-- +2.21.3 + 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 deleted file mode 100644 index 0fc561c..0000000 --- a/SOURCES/rt-tests-ssdd-Add-short-and-long-functions-and-help.patch +++ /dev/null @@ -1,123 +0,0 @@ -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/sigwaittest-Increase-buffer-to-avoid-overflow.patch b/SOURCES/sigwaittest-Increase-buffer-to-avoid-overflow.patch deleted file mode 100644 index a91e436..0000000 --- a/SOURCES/sigwaittest-Increase-buffer-to-avoid-overflow.patch +++ /dev/null @@ -1,39 +0,0 @@ -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/svsematest-Increase-buffer-to-avoid-overflow.patch b/SOURCES/svsematest-Increase-buffer-to-avoid-overflow.patch deleted file mode 100644 index 93dee7d..0000000 --- a/SOURCES/svsematest-Increase-buffer-to-avoid-overflow.patch +++ /dev/null @@ -1,39 +0,0 @@ -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 05d543f..3e5d4c7 100644 --- a/SPECS/rt-tests.spec +++ b/SPECS/rt-tests.spec @@ -5,8 +5,8 @@ Name: rt-tests # BuildRequires: numactl-devel # Numa argument to make: NUMA=1 # -Version: 1.5 -Release: 15%{?dist} +Version: 1.8 +Release: 3%{?dist} License: GPLv2 Group: Development/Tools URL: git://git.kernel.org/pub/scm/utils/rt-tests/rt-tests.git @@ -20,21 +20,8 @@ BuildRequires: numactl-devel python3-devel 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 +Patch1: cyclictest-Fix-setaffinity-error-on-large-NUMA-machines.patch +Patch2: rt-tests-queuelat-Fix-storing-unsigned-long-long-int.patch %description rt-tests is a set of programs that test and measure various components of @@ -45,19 +32,6 @@ latency. It also tests the functioning of priority-inheritance mutexes. %setup -q %patch1 -p1 %patch2 -p1 -%patch3 -p1 -%patch4 -p1 -%patch5 -p1 -%patch6 -p1 -%patch7 -p1 -%patch8 -p1 -%patch9 -p1 -%patch10 -p1 -%patch11 -p1 -%patch12 -p1 -%patch13 -p1 -%patch14 -p1 -%patch15 -p1 %build make NUMA=1 HAVE_PARSE_CPUSTRING_ALL=1 @@ -92,6 +66,9 @@ rm -rf $RPM_BUILD_ROOT /usr/bin/ssdd /usr/bin/determine_maximum_mpps.sh /usr/bin/get_cpuinfo_mhz.sh +/usr/bin/get_cyclictest_snapshot +%{python3_sitelib}/get_cyclictest_snapshot.py* +%{python3_sitelib}/__pycache__/get_cyclictest_snapshot* %doc /usr/share/man/man8/cyclictest.8.gz /usr/share/man/man8/hackbench.8.gz @@ -106,10 +83,43 @@ 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 -* Mon Nov 25 2019 John Kacur - 1.6-15 +* Tue May 12 2020 John Kacur - 1.8-3 +- Fix integer overflow in queuelat +Resolves: rhbz#1803862 + +* Mon May 04 2020 John Kacur - 1.8-2 +- Fix setaffinity error on large numa machines +Resolves: rhbz#1831269 + +* Mon Apr 20 2020 John Kacur - 1.8-1 +- Update to upstream rt-tests-1.8 +Resolves: rhbz#1816370 + +* 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