diff --git a/SOURCES/rt-tests-Add-missing-option-F-to-optstring.patch b/SOURCES/rt-tests-Add-missing-option-F-to-optstring.patch new file mode 100644 index 0000000..d53b11e --- /dev/null +++ b/SOURCES/rt-tests-Add-missing-option-F-to-optstring.patch @@ -0,0 +1,35 @@ +From 419aa72080b78210a0c8ef0c23cf56aeada1d880 Mon Sep 17 00:00:00 2001 +From: Leah Leshchinsky +Date: Mon, 13 Sep 2021 15:29:51 -0400 +Subject: [PATCH] rt-tests: Add missing option F to optstring + +The cyclictest help output lists -F as the short version of the +--fifo option, yet calling cyclictest -F produces an error +cyclictest: invalid option --'F'". +followed by the usage() message + +This patch adds -F as a valid argument. + +Signed-off-by: Leah Leshchinsky +-Minor Fix to the commit message +Signed-off-by: John Kacur +--- + src/cyclictest/cyclictest.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/cyclictest/cyclictest.c b/src/cyclictest/cyclictest.c +index a08c91d..f8f7dbc 100644 +--- a/src/cyclictest/cyclictest.c ++++ b/src/cyclictest/cyclictest.c +@@ -1011,7 +1011,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::uvD:x", ++ int c = getopt_long(argc, argv, "a::A::b:c:d:D:F:h:H:i:l:MNo:p:mqrRsSt::uvD:x", + long_options, &option_index); + if (c == -1) + break; +-- +2.27.0 + diff --git a/SOURCES/rt-tests-cyclicdeadline-Fix-double-mount-of-cgroups.patch b/SOURCES/rt-tests-cyclicdeadline-Fix-double-mount-of-cgroups.patch new file mode 100644 index 0000000..d66e0fc --- /dev/null +++ b/SOURCES/rt-tests-cyclicdeadline-Fix-double-mount-of-cgroups.patch @@ -0,0 +1,87 @@ +From a933af2b82ea90a51a2600cf88cfcc5f2fba9804 Mon Sep 17 00:00:00 2001 +From: John Kacur +Date: Thu, 18 Nov 2021 14:12:23 -0500 +Subject: [PATCH 2/2] rt-tests: cyclicdeadline: Fix double mount of cgroups + +If /sys/fs/cgroup exists and it is type cgroup2, cyclicdeadline mounts it a +second time as cgroup. + +systemd is creating cgroup2 for logins and this can hang the machine and +not allow logins. + +Fix this by: + +If /sys/fs/cgroup exists, then use it for cyclicdeadline_test. + +If it exists but the type is not recognized, exit with an error. +Do not simply mount it as type cgroup. + +TODO: If the file doesn't exit but cgroups are supported in the kernel, +the file could be created and mounted. + +Signed-off-by: John Kacur +--- + src/sched_deadline/cyclicdeadline.c | 39 +++++++++++++++++++++++------ + 1 file changed, 32 insertions(+), 7 deletions(-) + +diff --git a/src/sched_deadline/cyclicdeadline.c b/src/sched_deadline/cyclicdeadline.c +index 4860a40f5e6b..1f9a5df42d4f 100644 +--- a/src/sched_deadline/cyclicdeadline.c ++++ b/src/sched_deadline/cyclicdeadline.c +@@ -358,6 +358,32 @@ static int mounted(const char *path, long magic) + #define CGROUP_PATH "/sys/fs/cgroup" + #define CPUSET_PATH CGROUP_PATH "/cpuset" + ++/** ++ * cgroup_mounted - test if the path /sys/fs/cgroup exists ++ * and is a supported type ++ * ++ * Returns -1 if the path does not exist ++ * Returns 0 if the path exists but is not a cgroup type ++ * Returns 1 if the path exists and supports cgroups ++ */ ++static int cgroup_mounted(void) ++{ ++ int ret; ++ ++ ret = mounted(CGROUP_PATH, TMPFS_MAGIC); ++ if (ret == -1) ++ return -1; /* path doesn't exist */ ++ if (ret == 1) ++ return 1; /* tmpfs */ ++ ret = mounted(CGROUP_PATH, CGROUP_SUPER_MAGIC); ++ if (ret == 1) ++ return 1; /* cgroup v1 */ ++ ret = mounted(CGROUP_PATH, CGROUP2_SUPER_MAGIC); ++ if (ret == 1) ++ return 1; ++ return 0; /* path exists but type is not recognized */ ++} ++ + static int open_cpuset(const char *path, const char *name) + { + char buf[MAXPATH]; +@@ -383,14 +409,13 @@ static int mount_cpuset(void) + int fd; + + /* Check if cgroups is already mounted. */ +- ret = mounted(CGROUP_PATH, TMPFS_MAGIC); +- if (ret < 0) ++ ret = cgroup_mounted(); ++ if (ret < 0) /* /sys/fs/cgroup doesn't exist */ + return ret; +- if (!ret) { +- ret = mount("cgroup_root", CGROUP_PATH, "tmpfs", 0, NULL); +- if (ret < 0) +- return ret; +- } ++ ++ if (!ret) /* /sys/fs/cgroup exists, but we don't recognize the type */ ++ return -1; ++ + ret = stat(CPUSET_PATH, &st); + if (ret < 0) { + ret = mkdir(CPUSET_PATH, 0755); +-- +2.31.1 + diff --git a/SOURCES/rt-tests-deadline_test-Fix-double-mount-of-cgroups.patch b/SOURCES/rt-tests-deadline_test-Fix-double-mount-of-cgroups.patch new file mode 100644 index 0000000..9cee3c8 --- /dev/null +++ b/SOURCES/rt-tests-deadline_test-Fix-double-mount-of-cgroups.patch @@ -0,0 +1,87 @@ +From 8100a3ae8c6abff99fb512d126055f4b603f4517 Mon Sep 17 00:00:00 2001 +From: John Kacur +Date: Thu, 18 Nov 2021 13:48:10 -0500 +Subject: [PATCH 1/2] rt-tests: deadline_test: Fix double mount of cgroups + +If /sys/fs/cgroup exists and it is type cgroup2, deadline mounts it a +second time as cgroup. + +systemd is creating cgroup2 for logins and this can hang the machine and +not allow logins. + +Fix this by: + +If /sys/fs/cgroup exists, then use it for deadline_test. + +If it exists but the type is not recognized, exit with an error. +Do not simply mount it as type cgroup. + +TODO: If the file doesn't exit but cgroups are supported in the kernel, +the file could be created and mounted. + +Signed-off-by: John Kacur +--- + src/sched_deadline/deadline_test.c | 39 ++++++++++++++++++++++++------ + 1 file changed, 32 insertions(+), 7 deletions(-) + +diff --git a/src/sched_deadline/deadline_test.c b/src/sched_deadline/deadline_test.c +index b7e1e045b57c..11d669025425 100644 +--- a/src/sched_deadline/deadline_test.c ++++ b/src/sched_deadline/deadline_test.c +@@ -518,6 +518,32 @@ static int mounted(const char *path, long magic) + #define CGROUP_PATH "/sys/fs/cgroup" + #define CPUSET_PATH CGROUP_PATH "/cpuset" + ++/** ++ * cgroup_mounted - test if the path /sys/fs/cgroup exists ++ * and is a supported type ++ * ++ * Returns -1 if the path does not exist ++ * Returns 0 if the path exists but is not a cgroup type ++ * Returns 1 if the path exists and supports cgroups ++ */ ++static int cgroup_mounted(void) ++{ ++ int ret; ++ ++ ret = mounted(CGROUP_PATH, TMPFS_MAGIC); ++ if (ret == -1) ++ return -1; /* path doesn't exist */ ++ if (ret == 1) ++ return 1; /* tmpfs */ ++ ret = mounted(CGROUP_PATH, CGROUP_SUPER_MAGIC); ++ if (ret == 1) ++ return 1; /* cgroup v1 */ ++ ret = mounted(CGROUP_PATH, CGROUP2_SUPER_MAGIC); ++ if (ret == 1) ++ return 1; ++ return 0; /* path exists but type is not recognized */ ++} ++ + /** + * open_cpuset - open a file (usually a cpuset file) + * @path: The path of the directory the file is in +@@ -568,14 +594,13 @@ static int mount_cpuset(void) + int fd; + + /* Check if cgroups is already mounted. */ +- ret = mounted(CGROUP_PATH, TMPFS_MAGIC); +- if (ret < 0) ++ ret = cgroup_mounted(); ++ if (ret < 0) /* /sys/fs/cgroup doesn't exist */ + return ret; +- if (!ret) { +- ret = mount("cgroup_root", CGROUP_PATH, "tmpfs", 0, NULL); +- if (ret < 0) +- return ret; +- } ++ ++ if (!ret) /* /sys/fs/cgroup exists, but we don't recognize the type */ ++ return -1; ++ + ret = stat(CPUSET_PATH, &st); + if (ret < 0) { + ret = mkdir(CPUSET_PATH, 0755); +-- +2.31.1 + diff --git a/SOURCES/rt-tests-deadline_tests-Null-check-to-prevent-exception.patch b/SOURCES/rt-tests-deadline_tests-Null-check-to-prevent-exception.patch new file mode 100644 index 0000000..76fe329 --- /dev/null +++ b/SOURCES/rt-tests-deadline_tests-Null-check-to-prevent-exception.patch @@ -0,0 +1,34 @@ +From 6a3dd40539c1804db8b1fe1684afa5fa111636fe Mon Sep 17 00:00:00 2001 +From: John Kacur +Date: Thu, 11 Nov 2021 08:56:54 -0500 +Subject: [PATCH] rt-tests: deadline_tests: Null check to prevent floating + point exception + +Fix a floating point exception that can occur if sd->nr_adjust is 0 +by checking it before performing a division by zero. + +Signed-off-by: John Kacur +--- + src/sched_deadline/deadline_test.c | 6 ++++-- + 1 file changed, 4 insertions(+), 2 deletions(-) + +diff --git a/src/sched_deadline/deadline_test.c b/src/sched_deadline/deadline_test.c +index 53abd4d2ca6b..b7e1e045b57c 100644 +--- a/src/sched_deadline/deadline_test.c ++++ b/src/sched_deadline/deadline_test.c +@@ -2050,8 +2050,10 @@ int main(int argc, char **argv) + printf("missed deadlines = %d\n", sd->missed_deadlines); + printf("missed periods = %d\n", sd->missed_periods); + printf("Total adjustments = %lld us\n", sd->total_adjust); +- printf("# adjustments = %lld avg: %lld us\n", +- sd->nr_adjust, sd->total_adjust / sd->nr_adjust); ++ if (sd->nr_adjust) { ++ printf("# adjustments = %lld avg: %lld us\n", ++ sd->nr_adjust, sd->total_adjust / sd->nr_adjust); ++ } + printf("deadline : %lld us\n", sd->deadline_us); + printf("runtime : %lld us\n", sd->runtime_us); + printf("nr_periods : %lld\n", sd->nr_periods); +-- +2.31.1 + diff --git a/SPECS/realtime-tests.spec b/SPECS/realtime-tests.spec index fc1fb75..57ea0a4 100644 --- a/SPECS/realtime-tests.spec +++ b/SPECS/realtime-tests.spec @@ -6,7 +6,7 @@ Name: realtime-tests # Numa argument to make: NUMA=1 # Version: 2.1 -Release: 3%{?dist} +Release: 6%{?dist} License: GPLv2 URL: https://git.kernel.org/pub/scm/utils/rt-tests/rt-tests.git Source0: https://www.kernel.org/pub/linux/utils/rt-tests/rt-tests-%{version}.tar.xz @@ -22,6 +22,10 @@ Requires: bc #Patches Patch1: sched_deadline-Accommodate-new-location-of-HRTICK-file.patch Patch2: sched_deadline-Use-HRTICK_DL-for-sched_deadline-tests.patch +Patch3: rt-tests-Add-missing-option-F-to-optstring.patch +Patch4: rt-tests-deadline_tests-Null-check-to-prevent-exception.patch +Patch5: rt-tests-deadline_test-Fix-double-mount-of-cgroups.patch +Patch6: rt-tests-cyclicdeadline-Fix-double-mount-of-cgroups.patch %description realtime-tests is a set of programs that test and measure various components of @@ -32,6 +36,10 @@ latency. It also tests the functioning of priority-inheritance mutexes. %setup -q -n rt-tests-%{version} %patch1 -p1 %patch2 -p1 +%patch3 -p1 +%patch4 -p1 +%patch5 -p1 +%patch6 -p1 %build %set_build_flags @@ -82,6 +90,19 @@ latency. It also tests the functioning of priority-inheritance mutexes. %{_mandir}/man8/determine_maximum_mpps.8.* %changelog +* Thu Nov 18 2021 John Kacur - 2.1-6 +- Fix potential double mount of cgroups for deadline_test +- Fix potential double mount of cgroups for cyclicdeadline_test +Resolves: rhbz#2011415 + +* Thu Nov 18 2021 John Kacur - 2.1-5 +- Null check to prevent floating point exception in deadline test +Resolves: rhbz#2023501 + +* Tue Nov 02 2021 Leah Leshchinsky - 2.1-4 +- Add missing option -F to optstring +Resolved: rhbz#2007021 + * Tue Aug 10 2021 Mohan Boddu - 2.1-3 - Rebuilt for IMA sigs, glibc 2.34, aarch64 flags Related: rhbz#1991688