summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMilosz Wasilewski <milosz.wasilewski@hackbox.linaro.org>2015-01-01 23:01:55 +0000
committerMilosz Wasilewski <milosz.wasilewski@hackbox.linaro.org>2015-01-01 23:01:55 +0000
commit7894328826a10b984b03e1af9e3c3288dd321b67 (patch)
tree71beba5fd6ef0755ffb6d49e809837df50b0c629
parent7cacbced47c26c3c082571e5f18126c51b0d05af (diff)
Update to commit: b2776bf7149bddd1f4161f14f79520f17fc1d71db2776bf7149bddd1f4161f14f79520f17fc1d71d
from repo: git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git branch: master
-rw-r--r--Makefile2
-rw-r--r--README.txt61
-rw-r--r--breakpoints/breakpoint_test.c10
-rw-r--r--exec/.gitignore9
-rw-r--r--exec/Makefile25
-rw-r--r--exec/execveat.c397
-rwxr-xr-xftrace/ftracetest43
-rw-r--r--ftrace/test.d/00basic/basic4.tc5
-rw-r--r--ftrace/test.d/event/event-enable.tc53
-rw-r--r--ftrace/test.d/event/subsystem-enable.tc53
-rw-r--r--ftrace/test.d/event/toplevel-enable.tc47
-rw-r--r--ftrace/test.d/ftrace/fgraph-filter-stack.tc89
-rw-r--r--ftrace/test.d/ftrace/fgraph-filter.tc52
-rw-r--r--ftrace/test.d/ftrace/func_profiler.tc80
-rw-r--r--ftrace/test.d/functions16
-rw-r--r--ftrace/test.d/kprobe/add_and_remove.tc1
-rw-r--r--ftrace/test.d/kprobe/busy_check.tc1
-rw-r--r--ftrace/test.d/kprobe/kprobe_args.tc1
-rw-r--r--ftrace/test.d/kprobe/kprobe_ftrace.tc55
-rw-r--r--ftrace/test.d/kprobe/kretprobe_args.tc1
-rw-r--r--ipc/msgque.c26
-rw-r--r--kcmp/Makefile22
-rw-r--r--kcmp/kcmp_test.c27
-rw-r--r--kselftest.h62
-rw-r--r--mount/unprivileged-remount-test.c204
-rw-r--r--net/Makefile8
-rwxr-xr-xnet/test_bpf.sh10
-rwxr-xr-xrcutorture/bin/kvm-test-1-run.sh6
-rwxr-xr-xrcutorture/bin/kvm.sh19
-rw-r--r--rcutorture/configs/rcu/TINY022
-rw-r--r--rcutorture/configs/rcu/TINY02.boot2
-rw-r--r--rcutorture/configs/rcu/TREE013
-rw-r--r--rcutorture/configs/rcu/TREE023
-rw-r--r--rcutorture/configs/rcu/TREE02-T3
-rw-r--r--rcutorture/configs/rcu/TREE035
-rw-r--r--rcutorture/configs/rcu/TREE041
-rw-r--r--rcutorture/configs/rcu/TREE051
-rw-r--r--rcutorture/configs/rcu/TREE05.boot1
-rw-r--r--rcutorture/configs/rcu/TREE061
-rw-r--r--rcutorture/configs/rcu/TREE06.boot3
-rw-r--r--rcutorture/configs/rcu/TREE071
-rw-r--r--rcutorture/configs/rcu/TREE085
-rw-r--r--rcutorture/configs/rcu/TREE08-T3
-rw-r--r--rcutorture/configs/rcu/TREE08.boot2
-rw-r--r--rcutorture/configs/rcu/TREE093
-rw-r--r--rcutorture/configs/rcu/v0.0/CFLIST14
-rw-r--r--rcutorture/configs/rcu/v0.0/N1-S-T-NH-SD-SMP-HP18
-rw-r--r--rcutorture/configs/rcu/v0.0/N2-2-t-nh-sd-SMP-hp20
-rw-r--r--rcutorture/configs/rcu/v0.0/N3-3-T-nh-SD-SMP-hp22
-rw-r--r--rcutorture/configs/rcu/v0.0/N4-A-t-NH-sd-SMP-HP18
-rw-r--r--rcutorture/configs/rcu/v0.0/N5-U-T-NH-sd-SMP-hp22
-rw-r--r--rcutorture/configs/rcu/v0.0/NT1-nh23
-rw-r--r--rcutorture/configs/rcu/v0.0/NT3-NH20
-rw-r--r--rcutorture/configs/rcu/v0.0/P1-S-T-NH-SD-SMP-HP19
-rw-r--r--rcutorture/configs/rcu/v0.0/P2-2-t-nh-sd-SMP-hp20
-rw-r--r--rcutorture/configs/rcu/v0.0/P3-3-T-nh-SD-SMP-hp20
-rw-r--r--rcutorture/configs/rcu/v0.0/P4-A-t-NH-sd-SMP-HP22
-rw-r--r--rcutorture/configs/rcu/v0.0/P5-U-T-NH-sd-SMP-hp27
-rw-r--r--rcutorture/configs/rcu/v0.0/PT1-nh23
-rw-r--r--rcutorture/configs/rcu/v0.0/PT2-NH22
-rw-r--r--rcutorture/configs/rcu/v0.0/ver_functions.sh33
-rw-r--r--rcutorture/configs/rcu/v3.12/CFLIST17
-rw-r--r--rcutorture/configs/rcu/v3.12/N1-S-T-NH-SD-SMP-HP19
-rw-r--r--rcutorture/configs/rcu/v3.12/N2-2-t-nh-sd-SMP-hp20
-rw-r--r--rcutorture/configs/rcu/v3.12/N3-3-T-nh-SD-SMP-hp22
-rw-r--r--rcutorture/configs/rcu/v3.12/N4-A-t-NH-sd-SMP-HP18
-rw-r--r--rcutorture/configs/rcu/v3.12/N5-U-T-NH-sd-SMP-hp22
-rw-r--r--rcutorture/configs/rcu/v3.12/N6---t-nh-SD-smp-hp19
-rw-r--r--rcutorture/configs/rcu/v3.12/N7-4-T-NH-SD-SMP-HP26
-rw-r--r--rcutorture/configs/rcu/v3.12/N8-2-T-NH-SD-SMP-HP22
-rw-r--r--rcutorture/configs/rcu/v3.12/NT1-nh23
-rw-r--r--rcutorture/configs/rcu/v3.12/NT3-NH20
-rw-r--r--rcutorture/configs/rcu/v3.12/P1-S-T-NH-SD-SMP-HP20
-rw-r--r--rcutorture/configs/rcu/v3.12/P2-2-t-nh-sd-SMP-hp20
-rw-r--r--rcutorture/configs/rcu/v3.12/P3-3-T-nh-SD-SMP-hp20
-rw-r--r--rcutorture/configs/rcu/v3.12/P4-A-t-NH-sd-SMP-HP22
-rw-r--r--rcutorture/configs/rcu/v3.12/P5-U-T-NH-sd-SMP-hp27
-rw-r--r--rcutorture/configs/rcu/v3.12/P6---t-nh-SD-smp-hp18
-rw-r--r--rcutorture/configs/rcu/v3.12/P7-4-T-NH-SD-SMP-HP30
-rw-r--r--rcutorture/configs/rcu/v3.12/P7-4-T-NH-SD-SMP-HP-all30
-rw-r--r--rcutorture/configs/rcu/v3.12/P7-4-T-NH-SD-SMP-HP-none30
-rw-r--r--rcutorture/configs/rcu/v3.12/P7-4-T-NH-SD-SMP-hp30
-rw-r--r--rcutorture/configs/rcu/v3.12/PT1-nh23
-rw-r--r--rcutorture/configs/rcu/v3.12/PT2-NH22
-rw-r--r--rcutorture/configs/rcu/v3.3/CFLIST14
-rw-r--r--rcutorture/configs/rcu/v3.3/N1-S-T-NH-SD-SMP-HP19
-rw-r--r--rcutorture/configs/rcu/v3.3/N2-2-t-nh-sd-SMP-hp20
-rw-r--r--rcutorture/configs/rcu/v3.3/N3-3-T-nh-SD-SMP-hp22
-rw-r--r--rcutorture/configs/rcu/v3.3/N4-A-t-NH-sd-SMP-HP18
-rw-r--r--rcutorture/configs/rcu/v3.3/N5-U-T-NH-sd-SMP-hp22
-rw-r--r--rcutorture/configs/rcu/v3.3/NT1-nh23
-rw-r--r--rcutorture/configs/rcu/v3.3/NT3-NH20
-rw-r--r--rcutorture/configs/rcu/v3.3/P1-S-T-NH-SD-SMP-HP20
-rw-r--r--rcutorture/configs/rcu/v3.3/P2-2-t-nh-sd-SMP-hp20
-rw-r--r--rcutorture/configs/rcu/v3.3/P3-3-T-nh-SD-SMP-hp20
-rw-r--r--rcutorture/configs/rcu/v3.3/P4-A-t-NH-sd-SMP-HP22
-rw-r--r--rcutorture/configs/rcu/v3.3/P5-U-T-NH-sd-SMP-hp27
-rw-r--r--rcutorture/configs/rcu/v3.3/PT1-nh23
-rw-r--r--rcutorture/configs/rcu/v3.3/PT2-NH22
-rw-r--r--rcutorture/configs/rcu/v3.3/ver_functions.sh44
-rw-r--r--rcutorture/configs/rcu/v3.5/CFLIST14
-rw-r--r--rcutorture/configs/rcu/v3.5/N1-S-T-NH-SD-SMP-HP19
-rw-r--r--rcutorture/configs/rcu/v3.5/N2-2-t-nh-sd-SMP-hp20
-rw-r--r--rcutorture/configs/rcu/v3.5/N3-3-T-nh-SD-SMP-hp22
-rw-r--r--rcutorture/configs/rcu/v3.5/N4-A-t-NH-sd-SMP-HP18
-rw-r--r--rcutorture/configs/rcu/v3.5/N5-U-T-NH-sd-SMP-hp22
-rw-r--r--rcutorture/configs/rcu/v3.5/NT1-nh23
-rw-r--r--rcutorture/configs/rcu/v3.5/NT3-NH20
-rw-r--r--rcutorture/configs/rcu/v3.5/P1-S-T-NH-SD-SMP-HP20
-rw-r--r--rcutorture/configs/rcu/v3.5/P2-2-t-nh-sd-SMP-hp20
-rw-r--r--rcutorture/configs/rcu/v3.5/P3-3-T-nh-SD-SMP-hp20
-rw-r--r--rcutorture/configs/rcu/v3.5/P4-A-t-NH-sd-SMP-HP22
-rw-r--r--rcutorture/configs/rcu/v3.5/P5-U-T-NH-sd-SMP-hp27
-rw-r--r--rcutorture/configs/rcu/v3.5/PT1-nh23
-rw-r--r--rcutorture/configs/rcu/v3.5/PT2-NH22
-rw-r--r--rcutorture/configs/rcu/v3.5/ver_functions.sh57
-rw-r--r--rcutorture/doc/TINY_RCU.txt2
-rw-r--r--rcutorture/doc/TREE_RCU-kconfig.txt15
-rw-r--r--size/.gitignore1
-rw-r--r--size/Makefile12
-rw-r--r--size/get_size.c100
-rw-r--r--timers/posix_timers.c14
-rw-r--r--user/Makefile8
-rwxr-xr-xuser/test_user_copy.sh10
124 files changed, 1808 insertions, 1366 deletions
diff --git a/Makefile b/Makefile
index b3831f4..45f145c 100644
--- a/Makefile
+++ b/Makefile
@@ -15,8 +15,6 @@ TARGETS += user
TARGETS += sysctl
TARGETS += firmware
TARGETS += ftrace
-TARGETS += exec
-TARGETS += size
TARGETS_HOTPLUG = cpu-hotplug
TARGETS_HOTPLUG += memory-hotplug
diff --git a/README.txt b/README.txt
new file mode 100644
index 0000000..2660d5f
--- /dev/null
+++ b/README.txt
@@ -0,0 +1,61 @@
+Linux Kernel Selftests
+
+The kernel contains a set of "self tests" under the tools/testing/selftests/
+directory. These are intended to be small unit tests to exercise individual
+code paths in the kernel.
+
+On some systems, hot-plug tests could hang forever waiting for cpu and
+memory to be ready to be offlined. A special hot-plug target is created
+to run full range of hot-plug tests. In default mode, hot-plug tests run
+in safe mode with a limited scope. In limited mode, cpu-hotplug test is
+run on a single cpu as opposed to all hotplug capable cpus, and memory
+hotplug test is run on 2% of hotplug capable memory instead of 10%.
+
+Running the selftests (hotplug tests are run in limited mode)
+=============================================================
+
+To build the tests:
+
+ $ make -C tools/testing/selftests
+
+
+To run the tests:
+
+ $ make -C tools/testing/selftests run_tests
+
+- note that some tests will require root privileges.
+
+To run only tests targeted for a single subsystem: (including
+hotplug targets in limited mode)
+
+ $ make -C tools/testing/selftests TARGETS=cpu-hotplug run_tests
+
+See the top-level tools/testing/selftests/Makefile for the list of all possible
+targets.
+
+Running the full range hotplug selftests
+========================================
+
+To build the tests:
+
+ $ make -C tools/testing/selftests hotplug
+
+To run the tests:
+
+ $ make -C tools/testing/selftests run_hotplug
+
+- note that some tests will require root privileges.
+
+Contributing new tests
+======================
+
+In general, the rules for for selftests are
+
+ * Do as much as you can if you're not root;
+
+ * Don't take too long;
+
+ * Don't break the build on any architecture, and
+
+ * Don't cause the top-level "make run_tests" to fail if your feature is
+ unconfigured.
diff --git a/breakpoints/breakpoint_test.c b/breakpoints/breakpoint_test.c
index 120895a..a0743f3 100644
--- a/breakpoints/breakpoint_test.c
+++ b/breakpoints/breakpoint_test.c
@@ -17,8 +17,6 @@
#include <sys/types.h>
#include <sys/wait.h>
-#include "../kselftest.h"
-
/* Breakpoint access modes */
enum {
@@ -44,7 +42,7 @@ static void set_breakpoint_addr(void *addr, int n)
offsetof(struct user, u_debugreg[n]), addr);
if (ret) {
perror("Can't set breakpoint addr\n");
- ksft_exit_fail();
+ exit(-1);
}
}
@@ -107,7 +105,7 @@ static void toggle_breakpoint(int n, int type, int len,
offsetof(struct user, u_debugreg[7]), dr7);
if (ret) {
perror("Can't set dr7");
- ksft_exit_fail();
+ exit(-1);
}
}
@@ -277,7 +275,7 @@ static void check_success(const char *msg)
msg2 = "Ok";
if (ptrace(PTRACE_POKEDATA, child_pid, &trapped, 1)) {
perror("Can't poke\n");
- ksft_exit_fail();
+ exit(-1);
}
}
@@ -392,5 +390,5 @@ int main(int argc, char **argv)
wait(NULL);
- return ksft_exit_pass();
+ return 0;
}
diff --git a/exec/.gitignore b/exec/.gitignore
deleted file mode 100644
index 64073e0..0000000
--- a/exec/.gitignore
+++ /dev/null
@@ -1,9 +0,0 @@
-subdir*
-script*
-execveat
-execveat.symlink
-execveat.moved
-execveat.path.ephemeral
-execveat.ephemeral
-execveat.denatured
-xxxxxxxx* \ No newline at end of file
diff --git a/exec/Makefile b/exec/Makefile
deleted file mode 100644
index 66dfc2c..0000000
--- a/exec/Makefile
+++ /dev/null
@@ -1,25 +0,0 @@
-CC = $(CROSS_COMPILE)gcc
-CFLAGS = -Wall
-BINARIES = execveat
-DEPS = execveat.symlink execveat.denatured script subdir
-all: $(BINARIES) $(DEPS)
-
-subdir:
- mkdir -p $@
-script:
- echo '#!/bin/sh' > $@
- echo 'exit $$*' >> $@
- chmod +x $@
-execveat.symlink: execveat
- ln -s -f $< $@
-execveat.denatured: execveat
- cp $< $@
- chmod -x $@
-%: %.c
- $(CC) $(CFLAGS) -o $@ $^
-
-run_tests: all
- ./execveat
-
-clean:
- rm -rf $(BINARIES) $(DEPS) subdir.moved execveat.moved xxxxx*
diff --git a/exec/execveat.c b/exec/execveat.c
deleted file mode 100644
index 33a5c06..0000000
--- a/exec/execveat.c
+++ /dev/null
@@ -1,397 +0,0 @@
-/*
- * Copyright (c) 2014 Google, Inc.
- *
- * Licensed under the terms of the GNU GPL License version 2
- *
- * Selftests for execveat(2).
- */
-
-#define _GNU_SOURCE /* to get O_PATH, AT_EMPTY_PATH */
-#include <sys/sendfile.h>
-#include <sys/stat.h>
-#include <sys/syscall.h>
-#include <sys/types.h>
-#include <sys/wait.h>
-#include <errno.h>
-#include <fcntl.h>
-#include <limits.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-
-static char longpath[2 * PATH_MAX] = "";
-static char *envp[] = { "IN_TEST=yes", NULL, NULL };
-static char *argv[] = { "execveat", "99", NULL };
-
-static int execveat_(int fd, const char *path, char **argv, char **envp,
- int flags)
-{
-#ifdef __NR_execveat
- return syscall(__NR_execveat, fd, path, argv, envp, flags);
-#else
- errno = -ENOSYS;
- return -1;
-#endif
-}
-
-#define check_execveat_fail(fd, path, flags, errno) \
- _check_execveat_fail(fd, path, flags, errno, #errno)
-static int _check_execveat_fail(int fd, const char *path, int flags,
- int expected_errno, const char *errno_str)
-{
- int rc;
-
- errno = 0;
- printf("Check failure of execveat(%d, '%s', %d) with %s... ",
- fd, path?:"(null)", flags, errno_str);
- rc = execveat_(fd, path, argv, envp, flags);
-
- if (rc > 0) {
- printf("[FAIL] (unexpected success from execveat(2))\n");
- return 1;
- }
- if (errno != expected_errno) {
- printf("[FAIL] (expected errno %d (%s) not %d (%s)\n",
- expected_errno, strerror(expected_errno),
- errno, strerror(errno));
- return 1;
- }
- printf("[OK]\n");
- return 0;
-}
-
-static int check_execveat_invoked_rc(int fd, const char *path, int flags,
- int expected_rc)
-{
- int status;
- int rc;
- pid_t child;
- int pathlen = path ? strlen(path) : 0;
-
- if (pathlen > 40)
- printf("Check success of execveat(%d, '%.20s...%s', %d)... ",
- fd, path, (path + pathlen - 20), flags);
- else
- printf("Check success of execveat(%d, '%s', %d)... ",
- fd, path?:"(null)", flags);
- child = fork();
- if (child < 0) {
- printf("[FAIL] (fork() failed)\n");
- return 1;
- }
- if (child == 0) {
- /* Child: do execveat(). */
- rc = execveat_(fd, path, argv, envp, flags);
- printf("[FAIL]: execveat() failed, rc=%d errno=%d (%s)\n",
- rc, errno, strerror(errno));
- exit(1); /* should not reach here */
- }
- /* Parent: wait for & check child's exit status. */
- rc = waitpid(child, &status, 0);
- if (rc != child) {
- printf("[FAIL] (waitpid(%d,...) returned %d)\n", child, rc);
- return 1;
- }
- if (!WIFEXITED(status)) {
- printf("[FAIL] (child %d did not exit cleanly, status=%08x)\n",
- child, status);
- return 1;
- }
- if (WEXITSTATUS(status) != expected_rc) {
- printf("[FAIL] (child %d exited with %d not %d)\n",
- child, WEXITSTATUS(status), expected_rc);
- return 1;
- }
- printf("[OK]\n");
- return 0;
-}
-
-static int check_execveat(int fd, const char *path, int flags)
-{
- return check_execveat_invoked_rc(fd, path, flags, 99);
-}
-
-static char *concat(const char *left, const char *right)
-{
- char *result = malloc(strlen(left) + strlen(right) + 1);
-
- strcpy(result, left);
- strcat(result, right);
- return result;
-}
-
-static int open_or_die(const char *filename, int flags)
-{
- int fd = open(filename, flags);
-
- if (fd < 0) {
- printf("Failed to open '%s'; "
- "check prerequisites are available\n", filename);
- exit(1);
- }
- return fd;
-}
-
-static void exe_cp(const char *src, const char *dest)
-{
- int in_fd = open_or_die(src, O_RDONLY);
- int out_fd = open(dest, O_RDWR|O_CREAT|O_TRUNC, 0755);
- struct stat info;
-
- fstat(in_fd, &info);
- sendfile(out_fd, in_fd, NULL, info.st_size);
- close(in_fd);
- close(out_fd);
-}
-
-#define XX_DIR_LEN 200
-static int check_execveat_pathmax(int dot_dfd, const char *src, int is_script)
-{
- int fail = 0;
- int ii, count, len;
- char longname[XX_DIR_LEN + 1];
- int fd;
-
- if (*longpath == '\0') {
- /* Create a filename close to PATH_MAX in length */
- memset(longname, 'x', XX_DIR_LEN - 1);
- longname[XX_DIR_LEN - 1] = '/';
- longname[XX_DIR_LEN] = '\0';
- count = (PATH_MAX - 3) / XX_DIR_LEN;
- for (ii = 0; ii < count; ii++) {
- strcat(longpath, longname);
- mkdir(longpath, 0755);
- }
- len = (PATH_MAX - 3) - (count * XX_DIR_LEN);
- if (len <= 0)
- len = 1;
- memset(longname, 'y', len);
- longname[len] = '\0';
- strcat(longpath, longname);
- }
- exe_cp(src, longpath);
-
- /*
- * Execute as a pre-opened file descriptor, which works whether this is
- * a script or not (because the interpreter sees a filename like
- * "/dev/fd/20").
- */
- fd = open(longpath, O_RDONLY);
- if (fd > 0) {
- printf("Invoke copy of '%s' via filename of length %lu:\n",
- src, strlen(longpath));
- fail += check_execveat(fd, "", AT_EMPTY_PATH);
- } else {
- printf("Failed to open length %lu filename, errno=%d (%s)\n",
- strlen(longpath), errno, strerror(errno));
- fail++;
- }
-
- /*
- * Execute as a long pathname relative to ".". If this is a script,
- * the interpreter will launch but fail to open the script because its
- * name ("/dev/fd/5/xxx....") is bigger than PATH_MAX.
- */
- if (is_script)
- fail += check_execveat_invoked_rc(dot_dfd, longpath, 0, 127);
- else
- fail += check_execveat(dot_dfd, longpath, 0);
-
- return fail;
-}
-
-static int run_tests(void)
-{
- int fail = 0;
- char *fullname = realpath("execveat", NULL);
- char *fullname_script = realpath("script", NULL);
- char *fullname_symlink = concat(fullname, ".symlink");
- int subdir_dfd = open_or_die("subdir", O_DIRECTORY|O_RDONLY);
- int subdir_dfd_ephemeral = open_or_die("subdir.ephemeral",
- O_DIRECTORY|O_RDONLY);
- int dot_dfd = open_or_die(".", O_DIRECTORY|O_RDONLY);
- int dot_dfd_path = open_or_die(".", O_DIRECTORY|O_RDONLY|O_PATH);
- int dot_dfd_cloexec = open_or_die(".", O_DIRECTORY|O_RDONLY|O_CLOEXEC);
- int fd = open_or_die("execveat", O_RDONLY);
- int fd_path = open_or_die("execveat", O_RDONLY|O_PATH);
- int fd_symlink = open_or_die("execveat.symlink", O_RDONLY);
- int fd_denatured = open_or_die("execveat.denatured", O_RDONLY);
- int fd_denatured_path = open_or_die("execveat.denatured",
- O_RDONLY|O_PATH);
- int fd_script = open_or_die("script", O_RDONLY);
- int fd_ephemeral = open_or_die("execveat.ephemeral", O_RDONLY);
- int fd_ephemeral_path = open_or_die("execveat.path.ephemeral",
- O_RDONLY|O_PATH);
- int fd_script_ephemeral = open_or_die("script.ephemeral", O_RDONLY);
- int fd_cloexec = open_or_die("execveat", O_RDONLY|O_CLOEXEC);
- int fd_script_cloexec = open_or_die("script", O_RDONLY|O_CLOEXEC);
-
- /* Change file position to confirm it doesn't affect anything */
- lseek(fd, 10, SEEK_SET);
-
- /* Normal executable file: */
- /* dfd + path */
- fail += check_execveat(subdir_dfd, "../execveat", 0);
- fail += check_execveat(dot_dfd, "execveat", 0);
- fail += check_execveat(dot_dfd_path, "execveat", 0);
- /* absolute path */
- fail += check_execveat(AT_FDCWD, fullname, 0);
- /* absolute path with nonsense dfd */
- fail += check_execveat(99, fullname, 0);
- /* fd + no path */
- fail += check_execveat(fd, "", AT_EMPTY_PATH);
- /* O_CLOEXEC fd + no path */
- fail += check_execveat(fd_cloexec, "", AT_EMPTY_PATH);
- /* O_PATH fd */
- fail += check_execveat(fd_path, "", AT_EMPTY_PATH);
-
- /* Mess with executable file that's already open: */
- /* fd + no path to a file that's been renamed */
- rename("execveat.ephemeral", "execveat.moved");
- fail += check_execveat(fd_ephemeral, "", AT_EMPTY_PATH);
- /* fd + no path to a file that's been deleted */
- unlink("execveat.moved"); /* remove the file now fd open */
- fail += check_execveat(fd_ephemeral, "", AT_EMPTY_PATH);
-
- /* Mess with executable file that's already open with O_PATH */
- /* fd + no path to a file that's been deleted */
- unlink("execveat.path.ephemeral");
- fail += check_execveat(fd_ephemeral_path, "", AT_EMPTY_PATH);
-
- /* Invalid argument failures */
- fail += check_execveat_fail(fd, "", 0, ENOENT);
- fail += check_execveat_fail(fd, NULL, AT_EMPTY_PATH, EFAULT);
-
- /* Symlink to executable file: */
- /* dfd + path */
- fail += check_execveat(dot_dfd, "execveat.symlink", 0);
- fail += check_execveat(dot_dfd_path, "execveat.symlink", 0);
- /* absolute path */
- fail += check_execveat(AT_FDCWD, fullname_symlink, 0);
- /* fd + no path, even with AT_SYMLINK_NOFOLLOW (already followed) */
- fail += check_execveat(fd_symlink, "", AT_EMPTY_PATH);
- fail += check_execveat(fd_symlink, "",
- AT_EMPTY_PATH|AT_SYMLINK_NOFOLLOW);
-
- /* Symlink fails when AT_SYMLINK_NOFOLLOW set: */
- /* dfd + path */
- fail += check_execveat_fail(dot_dfd, "execveat.symlink",
- AT_SYMLINK_NOFOLLOW, ELOOP);
- fail += check_execveat_fail(dot_dfd_path, "execveat.symlink",
- AT_SYMLINK_NOFOLLOW, ELOOP);
- /* absolute path */
- fail += check_execveat_fail(AT_FDCWD, fullname_symlink,
- AT_SYMLINK_NOFOLLOW, ELOOP);
-
- /* Shell script wrapping executable file: */
- /* dfd + path */
- fail += check_execveat(subdir_dfd, "../script", 0);
- fail += check_execveat(dot_dfd, "script", 0);
- fail += check_execveat(dot_dfd_path, "script", 0);
- /* absolute path */
- fail += check_execveat(AT_FDCWD, fullname_script, 0);
- /* fd + no path */
- fail += check_execveat(fd_script, "", AT_EMPTY_PATH);
- fail += check_execveat(fd_script, "",
- AT_EMPTY_PATH|AT_SYMLINK_NOFOLLOW);
- /* O_CLOEXEC fd fails for a script (as script file inaccessible) */
- fail += check_execveat_fail(fd_script_cloexec, "", AT_EMPTY_PATH,
- ENOENT);
- fail += check_execveat_fail(dot_dfd_cloexec, "script", 0, ENOENT);
-
- /* Mess with script file that's already open: */
- /* fd + no path to a file that's been renamed */
- rename("script.ephemeral", "script.moved");
- fail += check_execveat(fd_script_ephemeral, "", AT_EMPTY_PATH);
- /* fd + no path to a file that's been deleted */
- unlink("script.moved"); /* remove the file while fd open */
- fail += check_execveat(fd_script_ephemeral, "", AT_EMPTY_PATH);
-
- /* Rename a subdirectory in the path: */
- rename("subdir.ephemeral", "subdir.moved");
- fail += check_execveat(subdir_dfd_ephemeral, "../script", 0);
- fail += check_execveat(subdir_dfd_ephemeral, "script", 0);
- /* Remove the subdir and its contents */
- unlink("subdir.moved/script");
- unlink("subdir.moved");
- /* Shell loads via deleted subdir OK because name starts with .. */
- fail += check_execveat(subdir_dfd_ephemeral, "../script", 0);
- fail += check_execveat_fail(subdir_dfd_ephemeral, "script", 0, ENOENT);
-
- /* Flag values other than AT_SYMLINK_NOFOLLOW => EINVAL */
- fail += check_execveat_fail(dot_dfd, "execveat", 0xFFFF, EINVAL);
- /* Invalid path => ENOENT */
- fail += check_execveat_fail(dot_dfd, "no-such-file", 0, ENOENT);
- fail += check_execveat_fail(dot_dfd_path, "no-such-file", 0, ENOENT);
- fail += check_execveat_fail(AT_FDCWD, "no-such-file", 0, ENOENT);
- /* Attempt to execute directory => EACCES */
- fail += check_execveat_fail(dot_dfd, "", AT_EMPTY_PATH, EACCES);
- /* Attempt to execute non-executable => EACCES */
- fail += check_execveat_fail(dot_dfd, "Makefile", 0, EACCES);
- fail += check_execveat_fail(fd_denatured, "", AT_EMPTY_PATH, EACCES);
- fail += check_execveat_fail(fd_denatured_path, "", AT_EMPTY_PATH,
- EACCES);
- /* Attempt to execute nonsense FD => EBADF */
- fail += check_execveat_fail(99, "", AT_EMPTY_PATH, EBADF);
- fail += check_execveat_fail(99, "execveat", 0, EBADF);
- /* Attempt to execute relative to non-directory => ENOTDIR */
- fail += check_execveat_fail(fd, "execveat", 0, ENOTDIR);
-
- fail += check_execveat_pathmax(dot_dfd, "execveat", 0);
- fail += check_execveat_pathmax(dot_dfd, "script", 1);
- return fail;
-}
-
-static void prerequisites(void)
-{
- int fd;
- const char *script = "#!/bin/sh\nexit $*\n";
-
- /* Create ephemeral copies of files */
- exe_cp("execveat", "execveat.ephemeral");
- exe_cp("execveat", "execveat.path.ephemeral");
- exe_cp("script", "script.ephemeral");
- mkdir("subdir.ephemeral", 0755);
-
- fd = open("subdir.ephemeral/script", O_RDWR|O_CREAT|O_TRUNC, 0755);
- write(fd, script, strlen(script));
- close(fd);
-}
-
-int main(int argc, char **argv)
-{
- int ii;
- int rc;
- const char *verbose = getenv("VERBOSE");
-
- if (argc >= 2) {
- /* If we are invoked with an argument, don't run tests. */
- const char *in_test = getenv("IN_TEST");
-
- if (verbose) {
- printf(" invoked with:");
- for (ii = 0; ii < argc; ii++)
- printf(" [%d]='%s'", ii, argv[ii]);
- printf("\n");
- }
-
- /* Check expected environment transferred. */
- if (!in_test || strcmp(in_test, "yes") != 0) {
- printf("[FAIL] (no IN_TEST=yes in env)\n");
- return 1;
- }
-
- /* Use the final argument as an exit code. */
- rc = atoi(argv[argc - 1]);
- fflush(stdout);
- } else {
- prerequisites();
- if (verbose)
- envp[1] = "VERBOSE=1";
- rc = run_tests();
- if (rc > 0)
- printf("%d tests failed\n", rc);
- }
- return rc;
-}
diff --git a/ftrace/ftracetest b/ftrace/ftracetest
index da48812..5152476 100755
--- a/ftrace/ftracetest
+++ b/ftrace/ftracetest
@@ -13,7 +13,6 @@ echo "Usage: ftracetest [options] [testcase(s)] [testcase-directory(s)]"
echo " Options:"
echo " -h|--help Show help message"
echo " -k|--keep Keep passed test logs"
-echo " -v|--verbose Show all stdout messages in testcases"
echo " -d|--debug Debug mode (trace all shell commands)"
exit $1
}
@@ -38,7 +37,7 @@ abspath() {
}
find_testcases() { #directory
- echo `find $1 -name \*.tc | sort`
+ echo `find $1 -name \*.tc`
}
parse_opts() { # opts
@@ -54,10 +53,6 @@ parse_opts() { # opts
KEEP_LOG=1
shift 1
;;
- --verbose|-v)
- VERBOSE=1
- shift 1
- ;;
--debug|-d)
DEBUG=1
shift 1
@@ -95,7 +90,6 @@ TEST_CASES=`find_testcases $TEST_DIR`
LOG_DIR=$TOP_DIR/logs/`date +%Y%m%d-%H%M%S`/
KEEP_LOG=0
DEBUG=0
-VERBOSE=0
# Parse command-line options
parse_opts $*
@@ -141,12 +135,15 @@ TOTAL_RESULT=0
CASENO=0
testcase() { # testfile
CASENO=$((CASENO+1))
- desc=`grep "^#[ \t]*description:" $1 | cut -f2 -d:`
- prlog -n "[$CASENO]$desc"
+ prlog -n "[$CASENO]"`grep "^#[ \t]*description:" $1 | cut -f2 -d:`
}
-eval_result() { # sigval
- case $1 in
+eval_result() { # retval sigval
+ local retval=$2
+ if [ $2 -eq 0 ]; then
+ test $1 -ne 0 && retval=$FAIL
+ fi
+ case $retval in
$PASS)
prlog " [PASS]"
PASSED_CASES="$PASSED_CASES $CASENO"
@@ -190,9 +187,6 @@ SIG_RESULT=
SIG_BASE=36 # Use realtime signals
SIG_PID=$$
-SIG_FAIL=$((SIG_BASE + FAIL))
-trap 'SIG_RESULT=$FAIL' $SIG_FAIL
-
SIG_UNRESOLVED=$((SIG_BASE + UNRESOLVED))
exit_unresolved () {
kill -s $SIG_UNRESOLVED $SIG_PID
@@ -221,25 +215,17 @@ exit_xfail () {
}
trap 'SIG_RESULT=$XFAIL' $SIG_XFAIL
-__run_test() { # testfile
- # setup PID and PPID, $$ is not updated.
- (cd $TRACING_DIR; read PID _ < /proc/self/stat ; set -e; set -x; . $1)
- [ $? -ne 0 ] && kill -s $SIG_FAIL $SIG_PID
-}
-
# Run one test case
run_test() { # testfile
local testname=`basename $1`
- local testlog=`mktemp $LOG_DIR/${testname}-log.XXXXXX`
+ local testlog=`mktemp --tmpdir=$LOG_DIR ${testname}-XXXXXX.log`
testcase $1
echo "execute: "$1 > $testlog
SIG_RESULT=0
- if [ $VERBOSE -ne 0 ]; then
- __run_test $1 2>> $testlog | tee -a $testlog
- else
- __run_test $1 >> $testlog 2>&1
- fi
- eval_result $SIG_RESULT
+ # setup PID and PPID, $$ is not updated.
+ (cd $TRACING_DIR; read PID _ < /proc/self/stat ;
+ set -e; set -x; . $1) >> $testlog 2>&1
+ eval_result $? $SIG_RESULT
if [ $? -eq 0 ]; then
# Remove test log if the test was done as it was expected.
[ $KEEP_LOG -eq 0 ] && rm $testlog
@@ -249,9 +235,6 @@ run_test() { # testfile
fi
}
-# load in the helper functions
-. $TEST_DIR/functions
-
# Main loop
for t in $TEST_CASES; do
run_test $t
diff --git a/ftrace/test.d/00basic/basic4.tc b/ftrace/test.d/00basic/basic4.tc
deleted file mode 100644
index fd9c49a..0000000
--- a/ftrace/test.d/00basic/basic4.tc
+++ /dev/null
@@ -1,5 +0,0 @@
-#!/bin/sh
-# description: Basic event tracing check
-test -f available_events -a -f set_event -a -d events
-# check scheduler events are available
-grep -q sched available_events && exit 0 || exit -1 \ No newline at end of file
diff --git a/ftrace/test.d/event/event-enable.tc b/ftrace/test.d/event/event-enable.tc
deleted file mode 100644
index 668616d..0000000
--- a/ftrace/test.d/event/event-enable.tc
+++ /dev/null
@@ -1,53 +0,0 @@
-#!/bin/sh
-# description: event tracing - enable/disable with event level files
-
-do_reset() {
- echo > set_event
- clear_trace
-}
-
-fail() { #msg
- do_reset
- echo $1
- exit -1
-}
-
-if [ ! -f set_event -o ! -d events/sched ]; then
- echo "event tracing is not supported"
- exit_unsupported
-fi
-
-reset_tracer
-do_reset
-
-echo 'sched:sched_switch' > set_event
-usleep 1
-
-count=`cat trace | grep sched_switch | wc -l`
-if [ $count -eq 0 ]; then
- fail "sched_switch events are not recorded"
-fi
-
-do_reset
-
-echo 1 > events/sched/sched_switch/enable
-usleep 1
-
-count=`cat trace | grep sched_switch | wc -l`
-if [ $count -eq 0 ]; then
- fail "sched_switch events are not recorded"
-fi
-
-do_reset
-
-echo 0 > events/sched/sched_switch/enable
-usleep 1
-
-count=`cat trace | grep sched_switch | wc -l`
-if [ $count -ne 0 ]; then
- fail "sched_switch events should not be recorded"
-fi
-
-do_reset
-
-exit 0
diff --git a/ftrace/test.d/event/subsystem-enable.tc b/ftrace/test.d/event/subsystem-enable.tc
deleted file mode 100644
index 655c415..0000000
--- a/ftrace/test.d/event/subsystem-enable.tc
+++ /dev/null
@@ -1,53 +0,0 @@
-#!/bin/sh
-# description: event tracing - enable/disable with subsystem level files
-
-do_reset() {
- echo > set_event
- clear_trace
-}
-
-fail() { #msg
- do_reset
- echo $1
- exit -1
-}
-
-if [ ! -f set_event -o ! -d events/sched ]; then
- echo "event tracing is not supported"
- exit_unsupported
-fi
-
-reset_tracer
-do_reset
-
-echo 'sched:*' > set_event
-usleep 1
-
-count=`cat trace | grep -v ^# | awk '{ print $5 }' | sort -u | wc -l`
-if [ $count -lt 3 ]; then
- fail "at least fork, exec and exit events should be recorded"
-fi
-
-do_reset
-
-echo 1 > events/sched/enable
-usleep 1
-
-count=`cat trace | grep -v ^# | awk '{ print $5 }' | sort -u | wc -l`
-if [ $count -lt 3 ]; then
- fail "at least fork, exec and exit events should be recorded"
-fi
-
-do_reset
-
-echo 0 > events/sched/enable
-usleep 1
-
-count=`cat trace | grep -v ^# | awk '{ print $5 }' | sort -u | wc -l`
-if [ $count -ne 0 ]; then
- fail "any of scheduler events should not be recorded"
-fi
-
-do_reset
-
-exit 0
diff --git a/ftrace/test.d/event/toplevel-enable.tc b/ftrace/test.d/event/toplevel-enable.tc
deleted file mode 100644
index 4808457..0000000
--- a/ftrace/test.d/event/toplevel-enable.tc
+++ /dev/null
@@ -1,47 +0,0 @@
-#!/bin/sh
-# description: event tracing - enable/disable with top level files
-
-do_reset() {
- echo > set_event
- clear_trace
-}
-
-fail() { #msg
- do_reset
- echo $1
- exit -1
-}
-
-if [ ! -f available_events -o ! -f set_event -o ! -d events ]; then
- echo "event tracing is not supported"
- exit_unsupported
-fi
-
-reset_tracer
-do_reset
-
-echo '*:*' > set_event
-count=`cat trace | grep -v ^# | wc -l`
-if [ $count -eq 0 ]; then
- fail "none of events are recorded"
-fi
-
-do_reset
-
-echo 1 > events/enable
-count=`cat trace | grep -v ^# | wc -l`
-if [ $count -eq 0 ]; then
- fail "none of events are recorded"
-fi
-
-do_reset
-
-echo 0 > events/enable
-count=`cat trace | grep -v ^# | wc -l`
-if [ $count -ne 0 ]; then
- fail "any of events should not be recorded"
-fi
-
-do_reset
-
-exit 0
diff --git a/ftrace/test.d/ftrace/fgraph-filter-stack.tc b/ftrace/test.d/ftrace/fgraph-filter-stack.tc
deleted file mode 100644
index c15e018..0000000
--- a/ftrace/test.d/ftrace/fgraph-filter-stack.tc
+++ /dev/null
@@ -1,89 +0,0 @@
-#!/bin/sh
-# description: ftrace - function graph filters with stack tracer
-
-# Make sure that function graph filtering works, and is not
-# affected by other tracers enabled (like stack tracer)
-
-if ! grep -q function_graph available_tracers; then
- echo "no function graph tracer configured"
- exit_unsupported
-fi
-
-if [ ! -f set_ftrace_filter ]; then
- echo "set_ftrace_filter not found? Is dynamic ftrace not set?"
- exit_unsupported
-fi
-
-do_reset() {
- reset_tracer
- echo 0 > /proc/sys/kernel/stack_tracer_enabled
- enable_tracing
- clear_trace
- echo > set_ftrace_filter
-}
-
-fail() { # msg
- do_reset
- echo $1
- exit -1
-}
-
-disable_tracing
-clear_trace;
-
-# filter something, schedule is always good
-if ! echo "schedule" > set_ftrace_filter; then
- # test for powerpc 64
- if ! echo ".schedule" > set_ftrace_filter; then
- fail "can not enable schedule filter"
- fi
-fi
-
-echo function_graph > current_tracer
-
-if [ ! -f stack_trace ]; then
- echo "Stack tracer not configured"
- do_reset
- exit_unsupported;
-fi
-
-echo "Now testing with stack tracer"
-
-echo 1 > /proc/sys/kernel/stack_tracer_enabled
-
-disable_tracing
-clear_trace
-enable_tracing
-sleep 1
-
-count=`cat trace | grep '()' | grep -v schedule | wc -l`
-
-if [ $count -ne 0 ]; then
- fail "Graph filtering not working with stack tracer?"
-fi
-
-# Make sure we did find something
-count=`cat trace | grep 'schedule()' | wc -l`
-if [ $count -eq 0 ]; then
- fail "No schedule traces found?"
-fi
-
-echo 0 > /proc/sys/kernel/stack_tracer_enabled
-clear_trace
-sleep 1
-
-
-count=`cat trace | grep '()' | grep -v schedule | wc -l`
-
-if [ $count -ne 0 ]; then
- fail "Graph filtering not working after stack tracer disabled?"
-fi
-
-count=`cat trace | grep 'schedule()' | wc -l`
-if [ $count -eq 0 ]; then
- fail "No schedule traces found?"
-fi
-
-do_reset
-
-exit 0
diff --git a/ftrace/test.d/ftrace/fgraph-filter.tc b/ftrace/test.d/ftrace/fgraph-filter.tc
deleted file mode 100644
index 6af5f63..0000000
--- a/ftrace/test.d/ftrace/fgraph-filter.tc
+++ /dev/null
@@ -1,52 +0,0 @@
-#!/bin/sh
-# description: ftrace - function graph filters
-
-# Make sure that function graph filtering works
-
-if ! grep -q function_graph available_tracers; then
- echo "no function graph tracer configured"
- exit_unsupported
-fi
-
-do_reset() {
- reset_tracer
- enable_tracing
- clear_trace
-}
-
-fail() { # msg
- do_reset
- echo $1
- exit -1
-}
-
-disable_tracing
-clear_trace
-
-# filter something, schedule is always good
-if ! echo "schedule" > set_ftrace_filter; then
- # test for powerpc 64
- if ! echo ".schedule" > set_ftrace_filter; then
- fail "can not enable schedule filter"
- fi
-fi
-
-echo function_graph > current_tracer
-enable_tracing
-sleep 1
-# search for functions (has "()" on the line), and make sure
-# that only the schedule function was found
-count=`cat trace | grep '()' | grep -v schedule | wc -l`
-if [ $count -ne 0 ]; then
- fail "Graph filtering not working by itself?"
-fi
-
-# Make sure we did find something
-count=`cat trace | grep 'schedule()' | wc -l`
-if [ $count -eq 0 ]; then
- fail "No schedule traces found?"
-fi
-
-do_reset
-
-exit 0
diff --git a/ftrace/test.d/ftrace/func_profiler.tc b/ftrace/test.d/ftrace/func_profiler.tc
deleted file mode 100644
index 2e719cb..0000000
--- a/ftrace/test.d/ftrace/func_profiler.tc
+++ /dev/null
@@ -1,80 +0,0 @@
-#!/bin/sh
-# description: ftrace - function profiler with function tracing
-
-# There was a bug after a rewrite of the ftrace infrastructure that
-# caused the function_profiler not to be able to run with the function
-# tracer, because the function_profiler used the function_graph tracer
-# and it was assumed the two could not run simultaneously.
-#
-# There was another related bug where the solution to the first bug
-# broke the way filtering of the function tracer worked.
-#
-# This test triggers those bugs on those kernels.
-#
-# We need function_graph and profiling to to run this test
-if ! grep -q function_graph available_tracers; then
- echo "no function graph tracer configured"
- exit_unsupported;
-fi
-
-if [ ! -f set_ftrace_filter ]; then
- echo "set_ftrace_filter not found? Is dynamic ftrace not set?"
- exit_unsupported
-fi
-
-if [ ! -f function_profile_enabled ]; then
- echo "function_profile_enabled not found, function profiling enabled?"
- exit_unsupported
-fi
-
-fail() { # mesg
- reset_tracer
- echo > set_ftrace_filter
- echo $1
- exit -1
-}
-
-echo "Testing function tracer with profiler:"
-echo "enable function tracer"
-echo function > current_tracer
-echo "enable profiler"
-echo 1 > function_profile_enabled
-
-sleep 1
-
-echo "Now filter on just schedule"
-echo '*schedule' > set_ftrace_filter
-clear_trace
-
-echo "Now disable function profiler"
-echo 0 > function_profile_enabled
-
-sleep 1
-
-# make sure only schedule functions exist
-
-echo "testing if only schedule is being traced"
-if grep -v -e '^#' -e 'schedule' trace; then
- fail "more than schedule was found"
-fi
-
-echo "Make sure schedule was traced"
-if ! grep -e 'schedule' trace > /dev/null; then
- cat trace
- fail "can not find schedule in trace"
-fi
-
-echo > set_ftrace_filter
-clear_trace
-
-sleep 1
-
-echo "make sure something other than scheduler is being traced"
-if ! grep -v -e '^#' -e 'schedule' trace > /dev/null; then
- cat trace
- fail "no other functions besides schedule was found"
-fi
-
-reset_tracer
-
-exit 0
diff --git a/ftrace/test.d/functions b/ftrace/test.d/functions
deleted file mode 100644
index 5d8cd06..0000000
--- a/ftrace/test.d/functions
+++ /dev/null
@@ -1,16 +0,0 @@
-
-clear_trace() { # reset trace output
- echo > trace
-}
-
-disable_tracing() { # stop trace recording
- echo 0 > tracing_on
-}
-
-enable_tracing() { # start trace recording
- echo 1 > tracing_on
-}
-
-reset_tracer() { # reset the current tracer
- echo nop > current_tracer
-}
diff --git a/ftrace/test.d/kprobe/add_and_remove.tc b/ftrace/test.d/kprobe/add_and_remove.tc
index a5a4262..1b8b665 100644
--- a/ftrace/test.d/kprobe/add_and_remove.tc
+++ b/ftrace/test.d/kprobe/add_and_remove.tc
@@ -9,4 +9,3 @@ echo p:myevent do_fork > kprobe_events
grep myevent kprobe_events
test -d events/kprobes/myevent
echo > kprobe_events
-clear_trace
diff --git a/ftrace/test.d/kprobe/busy_check.tc b/ftrace/test.d/kprobe/busy_check.tc
index d8c7bb6..b55c840 100644
--- a/ftrace/test.d/kprobe/busy_check.tc
+++ b/ftrace/test.d/kprobe/busy_check.tc
@@ -11,4 +11,3 @@ echo 1 > events/kprobes/myevent/enable
echo > kprobe_events && exit 1 # this must fail
echo 0 > events/kprobes/myevent/enable
echo > kprobe_events # this must succeed
-clear_trace
diff --git a/ftrace/test.d/kprobe/kprobe_args.tc b/ftrace/test.d/kprobe/kprobe_args.tc
index c45ee27..a603d3f 100644
--- a/ftrace/test.d/kprobe/kprobe_args.tc
+++ b/ftrace/test.d/kprobe/kprobe_args.tc
@@ -12,6 +12,5 @@ echo 1 > events/kprobes/testprobe/enable
( echo "forked")
echo 0 > events/kprobes/testprobe/enable
echo "-:testprobe" >> kprobe_events
-clear_trace
test -d events/kprobes/testprobe && exit 1 || exit 0
diff --git a/ftrace/test.d/kprobe/kprobe_ftrace.tc b/ftrace/test.d/kprobe/kprobe_ftrace.tc
deleted file mode 100644
index ab41d2b..0000000
--- a/ftrace/test.d/kprobe/kprobe_ftrace.tc
+++ /dev/null
@@ -1,55 +0,0 @@
-#!/bin/sh
-# description: Kprobe dynamic event with function tracer
-
-[ -f kprobe_events ] || exit_unsupported # this is configurable
-grep function available_tracers || exit_unsupported # this is configurable
-
-# prepare
-echo nop > current_tracer
-echo do_fork > set_ftrace_filter
-echo 0 > events/enable
-echo > kprobe_events
-echo 'p:testprobe do_fork' > kprobe_events
-
-# kprobe on / ftrace off
-echo 1 > events/kprobes/testprobe/enable
-echo > trace
-( echo "forked")
-grep testprobe trace
-! grep 'do_fork <-' trace
-
-# kprobe on / ftrace on
-echo function > current_tracer
-echo > trace
-( echo "forked")
-grep testprobe trace
-grep 'do_fork <-' trace
-
-# kprobe off / ftrace on
-echo 0 > events/kprobes/testprobe/enable
-echo > trace
-( echo "forked")
-! grep testprobe trace
-grep 'do_fork <-' trace
-
-# kprobe on / ftrace on
-echo 1 > events/kprobes/testprobe/enable
-echo function > current_tracer
-echo > trace
-( echo "forked")
-grep testprobe trace
-grep 'do_fork <-' trace
-
-# kprobe on / ftrace off
-echo nop > current_tracer
-echo > trace
-( echo "forked")
-grep testprobe trace
-! grep 'do_fork <-' trace
-
-# cleanup
-echo nop > current_tracer
-echo > set_ftrace_filter
-echo 0 > events/kprobes/testprobe/enable
-echo > kprobe_events
-echo > trace
diff --git a/ftrace/test.d/kprobe/kretprobe_args.tc b/ftrace/test.d/kprobe/kretprobe_args.tc
index 3171798..283c29e 100644
--- a/ftrace/test.d/kprobe/kretprobe_args.tc
+++ b/ftrace/test.d/kprobe/kretprobe_args.tc
@@ -12,5 +12,4 @@ echo 1 > events/kprobes/testprobe2/enable
( echo "forked")
echo 0 > events/kprobes/testprobe2/enable
echo '-:testprobe2' >> kprobe_events
-clear_trace
test -d events/kprobes/testprobe2 && exit 1 || exit 0
diff --git a/ipc/msgque.c b/ipc/msgque.c
index 1b2ce33..552f081 100644
--- a/ipc/msgque.c
+++ b/ipc/msgque.c
@@ -5,8 +5,6 @@
#include <linux/msg.h>
#include <fcntl.h>
-#include "../kselftest.h"
-
#define MAX_MSG_SIZE 32
struct msg1 {
@@ -197,58 +195,58 @@ int main(int argc, char **argv)
if (getuid() != 0) {
printf("Please run the test as root - Exiting.\n");
- return ksft_exit_fail();
+ exit(1);
}
msgque.key = ftok(argv[0], 822155650);
if (msgque.key == -1) {
- printf("Can't make key: %d\n", -errno);
- return ksft_exit_fail();
+ printf("Can't make key\n");
+ return -errno;
}
msgque.msq_id = msgget(msgque.key, IPC_CREAT | IPC_EXCL | 0666);
if (msgque.msq_id == -1) {
err = -errno;
- printf("Can't create queue: %d\n", err);
+ printf("Can't create queue\n");
goto err_out;
}
err = fill_msgque(&msgque);
if (err) {
- printf("Failed to fill queue: %d\n", err);
+ printf("Failed to fill queue\n");
goto err_destroy;
}
err = dump_queue(&msgque);
if (err) {
- printf("Failed to dump queue: %d\n", err);
+ printf("Failed to dump queue\n");
goto err_destroy;
}
err = check_and_destroy_queue(&msgque);
if (err) {
- printf("Failed to check and destroy queue: %d\n", err);
+ printf("Failed to check and destroy queue\n");
goto err_out;
}
err = restore_queue(&msgque);
if (err) {
- printf("Failed to restore queue: %d\n", err);
+ printf("Failed to restore queue\n");
goto err_destroy;
}
err = check_and_destroy_queue(&msgque);
if (err) {
- printf("Failed to test queue: %d\n", err);
+ printf("Failed to test queue\n");
goto err_out;
}
- return ksft_exit_pass();
+ return 0;
err_destroy:
if (msgctl(msgque.msq_id, IPC_RMID, 0)) {
printf("Failed to destroy queue: %d\n", -errno);
- return ksft_exit_fail();
+ return -errno;
}
err_out:
- return ksft_exit_fail();
+ return err;
}
diff --git a/kcmp/Makefile b/kcmp/Makefile
index ff0eefd..8aabd82 100644
--- a/kcmp/Makefile
+++ b/kcmp/Makefile
@@ -1,7 +1,25 @@
-CC := $(CROSS_COMPILE)$(CC)
+uname_M := $(shell uname -m 2>/dev/null || echo not)
+ARCH ?= $(shell echo $(uname_M) | sed -e s/i.86/i386/)
+ifeq ($(ARCH),i386)
+ ARCH := x86
+ CFLAGS := -DCONFIG_X86_32 -D__i386__
+endif
+ifeq ($(ARCH),x86_64)
+ ARCH := x86
+ CFLAGS := -DCONFIG_X86_64 -D__x86_64__
+endif
+
+CFLAGS += -I../../../../arch/x86/include/generated/
+CFLAGS += -I../../../../include/
CFLAGS += -I../../../../usr/include/
+CFLAGS += -I../../../../arch/x86/include/
-all: kcmp_test
+all:
+ifeq ($(ARCH),x86)
+ gcc $(CFLAGS) kcmp_test.c -o kcmp_test
+else
+ echo "Not an x86 target, can't build kcmp selftest"
+endif
run_tests: all
@./kcmp_test || echo "kcmp_test: [FAIL]"
diff --git a/kcmp/kcmp_test.c b/kcmp/kcmp_test.c
index a5a4da8..dbba408 100644
--- a/kcmp/kcmp_test.c
+++ b/kcmp/kcmp_test.c
@@ -17,8 +17,6 @@
#include <sys/stat.h>
#include <sys/wait.h>
-#include "../kselftest.h"
-
static long sys_kcmp(int pid1, int pid2, int type, int fd1, int fd2)
{
return syscall(__NR_kcmp, pid1, pid2, type, fd1, fd2);
@@ -36,13 +34,13 @@ int main(int argc, char **argv)
if (fd1 < 0) {
perror("Can't create file");
- ksft_exit_fail();
+ exit(1);
}
pid2 = fork();
if (pid2 < 0) {
perror("fork failed");
- ksft_exit_fail();
+ exit(1);
}
if (!pid2) {
@@ -52,7 +50,7 @@ int main(int argc, char **argv)
fd2 = open(kpath, O_RDWR, 0644);
if (fd2 < 0) {
perror("Can't open file");
- ksft_exit_fail();
+ exit(1);
}
/* An example of output and arguments */
@@ -76,34 +74,23 @@ int main(int argc, char **argv)
if (ret) {
printf("FAIL: 0 expected but %d returned (%s)\n",
ret, strerror(errno));
- ksft_inc_fail_cnt();
ret = -1;
- } else {
+ } else
printf("PASS: 0 returned as expected\n");
- ksft_inc_pass_cnt();
- }
/* Compare with self */
ret = sys_kcmp(pid1, pid1, KCMP_VM, 0, 0);
if (ret) {
printf("FAIL: 0 expected but %d returned (%s)\n",
ret, strerror(errno));
- ksft_inc_fail_cnt();
ret = -1;
- } else {
+ } else
printf("PASS: 0 returned as expected\n");
- ksft_inc_pass_cnt();
- }
-
- ksft_print_cnts();
- if (ret)
- ksft_exit_fail();
- else
- ksft_exit_pass();
+ exit(ret);
}
waitpid(pid2, &status, P_ALL);
- return ksft_exit_pass();
+ return 0;
}
diff --git a/kselftest.h b/kselftest.h
deleted file mode 100644
index 572c888..0000000
--- a/kselftest.h
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * kselftest.h: kselftest framework return codes to include from
- * selftests.
- *
- * Copyright (c) 2014 Shuah Khan <shuahkh@osg.samsung.com>
- * Copyright (c) 2014 Samsung Electronics Co., Ltd.
- *
- * This file is released under the GPLv2.
- */
-#ifndef __KSELFTEST_H
-#define __KSELFTEST_H
-
-#include <stdlib.h>
-#include <unistd.h>
-
-/* counters */
-struct ksft_count {
- unsigned int ksft_pass;
- unsigned int ksft_fail;
- unsigned int ksft_xfail;
- unsigned int ksft_xpass;
- unsigned int ksft_xskip;
-};
-
-static struct ksft_count ksft_cnt;
-
-static inline void ksft_inc_pass_cnt(void) { ksft_cnt.ksft_pass++; }
-static inline void ksft_inc_fail_cnt(void) { ksft_cnt.ksft_fail++; }
-static inline void ksft_inc_xfail_cnt(void) { ksft_cnt.ksft_xfail++; }
-static inline void ksft_inc_xpass_cnt(void) { ksft_cnt.ksft_xpass++; }
-static inline void ksft_inc_xskip_cnt(void) { ksft_cnt.ksft_xskip++; }
-
-static inline void ksft_print_cnts(void)
-{
- printf("Pass: %d Fail: %d Xfail: %d Xpass: %d, Xskip: %d\n",
- ksft_cnt.ksft_pass, ksft_cnt.ksft_fail,
- ksft_cnt.ksft_xfail, ksft_cnt.ksft_xpass,
- ksft_cnt.ksft_xskip);
-}
-
-static inline int ksft_exit_pass(void)
-{
- exit(0);
-}
-static inline int ksft_exit_fail(void)
-{
- exit(1);
-}
-static inline int ksft_exit_xfail(void)
-{
- exit(2);
-}
-static inline int ksft_exit_xpass(void)
-{
- exit(3);
-}
-static inline int ksft_exit_skip(void)
-{
- exit(4);
-}
-
-#endif /* __KSELFTEST_H */
diff --git a/mount/unprivileged-remount-test.c b/mount/unprivileged-remount-test.c
index 5177850..1b3ff2f 100644
--- a/mount/unprivileged-remount-test.c
+++ b/mount/unprivileged-remount-test.c
@@ -6,8 +6,6 @@
#include <sys/types.h>
#include <sys/mount.h>
#include <sys/wait.h>
-#include <sys/vfs.h>
-#include <sys/statvfs.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
@@ -34,14 +32,11 @@
# define CLONE_NEWPID 0x20000000
#endif
-#ifndef MS_REC
-# define MS_REC 16384
-#endif
#ifndef MS_RELATIME
-# define MS_RELATIME (1 << 21)
+#define MS_RELATIME (1 << 21)
#endif
#ifndef MS_STRICTATIME
-# define MS_STRICTATIME (1 << 24)
+#define MS_STRICTATIME (1 << 24)
#endif
static void die(char *fmt, ...)
@@ -53,14 +48,17 @@ static void die(char *fmt, ...)
exit(EXIT_FAILURE);
}
-static void vmaybe_write_file(bool enoent_ok, char *filename, char *fmt, va_list ap)
+static void write_file(char *filename, char *fmt, ...)
{
char buf[4096];
int fd;
ssize_t written;
int buf_len;
+ va_list ap;
+ va_start(ap, fmt);
buf_len = vsnprintf(buf, sizeof(buf), fmt, ap);
+ va_end(ap);
if (buf_len < 0) {
die("vsnprintf failed: %s\n",
strerror(errno));
@@ -71,8 +69,6 @@ static void vmaybe_write_file(bool enoent_ok, char *filename, char *fmt, va_list
fd = open(filename, O_WRONLY);
if (fd < 0) {
- if ((errno == ENOENT) && enoent_ok)
- return;
die("open of %s failed: %s\n",
filename, strerror(errno));
}
@@ -91,65 +87,6 @@ static void vmaybe_write_file(bool enoent_ok, char *filename, char *fmt, va_list
}
}
-static void maybe_write_file(char *filename, char *fmt, ...)
-{
- va_list ap;
-
- va_start(ap, fmt);
- vmaybe_write_file(true, filename, fmt, ap);
- va_end(ap);
-
-}
-
-static void write_file(char *filename, char *fmt, ...)
-{
- va_list ap;
-
- va_start(ap, fmt);
- vmaybe_write_file(false, filename, fmt, ap);
- va_end(ap);
-
-}
-
-static int read_mnt_flags(const char *path)
-{
- int ret;
- struct statvfs stat;
- int mnt_flags;
-
- ret = statvfs(path, &stat);
- if (ret != 0) {
- die("statvfs of %s failed: %s\n",
- path, strerror(errno));
- }
- if (stat.f_flag & ~(ST_RDONLY | ST_NOSUID | ST_NODEV | \
- ST_NOEXEC | ST_NOATIME | ST_NODIRATIME | ST_RELATIME | \
- ST_SYNCHRONOUS | ST_MANDLOCK)) {
- die("Unrecognized mount flags\n");
- }
- mnt_flags = 0;
- if (stat.f_flag & ST_RDONLY)
- mnt_flags |= MS_RDONLY;
- if (stat.f_flag & ST_NOSUID)
- mnt_flags |= MS_NOSUID;
- if (stat.f_flag & ST_NODEV)
- mnt_flags |= MS_NODEV;
- if (stat.f_flag & ST_NOEXEC)
- mnt_flags |= MS_NOEXEC;
- if (stat.f_flag & ST_NOATIME)
- mnt_flags |= MS_NOATIME;
- if (stat.f_flag & ST_NODIRATIME)
- mnt_flags |= MS_NODIRATIME;
- if (stat.f_flag & ST_RELATIME)
- mnt_flags |= MS_RELATIME;
- if (stat.f_flag & ST_SYNCHRONOUS)
- mnt_flags |= MS_SYNCHRONOUS;
- if (stat.f_flag & ST_MANDLOCK)
- mnt_flags |= ST_MANDLOCK;
-
- return mnt_flags;
-}
-
static void create_and_enter_userns(void)
{
uid_t uid;
@@ -163,10 +100,13 @@ static void create_and_enter_userns(void)
strerror(errno));
}
- maybe_write_file("/proc/self/setgroups", "deny");
write_file("/proc/self/uid_map", "0 %d 1", uid);
write_file("/proc/self/gid_map", "0 %d 1", gid);
+ if (setgroups(0, NULL) != 0) {
+ die("setgroups failed: %s\n",
+ strerror(errno));
+ }
if (setgid(0) != 0) {
die ("setgid(0) failed %s\n",
strerror(errno));
@@ -178,8 +118,7 @@ static void create_and_enter_userns(void)
}
static
-bool test_unpriv_remount(const char *fstype, const char *mount_options,
- int mount_flags, int remount_flags, int invalid_flags)
+bool test_unpriv_remount(int mount_flags, int remount_flags, int invalid_flags)
{
pid_t child;
@@ -212,11 +151,9 @@ bool test_unpriv_remount(const char *fstype, const char *mount_options,
strerror(errno));
}
- if (mount("testing", "/tmp", fstype, mount_flags, mount_options) != 0) {
- die("mount of %s with options '%s' on /tmp failed: %s\n",
- fstype,
- mount_options? mount_options : "",
- strerror(errno));
+ if (mount("testing", "/tmp", "ramfs", mount_flags, NULL) != 0) {
+ die("mount of /tmp failed: %s\n",
+ strerror(errno));
}
create_and_enter_userns();
@@ -244,127 +181,62 @@ bool test_unpriv_remount(const char *fstype, const char *mount_options,
static bool test_unpriv_remount_simple(int mount_flags)
{
- return test_unpriv_remount("ramfs", NULL, mount_flags, mount_flags, 0);
+ return test_unpriv_remount(mount_flags, mount_flags, 0);
}
static bool test_unpriv_remount_atime(int mount_flags, int invalid_flags)
{
- return test_unpriv_remount("ramfs", NULL, mount_flags, mount_flags,
- invalid_flags);
-}
-
-static bool test_priv_mount_unpriv_remount(void)
-{
- pid_t child;
- int ret;
- const char *orig_path = "/dev";
- const char *dest_path = "/tmp";
- int orig_mnt_flags, remount_mnt_flags;
-
- child = fork();
- if (child == -1) {
- die("fork failed: %s\n",
- strerror(errno));
- }
- if (child != 0) { /* parent */
- pid_t pid;
- int status;
- pid = waitpid(child, &status, 0);
- if (pid == -1) {
- die("waitpid failed: %s\n",
- strerror(errno));
- }
- if (pid != child) {
- die("waited for %d got %d\n",
- child, pid);
- }
- if (!WIFEXITED(status)) {
- die("child did not terminate cleanly\n");
- }
- return WEXITSTATUS(status) == EXIT_SUCCESS ? true : false;
- }
-
- orig_mnt_flags = read_mnt_flags(orig_path);
-
- create_and_enter_userns();
- ret = unshare(CLONE_NEWNS);
- if (ret != 0) {
- die("unshare(CLONE_NEWNS) failed: %s\n",
- strerror(errno));
- }
-
- ret = mount(orig_path, dest_path, "bind", MS_BIND | MS_REC, NULL);
- if (ret != 0) {
- die("recursive bind mount of %s onto %s failed: %s\n",
- orig_path, dest_path, strerror(errno));
- }
-
- ret = mount(dest_path, dest_path, "none",
- MS_REMOUNT | MS_BIND | orig_mnt_flags , NULL);
- if (ret != 0) {
- /* system("cat /proc/self/mounts"); */
- die("remount of /tmp failed: %s\n",
- strerror(errno));
- }
-
- remount_mnt_flags = read_mnt_flags(dest_path);
- if (orig_mnt_flags != remount_mnt_flags) {
- die("Mount flags unexpectedly changed during remount of %s originally mounted on %s\n",
- dest_path, orig_path);
- }
- exit(EXIT_SUCCESS);
+ return test_unpriv_remount(mount_flags, mount_flags, invalid_flags);
}
int main(int argc, char **argv)
{
- if (!test_unpriv_remount_simple(MS_RDONLY)) {
+ if (!test_unpriv_remount_simple(MS_RDONLY|MS_NODEV)) {
die("MS_RDONLY malfunctions\n");
}
- if (!test_unpriv_remount("devpts", "newinstance", MS_NODEV, MS_NODEV, 0)) {
+ if (!test_unpriv_remount_simple(MS_NODEV)) {
die("MS_NODEV malfunctions\n");
}
- if (!test_unpriv_remount_simple(MS_NOSUID)) {
+ if (!test_unpriv_remount_simple(MS_NOSUID|MS_NODEV)) {
die("MS_NOSUID malfunctions\n");
}
- if (!test_unpriv_remount_simple(MS_NOEXEC)) {
+ if (!test_unpriv_remount_simple(MS_NOEXEC|MS_NODEV)) {
die("MS_NOEXEC malfunctions\n");
}
- if (!test_unpriv_remount_atime(MS_RELATIME,
- MS_NOATIME))
+ if (!test_unpriv_remount_atime(MS_RELATIME|MS_NODEV,
+ MS_NOATIME|MS_NODEV))
{
die("MS_RELATIME malfunctions\n");
}
- if (!test_unpriv_remount_atime(MS_STRICTATIME,
- MS_NOATIME))
+ if (!test_unpriv_remount_atime(MS_STRICTATIME|MS_NODEV,
+ MS_NOATIME|MS_NODEV))
{
die("MS_STRICTATIME malfunctions\n");
}
- if (!test_unpriv_remount_atime(MS_NOATIME,
- MS_STRICTATIME))
+ if (!test_unpriv_remount_atime(MS_NOATIME|MS_NODEV,
+ MS_STRICTATIME|MS_NODEV))
{
- die("MS_NOATIME malfunctions\n");
+ die("MS_RELATIME malfunctions\n");
}
- if (!test_unpriv_remount_atime(MS_RELATIME|MS_NODIRATIME,
- MS_NOATIME))
+ if (!test_unpriv_remount_atime(MS_RELATIME|MS_NODIRATIME|MS_NODEV,
+ MS_NOATIME|MS_NODEV))
{
- die("MS_RELATIME|MS_NODIRATIME malfunctions\n");
+ die("MS_RELATIME malfunctions\n");
}
- if (!test_unpriv_remount_atime(MS_STRICTATIME|MS_NODIRATIME,
- MS_NOATIME))
+ if (!test_unpriv_remount_atime(MS_STRICTATIME|MS_NODIRATIME|MS_NODEV,
+ MS_NOATIME|MS_NODEV))
{
- die("MS_STRICTATIME|MS_NODIRATIME malfunctions\n");
+ die("MS_RELATIME malfunctions\n");
}
- if (!test_unpriv_remount_atime(MS_NOATIME|MS_NODIRATIME,
- MS_STRICTATIME))
+ if (!test_unpriv_remount_atime(MS_NOATIME|MS_NODIRATIME|MS_NODEV,
+ MS_STRICTATIME|MS_NODEV))
{
- die("MS_NOATIME|MS_DIRATIME malfunctions\n");
+ die("MS_RELATIME malfunctions\n");
}
- if (!test_unpriv_remount("ramfs", NULL, MS_STRICTATIME, 0, MS_NOATIME))
+ if (!test_unpriv_remount(MS_STRICTATIME|MS_NODEV, MS_NODEV,
+ MS_NOATIME|MS_NODEV))
{
die("Default atime malfunctions\n");
}
- if (!test_priv_mount_unpriv_remount()) {
- die("Mount flags unexpectedly changed after remount\n");
- }
return EXIT_SUCCESS;
}
diff --git a/net/Makefile b/net/Makefile
index 62f22cc..c7493b8 100644
--- a/net/Makefile
+++ b/net/Makefile
@@ -14,6 +14,12 @@ all: $(NET_PROGS)
run_tests: all
@/bin/sh ./run_netsocktests || echo "sockettests: [FAIL]"
@/bin/sh ./run_afpackettests || echo "afpackettests: [FAIL]"
- ./test_bpf.sh
+ @if /sbin/modprobe test_bpf ; then \
+ /sbin/rmmod test_bpf; \
+ echo "test_bpf: ok"; \
+ else \
+ echo "test_bpf: [FAIL]"; \
+ exit 1; \
+ fi
clean:
$(RM) $(NET_PROGS)
diff --git a/net/test_bpf.sh b/net/test_bpf.sh
deleted file mode 100755
index 8b29796..0000000
--- a/net/test_bpf.sh
+++ /dev/null
@@ -1,10 +0,0 @@
-#!/bin/sh
-# Runs bpf test using test_bpf kernel module
-
-if /sbin/modprobe -q test_bpf ; then
- /sbin/modprobe -q -r test_bpf;
- echo "test_bpf: ok";
-else
- echo "test_bpf: [FAIL]";
- exit 1;
-fi
diff --git a/rcutorture/bin/kvm-test-1-run.sh b/rcutorture/bin/kvm-test-1-run.sh
index 8ca9f21..f6b2b47 100755
--- a/rcutorture/bin/kvm-test-1-run.sh
+++ b/rcutorture/bin/kvm-test-1-run.sh
@@ -45,7 +45,7 @@ trap 'rm -rf $T' 0
touch $T
. $KVM/bin/functions.sh
-. $CONFIGFRAG/ver_functions.sh
+. $KVPATH/ver_functions.sh
config_template=${1}
config_dir=`echo $config_template | sed -e 's,/[^/]*$,,'`
@@ -168,8 +168,8 @@ then
touch $resdir/buildonly
exit 0
fi
-echo $QEMU $qemu_args -m 512 -kernel $resdir/bzImage -append \"$qemu_append $boot_args\" > $resdir/qemu-cmd
-( $QEMU $qemu_args -m 512 -kernel $resdir/bzImage -append "$qemu_append $boot_args"; echo $? > $resdir/qemu-retval ) &
+echo $QEMU $qemu_args -m 512 -kernel $builddir/$BOOT_IMAGE -append \"$qemu_append $boot_args\" > $resdir/qemu-cmd
+( $QEMU $qemu_args -m 512 -kernel $builddir/$BOOT_IMAGE -append "$qemu_append $boot_args"; echo $? > $resdir/qemu-retval ) &
qemu_pid=$!
commandcompleted=0
echo Monitoring qemu job at pid $qemu_pid
diff --git a/rcutorture/bin/kvm.sh b/rcutorture/bin/kvm.sh
index 368d64a..e527dc9 100755
--- a/rcutorture/bin/kvm.sh
+++ b/rcutorture/bin/kvm.sh
@@ -47,6 +47,7 @@ resdir=""
configs=""
cpus=0
ds=`date +%Y.%m.%d-%H:%M:%S`
+kversion=""
. functions.sh
@@ -63,6 +64,7 @@ usage () {
echo " --duration minutes"
echo " --interactive"
echo " --kmake-arg kernel-make-arguments"
+ echo " --kversion vN.NN"
echo " --mac nn:nn:nn:nn:nn:nn"
echo " --no-initrd"
echo " --qemu-args qemu-system-..."
@@ -126,6 +128,11 @@ do
TORTURE_KMAKE_ARG="$2"
shift
;;
+ --kversion)
+ checkarg --kversion "(kernel version)" $# "$2" '^v[0-9.]*$' '^error'
+ kversion=$2
+ shift
+ ;;
--mac)
checkarg --mac "(MAC address)" $# "$2" '^\([0-9a-fA-F]\{2\}:\)\{5\}[0-9a-fA-F]\{2\}$' error
TORTURE_QEMU_MAC=$2
@@ -163,10 +170,11 @@ do
done
CONFIGFRAG=${KVM}/configs/${TORTURE_SUITE}; export CONFIGFRAG
+KVPATH=${CONFIGFRAG}/$kversion; export KVPATH
if test -z "$configs"
then
- configs="`cat $CONFIGFRAG/CFLIST`"
+ configs="`cat $CONFIGFRAG/$kversion/CFLIST`"
fi
if test -z "$resdir"
@@ -178,10 +186,10 @@ fi
touch $T/cfgcpu
for CF in $configs
do
- if test -f "$CONFIGFRAG/$CF"
+ if test -f "$CONFIGFRAG/$kversion/$CF"
then
- cpu_count=`configNR_CPUS.sh $CONFIGFRAG/$CF`
- cpu_count=`configfrag_boot_cpus "$TORTURE_BOOTARGS" "$CONFIGFRAG/$CF" "$cpu_count"`
+ cpu_count=`configNR_CPUS.sh $CONFIGFRAG/$kversion/$CF`
+ cpu_count=`configfrag_boot_cpus "$TORTURE_BOOTARGS" "$CONFIGFRAG/$kversion/$CF" "$cpu_count"`
echo $CF $cpu_count >> $T/cfgcpu
else
echo "The --configs file $CF does not exist, terminating."
@@ -244,6 +252,7 @@ END {
cat << ___EOF___ > $T/script
CONFIGFRAG="$CONFIGFRAG"; export CONFIGFRAG
KVM="$KVM"; export KVM
+KVPATH="$KVPATH"; export KVPATH
PATH="$PATH"; export PATH
TORTURE_BOOT_IMAGE="$TORTURE_BOOT_IMAGE"; export TORTURE_BOOT_IMAGE
TORTURE_BUILDONLY="$TORTURE_BUILDONLY"; export TORTURE_BUILDONLY
@@ -276,7 +285,7 @@ then
fi
___EOF___
awk < $T/cfgcpu.pack \
- -v CONFIGDIR="$CONFIGFRAG/" \
+ -v CONFIGDIR="$CONFIGFRAG/$kversion/" \
-v KVM="$KVM" \
-v ncpus=$cpus \
-v rd=$resdir/$ds/ \
diff --git a/rcutorture/configs/rcu/TINY02 b/rcutorture/configs/rcu/TINY02
index 36e41df..f4feaee 100644
--- a/rcutorture/configs/rcu/TINY02
+++ b/rcutorture/configs/rcu/TINY02
@@ -7,8 +7,6 @@ CONFIG_HZ_PERIODIC=y
CONFIG_NO_HZ_IDLE=n
CONFIG_NO_HZ_FULL=n
CONFIG_RCU_TRACE=y
-CONFIG_PROVE_LOCKING=y
-CONFIG_PROVE_RCU=y
CONFIG_DEBUG_LOCK_ALLOC=y
CONFIG_DEBUG_OBJECTS_RCU_HEAD=n
CONFIG_PREEMPT_COUNT=y
diff --git a/rcutorture/configs/rcu/TINY02.boot b/rcutorture/configs/rcu/TINY02.boot
deleted file mode 100644
index 0f08027..0000000
--- a/rcutorture/configs/rcu/TINY02.boot
+++ /dev/null
@@ -1,2 +0,0 @@
-rcupdate.rcu_self_test=1
-rcupdate.rcu_self_test_bh=1
diff --git a/rcutorture/configs/rcu/TREE01 b/rcutorture/configs/rcu/TREE01
index f8a10a7..38e3895 100644
--- a/rcutorture/configs/rcu/TREE01
+++ b/rcutorture/configs/rcu/TREE01
@@ -2,7 +2,7 @@ CONFIG_SMP=y
CONFIG_PREEMPT_NONE=n
CONFIG_PREEMPT_VOLUNTARY=n
CONFIG_PREEMPT=y
-#CHECK#CONFIG_PREEMPT_RCU=y
+#CHECK#CONFIG_TREE_PREEMPT_RCU=y
CONFIG_HZ_PERIODIC=n
CONFIG_NO_HZ_IDLE=y
CONFIG_NO_HZ_FULL=n
@@ -14,5 +14,6 @@ CONFIG_RCU_NOCB_CPU=y
CONFIG_RCU_NOCB_CPU_ZERO=y
CONFIG_DEBUG_LOCK_ALLOC=n
CONFIG_RCU_CPU_STALL_INFO=n
+CONFIG_RCU_CPU_STALL_VERBOSE=n
CONFIG_RCU_BOOST=n
CONFIG_DEBUG_OBJECTS_RCU_HEAD=n
diff --git a/rcutorture/configs/rcu/TREE02 b/rcutorture/configs/rcu/TREE02
index 629122f..ea119ba 100644
--- a/rcutorture/configs/rcu/TREE02
+++ b/rcutorture/configs/rcu/TREE02
@@ -3,7 +3,7 @@ CONFIG_NR_CPUS=8
CONFIG_PREEMPT_NONE=n
CONFIG_PREEMPT_VOLUNTARY=n
CONFIG_PREEMPT=y
-#CHECK#CONFIG_PREEMPT_RCU=y
+#CHECK#CONFIG_TREE_PREEMPT_RCU=y
CONFIG_HZ_PERIODIC=n
CONFIG_NO_HZ_IDLE=y
CONFIG_NO_HZ_FULL=n
@@ -19,5 +19,6 @@ CONFIG_RCU_NOCB_CPU=n
CONFIG_DEBUG_LOCK_ALLOC=y
CONFIG_PROVE_LOCKING=n
CONFIG_RCU_CPU_STALL_INFO=n
+CONFIG_RCU_CPU_STALL_VERBOSE=y
CONFIG_RCU_BOOST=n
CONFIG_DEBUG_OBJECTS_RCU_HEAD=n
diff --git a/rcutorture/configs/rcu/TREE02-T b/rcutorture/configs/rcu/TREE02-T
index a25de47..19cf948 100644
--- a/rcutorture/configs/rcu/TREE02-T
+++ b/rcutorture/configs/rcu/TREE02-T
@@ -3,7 +3,7 @@ CONFIG_NR_CPUS=8
CONFIG_PREEMPT_NONE=n
CONFIG_PREEMPT_VOLUNTARY=n
CONFIG_PREEMPT=y
-#CHECK#CONFIG_PREEMPT_RCU=y
+#CHECK#CONFIG_TREE_PREEMPT_RCU=y
CONFIG_HZ_PERIODIC=n
CONFIG_NO_HZ_IDLE=y
CONFIG_NO_HZ_FULL=n
@@ -19,5 +19,6 @@ CONFIG_RCU_NOCB_CPU=n
CONFIG_DEBUG_LOCK_ALLOC=y
CONFIG_PROVE_LOCKING=n
CONFIG_RCU_CPU_STALL_INFO=n
+CONFIG_RCU_CPU_STALL_VERBOSE=y
CONFIG_RCU_BOOST=n
CONFIG_DEBUG_OBJECTS_RCU_HEAD=n
diff --git a/rcutorture/configs/rcu/TREE03 b/rcutorture/configs/rcu/TREE03
index 53f24e0..f4567fb 100644
--- a/rcutorture/configs/rcu/TREE03
+++ b/rcutorture/configs/rcu/TREE03
@@ -3,7 +3,7 @@ CONFIG_NR_CPUS=8
CONFIG_PREEMPT_NONE=n
CONFIG_PREEMPT_VOLUNTARY=n
CONFIG_PREEMPT=y
-#CHECK#CONFIG_PREEMPT_RCU=y
+#CHECK#CONFIG_TREE_PREEMPT_RCU=y
CONFIG_HZ_PERIODIC=y
CONFIG_NO_HZ_IDLE=n
CONFIG_NO_HZ_FULL=n
@@ -15,6 +15,7 @@ CONFIG_RCU_FANOUT_EXACT=n
CONFIG_RCU_NOCB_CPU=n
CONFIG_DEBUG_LOCK_ALLOC=n
CONFIG_RCU_CPU_STALL_INFO=n
+CONFIG_RCU_CPU_STALL_VERBOSE=n
CONFIG_RCU_BOOST=y
-CONFIG_RCU_KTHREAD_PRIO=2
+CONFIG_RCU_BOOST_PRIO=2
CONFIG_DEBUG_OBJECTS_RCU_HEAD=n
diff --git a/rcutorture/configs/rcu/TREE04 b/rcutorture/configs/rcu/TREE04
index 0f84db3..0a262fb 100644
--- a/rcutorture/configs/rcu/TREE04
+++ b/rcutorture/configs/rcu/TREE04
@@ -19,4 +19,5 @@ CONFIG_RCU_FANOUT_EXACT=n
CONFIG_RCU_NOCB_CPU=n
CONFIG_DEBUG_LOCK_ALLOC=n
CONFIG_RCU_CPU_STALL_INFO=y
+CONFIG_RCU_CPU_STALL_VERBOSE=y
CONFIG_DEBUG_OBJECTS_RCU_HEAD=n
diff --git a/rcutorture/configs/rcu/TREE05 b/rcutorture/configs/rcu/TREE05
index 212e3bf..3a06b97 100644
--- a/rcutorture/configs/rcu/TREE05
+++ b/rcutorture/configs/rcu/TREE05
@@ -19,4 +19,5 @@ CONFIG_DEBUG_LOCK_ALLOC=y
CONFIG_PROVE_LOCKING=y
CONFIG_PROVE_RCU=y
CONFIG_RCU_CPU_STALL_INFO=n
+CONFIG_RCU_CPU_STALL_VERBOSE=n
CONFIG_DEBUG_OBJECTS_RCU_HEAD=n
diff --git a/rcutorture/configs/rcu/TREE05.boot b/rcutorture/configs/rcu/TREE05.boot
index 15b3e1a..3b42b8b 100644
--- a/rcutorture/configs/rcu/TREE05.boot
+++ b/rcutorture/configs/rcu/TREE05.boot
@@ -1,2 +1 @@
rcutorture.torture_type=sched
-rcupdate.rcu_self_test_sched=1
diff --git a/rcutorture/configs/rcu/TREE06 b/rcutorture/configs/rcu/TREE06
index 7eee63b..8f084cc 100644
--- a/rcutorture/configs/rcu/TREE06
+++ b/rcutorture/configs/rcu/TREE06
@@ -20,4 +20,5 @@ CONFIG_DEBUG_LOCK_ALLOC=y
CONFIG_PROVE_LOCKING=y
CONFIG_PROVE_RCU=y
CONFIG_RCU_CPU_STALL_INFO=n
+CONFIG_RCU_CPU_STALL_VERBOSE=n
CONFIG_DEBUG_OBJECTS_RCU_HEAD=y
diff --git a/rcutorture/configs/rcu/TREE06.boot b/rcutorture/configs/rcu/TREE06.boot
deleted file mode 100644
index da9a03a..0000000
--- a/rcutorture/configs/rcu/TREE06.boot
+++ /dev/null
@@ -1,3 +0,0 @@
-rcupdate.rcu_self_test=1
-rcupdate.rcu_self_test_bh=1
-rcupdate.rcu_self_test_sched=1
diff --git a/rcutorture/configs/rcu/TREE07 b/rcutorture/configs/rcu/TREE07
index 92a97fa..8f10176 100644
--- a/rcutorture/configs/rcu/TREE07
+++ b/rcutorture/configs/rcu/TREE07
@@ -19,4 +19,5 @@ CONFIG_RCU_FANOUT_EXACT=n
CONFIG_RCU_NOCB_CPU=n
CONFIG_DEBUG_LOCK_ALLOC=n
CONFIG_RCU_CPU_STALL_INFO=y
+CONFIG_RCU_CPU_STALL_VERBOSE=n
CONFIG_DEBUG_OBJECTS_RCU_HEAD=n
diff --git a/rcutorture/configs/rcu/TREE08 b/rcutorture/configs/rcu/TREE08
index 5812027..69a2e25 100644
--- a/rcutorture/configs/rcu/TREE08
+++ b/rcutorture/configs/rcu/TREE08
@@ -3,7 +3,7 @@ CONFIG_NR_CPUS=16
CONFIG_PREEMPT_NONE=n
CONFIG_PREEMPT_VOLUNTARY=n
CONFIG_PREEMPT=y
-#CHECK#CONFIG_PREEMPT_RCU=y
+#CHECK#CONFIG_TREE_PREEMPT_RCU=y
CONFIG_HZ_PERIODIC=n
CONFIG_NO_HZ_IDLE=y
CONFIG_NO_HZ_FULL=n
@@ -18,8 +18,7 @@ CONFIG_RCU_FANOUT_LEAF=2
CONFIG_RCU_NOCB_CPU=y
CONFIG_RCU_NOCB_CPU_ALL=y
CONFIG_DEBUG_LOCK_ALLOC=n
-CONFIG_PROVE_LOCKING=y
-CONFIG_PROVE_RCU=y
CONFIG_RCU_CPU_STALL_INFO=n
+CONFIG_RCU_CPU_STALL_VERBOSE=n
CONFIG_RCU_BOOST=n
CONFIG_DEBUG_OBJECTS_RCU_HEAD=n
diff --git a/rcutorture/configs/rcu/TREE08-T b/rcutorture/configs/rcu/TREE08-T
index 3eaecca..a0f32fb 100644
--- a/rcutorture/configs/rcu/TREE08-T
+++ b/rcutorture/configs/rcu/TREE08-T
@@ -3,7 +3,7 @@ CONFIG_NR_CPUS=16
CONFIG_PREEMPT_NONE=n
CONFIG_PREEMPT_VOLUNTARY=n
CONFIG_PREEMPT=y
-#CHECK#CONFIG_PREEMPT_RCU=y
+#CHECK#CONFIG_TREE_PREEMPT_RCU=y
CONFIG_HZ_PERIODIC=n
CONFIG_NO_HZ_IDLE=y
CONFIG_NO_HZ_FULL=n
@@ -19,5 +19,6 @@ CONFIG_RCU_NOCB_CPU=y
CONFIG_RCU_NOCB_CPU_ALL=y
CONFIG_DEBUG_LOCK_ALLOC=n
CONFIG_RCU_CPU_STALL_INFO=n
+CONFIG_RCU_CPU_STALL_VERBOSE=n
CONFIG_RCU_BOOST=n
CONFIG_DEBUG_OBJECTS_RCU_HEAD=n
diff --git a/rcutorture/configs/rcu/TREE08.boot b/rcutorture/configs/rcu/TREE08.boot
index 2561daf..3b42b8b 100644
--- a/rcutorture/configs/rcu/TREE08.boot
+++ b/rcutorture/configs/rcu/TREE08.boot
@@ -1,3 +1 @@
rcutorture.torture_type=sched
-rcupdate.rcu_self_test=1
-rcupdate.rcu_self_test_sched=1
diff --git a/rcutorture/configs/rcu/TREE09 b/rcutorture/configs/rcu/TREE09
index 6076b36..b7a62a5 100644
--- a/rcutorture/configs/rcu/TREE09
+++ b/rcutorture/configs/rcu/TREE09
@@ -3,7 +3,7 @@ CONFIG_NR_CPUS=1
CONFIG_PREEMPT_NONE=n
CONFIG_PREEMPT_VOLUNTARY=n
CONFIG_PREEMPT=y
-#CHECK#CONFIG_PREEMPT_RCU=y
+#CHECK#CONFIG_TREE_PREEMPT_RCU=y
CONFIG_HZ_PERIODIC=n
CONFIG_NO_HZ_IDLE=y
CONFIG_NO_HZ_FULL=n
@@ -14,5 +14,6 @@ CONFIG_HIBERNATION=n
CONFIG_RCU_NOCB_CPU=n
CONFIG_DEBUG_LOCK_ALLOC=n
CONFIG_RCU_CPU_STALL_INFO=n
+CONFIG_RCU_CPU_STALL_VERBOSE=n
CONFIG_RCU_BOOST=n
CONFIG_DEBUG_OBJECTS_RCU_HEAD=n
diff --git a/rcutorture/configs/rcu/v0.0/CFLIST b/rcutorture/configs/rcu/v0.0/CFLIST
new file mode 100644
index 0000000..1822394
--- /dev/null
+++ b/rcutorture/configs/rcu/v0.0/CFLIST
@@ -0,0 +1,14 @@
+P1-S-T-NH-SD-SMP-HP
+P2-2-t-nh-sd-SMP-hp
+P3-3-T-nh-SD-SMP-hp
+P4-A-t-NH-sd-SMP-HP
+P5-U-T-NH-sd-SMP-hp
+N1-S-T-NH-SD-SMP-HP
+N2-2-t-nh-sd-SMP-hp
+N3-3-T-nh-SD-SMP-hp
+N4-A-t-NH-sd-SMP-HP
+N5-U-T-NH-sd-SMP-hp
+PT1-nh
+PT2-NH
+NT1-nh
+NT3-NH
diff --git a/rcutorture/configs/rcu/v0.0/N1-S-T-NH-SD-SMP-HP b/rcutorture/configs/rcu/v0.0/N1-S-T-NH-SD-SMP-HP
new file mode 100644
index 0000000..d3ef873
--- /dev/null
+++ b/rcutorture/configs/rcu/v0.0/N1-S-T-NH-SD-SMP-HP
@@ -0,0 +1,18 @@
+CONFIG_RCU_TRACE=y
+CONFIG_NO_HZ=y
+CONFIG_SMP=y
+CONFIG_RCU_FANOUT=8
+CONFIG_NR_CPUS=8
+CONFIG_RCU_FANOUT_EXACT=n
+CONFIG_HOTPLUG_CPU=y
+CONFIG_PREEMPT_NONE=y
+CONFIG_PREEMPT_VOLUNTARY=n
+CONFIG_PREEMPT=n
+#CHECK#CONFIG_TREE_RCU=y
+CONFIG_RCU_TORTURE_TEST=m
+CONFIG_MODULE_UNLOAD=y
+CONFIG_SYSFS_DEPRECATED_V2=y
+CONFIG_IKCONFIG=y
+CONFIG_IKCONFIG_PROC=y
+CONFIG_PRINTK_TIME=y
+
diff --git a/rcutorture/configs/rcu/v0.0/N2-2-t-nh-sd-SMP-hp b/rcutorture/configs/rcu/v0.0/N2-2-t-nh-sd-SMP-hp
new file mode 100644
index 0000000..02e4185
--- /dev/null
+++ b/rcutorture/configs/rcu/v0.0/N2-2-t-nh-sd-SMP-hp
@@ -0,0 +1,20 @@
+CONFIG_RCU_TRACE=n
+CONFIG_NO_HZ=n
+CONFIG_SMP=y
+CONFIG_RCU_FANOUT=4
+CONFIG_NR_CPUS=8
+CONFIG_RCU_FANOUT_EXACT=n
+CONFIG_HOTPLUG_CPU=n
+CONFIG_SUSPEND=n
+CONFIG_HIBERNATION=n
+CONFIG_PREEMPT_NONE=y
+CONFIG_PREEMPT_VOLUNTARY=n
+CONFIG_PREEMPT=n
+#CHECK#CONFIG_TREE_RCU=y
+CONFIG_RCU_TORTURE_TEST=m
+CONFIG_MODULE_UNLOAD=y
+CONFIG_SYSFS_DEPRECATED_V2=y
+CONFIG_IKCONFIG=y
+CONFIG_IKCONFIG_PROC=y
+CONFIG_PRINTK_TIME=y
+
diff --git a/rcutorture/configs/rcu/v0.0/N3-3-T-nh-SD-SMP-hp b/rcutorture/configs/rcu/v0.0/N3-3-T-nh-SD-SMP-hp
new file mode 100644
index 0000000..b3100f6
--- /dev/null
+++ b/rcutorture/configs/rcu/v0.0/N3-3-T-nh-SD-SMP-hp
@@ -0,0 +1,22 @@
+CONFIG_RCU_TRACE=y
+CONFIG_NO_HZ=n
+CONFIG_SMP=y
+CONFIG_RCU_FANOUT=2
+CONFIG_NR_CPUS=8
+CONFIG_RCU_FANOUT_EXACT=n
+CONFIG_HOTPLUG_CPU=n
+CONFIG_SUSPEND=n
+CONFIG_HIBERNATION=n
+CONFIG_PREEMPT_NONE=y
+CONFIG_PREEMPT_VOLUNTARY=n
+CONFIG_PREEMPT=n
+#CHECK#CONFIG_TREE_RCU=y
+CONFIG_RCU_TORTURE_TEST=m
+CONFIG_MODULE_UNLOAD=y
+CONFIG_PROVE_LOCKING=y
+CONFIG_PROVE_RCU=y
+CONFIG_SYSFS_DEPRECATED_V2=y
+CONFIG_IKCONFIG=y
+CONFIG_IKCONFIG_PROC=y
+CONFIG_PRINTK_TIME=y
+
diff --git a/rcutorture/configs/rcu/v0.0/N4-A-t-NH-sd-SMP-HP b/rcutorture/configs/rcu/v0.0/N4-A-t-NH-sd-SMP-HP
new file mode 100644
index 0000000..c56b445
--- /dev/null
+++ b/rcutorture/configs/rcu/v0.0/N4-A-t-NH-sd-SMP-HP
@@ -0,0 +1,18 @@
+CONFIG_RCU_TRACE=n
+CONFIG_NO_HZ=y
+CONFIG_SMP=y
+CONFIG_RCU_FANOUT=6
+CONFIG_NR_CPUS=8
+CONFIG_RCU_FANOUT_EXACT=n
+CONFIG_HOTPLUG_CPU=y
+CONFIG_PREEMPT_NONE=y
+CONFIG_PREEMPT_VOLUNTARY=n
+CONFIG_PREEMPT=n
+#CHECK#CONFIG_TREE_RCU=y
+CONFIG_RCU_TORTURE_TEST=m
+CONFIG_MODULE_UNLOAD=y
+CONFIG_SYSFS_DEPRECATED_V2=y
+CONFIG_IKCONFIG=y
+CONFIG_IKCONFIG_PROC=y
+CONFIG_PRINTK_TIME=y
+
diff --git a/rcutorture/configs/rcu/v0.0/N5-U-T-NH-sd-SMP-hp b/rcutorture/configs/rcu/v0.0/N5-U-T-NH-sd-SMP-hp
new file mode 100644
index 0000000..90d924f
--- /dev/null
+++ b/rcutorture/configs/rcu/v0.0/N5-U-T-NH-sd-SMP-hp
@@ -0,0 +1,22 @@
+CONFIG_RCU_TRACE=y
+CONFIG_DEBUG_KERNEL=y
+CONFIG_RCU_CPU_STALL_INFO=y
+CONFIG_NO_HZ=y
+CONFIG_SMP=y
+CONFIG_RCU_FANOUT=6
+CONFIG_NR_CPUS=8
+CONFIG_RCU_FANOUT_EXACT=y
+CONFIG_HOTPLUG_CPU=n
+CONFIG_SUSPEND=n
+CONFIG_HIBERNATION=n
+CONFIG_PREEMPT_NONE=y
+CONFIG_PREEMPT_VOLUNTARY=n
+CONFIG_PREEMPT=n
+#CHECK#CONFIG_TREE_RCU=y
+CONFIG_RCU_TORTURE_TEST=m
+CONFIG_MODULE_UNLOAD=y
+CONFIG_SYSFS_DEPRECATED_V2=y
+CONFIG_IKCONFIG=y
+CONFIG_IKCONFIG_PROC=y
+CONFIG_PRINTK_TIME=y
+
diff --git a/rcutorture/configs/rcu/v0.0/NT1-nh b/rcutorture/configs/rcu/v0.0/NT1-nh
new file mode 100644
index 0000000..023f312
--- /dev/null
+++ b/rcutorture/configs/rcu/v0.0/NT1-nh
@@ -0,0 +1,23 @@
+#CHECK#CONFIG_TINY_RCU=y
+CONFIG_RCU_TRACE=y
+CONFIG_RCU_TORTURE_TEST=m
+CONFIG_MODULE_UNLOAD=y
+CONFIG_SUSPEND=n
+CONFIG_HIBERNATION=n
+#
+CONFIG_SMP=n
+#
+CONFIG_HOTPLUG_CPU=n
+#
+CONFIG_NO_HZ=n
+#
+CONFIG_PREEMPT_NONE=y
+CONFIG_PREEMPT_VOLUNTARY=n
+CONFIG_PREEMPT=n
+CONFIG_PROVE_LOCKING=y
+CONFIG_PROVE_RCU=y
+CONFIG_SYSFS_DEPRECATED_V2=y
+CONFIG_IKCONFIG=y
+CONFIG_IKCONFIG_PROC=y
+CONFIG_PRINTK_TIME=y
+
diff --git a/rcutorture/configs/rcu/v0.0/NT3-NH b/rcutorture/configs/rcu/v0.0/NT3-NH
new file mode 100644
index 0000000..6fd0235
--- /dev/null
+++ b/rcutorture/configs/rcu/v0.0/NT3-NH
@@ -0,0 +1,20 @@
+#CHECK#CONFIG_TINY_RCU=y
+CONFIG_RCU_TORTURE_TEST=m
+CONFIG_MODULE_UNLOAD=y
+CONFIG_SUSPEND=n
+CONFIG_HIBERNATION=n
+#
+CONFIG_SMP=n
+#
+CONFIG_HOTPLUG_CPU=n
+#
+CONFIG_NO_HZ=y
+#
+CONFIG_PREEMPT_NONE=y
+CONFIG_PREEMPT_VOLUNTARY=n
+CONFIG_PREEMPT=n
+CONFIG_SYSFS_DEPRECATED_V2=y
+CONFIG_IKCONFIG=y
+CONFIG_IKCONFIG_PROC=y
+CONFIG_PRINTK_TIME=y
+
diff --git a/rcutorture/configs/rcu/v0.0/P1-S-T-NH-SD-SMP-HP b/rcutorture/configs/rcu/v0.0/P1-S-T-NH-SD-SMP-HP
new file mode 100644
index 0000000..f72402d
--- /dev/null
+++ b/rcutorture/configs/rcu/v0.0/P1-S-T-NH-SD-SMP-HP
@@ -0,0 +1,19 @@
+CONFIG_RCU_TRACE=y
+CONFIG_RCU_CPU_STALL_INFO=y
+CONFIG_NO_HZ=y
+CONFIG_SMP=y
+CONFIG_RCU_FANOUT=8
+CONFIG_NR_CPUS=8
+CONFIG_RCU_FANOUT_EXACT=n
+CONFIG_HOTPLUG_CPU=y
+CONFIG_PREEMPT_NONE=n
+CONFIG_PREEMPT_VOLUNTARY=n
+CONFIG_PREEMPT=y
+#CHECK#CONFIG_TREE_PREEMPT_RCU=y
+CONFIG_RCU_TORTURE_TEST=m
+CONFIG_MODULE_UNLOAD=y
+CONFIG_SYSFS_DEPRECATED_V2=y
+CONFIG_IKCONFIG=y
+CONFIG_IKCONFIG_PROC=y
+CONFIG_PRINTK_TIME=y
+
diff --git a/rcutorture/configs/rcu/v0.0/P2-2-t-nh-sd-SMP-hp b/rcutorture/configs/rcu/v0.0/P2-2-t-nh-sd-SMP-hp
new file mode 100644
index 0000000..0f3b667
--- /dev/null
+++ b/rcutorture/configs/rcu/v0.0/P2-2-t-nh-sd-SMP-hp
@@ -0,0 +1,20 @@
+CONFIG_RCU_TRACE=n
+CONFIG_NO_HZ=n
+CONFIG_SMP=y
+CONFIG_RCU_FANOUT=4
+CONFIG_NR_CPUS=8
+CONFIG_RCU_FANOUT_EXACT=n
+CONFIG_HOTPLUG_CPU=n
+CONFIG_SUSPEND=n
+CONFIG_HIBERNATION=n
+CONFIG_PREEMPT_NONE=n
+CONFIG_PREEMPT_VOLUNTARY=n
+CONFIG_PREEMPT=y
+#CHECK#CONFIG_TREE_PREEMPT_RCU=y
+CONFIG_RCU_TORTURE_TEST=m
+CONFIG_MODULE_UNLOAD=y
+CONFIG_SYSFS_DEPRECATED_V2=y
+CONFIG_IKCONFIG=y
+CONFIG_IKCONFIG_PROC=y
+CONFIG_PRINTK_TIME=y
+
diff --git a/rcutorture/configs/rcu/v0.0/P3-3-T-nh-SD-SMP-hp b/rcutorture/configs/rcu/v0.0/P3-3-T-nh-SD-SMP-hp
new file mode 100644
index 0000000..b035e14
--- /dev/null
+++ b/rcutorture/configs/rcu/v0.0/P3-3-T-nh-SD-SMP-hp
@@ -0,0 +1,20 @@
+CONFIG_RCU_TRACE=y
+CONFIG_NO_HZ=n
+CONFIG_SMP=y
+CONFIG_RCU_FANOUT=2
+CONFIG_NR_CPUS=8
+CONFIG_RCU_FANOUT_EXACT=n
+CONFIG_HOTPLUG_CPU=n
+CONFIG_SUSPEND=n
+CONFIG_HIBERNATION=n
+CONFIG_PREEMPT_NONE=n
+CONFIG_PREEMPT_VOLUNTARY=n
+CONFIG_PREEMPT=y
+#CHECK#CONFIG_TREE_PREEMPT_RCU=y
+CONFIG_RCU_TORTURE_TEST=m
+CONFIG_MODULE_UNLOAD=y
+CONFIG_SYSFS_DEPRECATED_V2=y
+CONFIG_IKCONFIG=y
+CONFIG_IKCONFIG_PROC=y
+CONFIG_PRINTK_TIME=y
+
diff --git a/rcutorture/configs/rcu/v0.0/P4-A-t-NH-sd-SMP-HP b/rcutorture/configs/rcu/v0.0/P4-A-t-NH-sd-SMP-HP
new file mode 100644
index 0000000..3ccf6a9
--- /dev/null
+++ b/rcutorture/configs/rcu/v0.0/P4-A-t-NH-sd-SMP-HP
@@ -0,0 +1,22 @@
+CONFIG_RCU_TRACE=n
+CONFIG_NO_HZ=y
+CONFIG_SMP=y
+CONFIG_RCU_FANOUT=6
+CONFIG_NR_CPUS=8
+CONFIG_RCU_FANOUT_EXACT=n
+CONFIG_HOTPLUG_CPU=y
+CONFIG_PREEMPT_NONE=n
+CONFIG_PREEMPT_VOLUNTARY=n
+CONFIG_PREEMPT=y
+#CHECK#CONFIG_TREE_PREEMPT_RCU=y
+CONFIG_RCU_TORTURE_TEST=m
+CONFIG_MODULE_UNLOAD=y
+CONFIG_RT_MUTEXES=y
+CONFIG_RCU_BOOST=y
+CONFIG_RCU_BOOST_PRIO=2
+CONFIG_PROVE_LOCKING=y
+CONFIG_PROVE_RCU=y
+CONFIG_IKCONFIG=y
+CONFIG_IKCONFIG_PROC=y
+CONFIG_PRINTK_TIME=y
+
diff --git a/rcutorture/configs/rcu/v0.0/P5-U-T-NH-sd-SMP-hp b/rcutorture/configs/rcu/v0.0/P5-U-T-NH-sd-SMP-hp
new file mode 100644
index 0000000..a55c008
--- /dev/null
+++ b/rcutorture/configs/rcu/v0.0/P5-U-T-NH-sd-SMP-hp
@@ -0,0 +1,27 @@
+CONFIG_RCU_TRACE=y
+CONFIG_RCU_CPU_STALL_INFO=y
+CONFIG_NO_HZ=y
+CONFIG_SMP=y
+CONFIG_RCU_FANOUT=6
+CONFIG_NR_CPUS=8
+CONFIG_RCU_FANOUT_EXACT=y
+CONFIG_HOTPLUG_CPU=n
+CONFIG_SUSPEND=n
+CONFIG_HIBERNATION=n
+CONFIG_PREEMPT_NONE=n
+CONFIG_PREEMPT_VOLUNTARY=n
+CONFIG_PREEMPT=y
+#CHECK#CONFIG_TREE_PREEMPT_RCU=y
+CONFIG_DEBUG_KERNEL=y
+CONFIG_DEBUG_OBJECTS=y
+CONFIG_DEBUG_OBJECTS_RCU_HEAD=y
+CONFIG_RT_MUTEXES=y
+CONFIG_RCU_BOOST=y
+CONFIG_RCU_BOOST_PRIO=2
+CONFIG_RCU_TORTURE_TEST=m
+CONFIG_MODULE_UNLOAD=y
+CONFIG_SYSFS_DEPRECATED_V2=y
+CONFIG_IKCONFIG=y
+CONFIG_IKCONFIG_PROC=y
+CONFIG_PRINTK_TIME=y
+
diff --git a/rcutorture/configs/rcu/v0.0/PT1-nh b/rcutorture/configs/rcu/v0.0/PT1-nh
new file mode 100644
index 0000000..e3361c3
--- /dev/null
+++ b/rcutorture/configs/rcu/v0.0/PT1-nh
@@ -0,0 +1,23 @@
+CONFIG_TINY_PREEMPT_RCU=y
+CONFIG_RCU_BOOST=y
+CONFIG_RCU_BOOST_PRIO=2
+CONFIG_RCU_TRACE=y
+CONFIG_RCU_TORTURE_TEST=m
+CONFIG_MODULE_UNLOAD=y
+CONFIG_SUSPEND=n
+CONFIG_HIBERNATION=n
+#
+CONFIG_SMP=n
+#
+CONFIG_HOTPLUG_CPU=n
+#
+CONFIG_NO_HZ=n
+#
+CONFIG_PREEMPT_NONE=n
+CONFIG_PREEMPT_VOLUNTARY=n
+CONFIG_PREEMPT=y
+CONFIG_SYSFS_DEPRECATED_V2=y
+CONFIG_IKCONFIG=y
+CONFIG_IKCONFIG_PROC=y
+CONFIG_PRINTK_TIME=y
+
diff --git a/rcutorture/configs/rcu/v0.0/PT2-NH b/rcutorture/configs/rcu/v0.0/PT2-NH
new file mode 100644
index 0000000..64abfc3
--- /dev/null
+++ b/rcutorture/configs/rcu/v0.0/PT2-NH
@@ -0,0 +1,22 @@
+CONFIG_TINY_PREEMPT_RCU=y
+CONFIG_RCU_TORTURE_TEST=m
+CONFIG_MODULE_UNLOAD=y
+CONFIG_SUSPEND=n
+CONFIG_HIBERNATION=n
+#
+CONFIG_SMP=n
+#
+CONFIG_HOTPLUG_CPU=n
+#
+CONFIG_NO_HZ=y
+#
+CONFIG_PREEMPT_NONE=n
+CONFIG_PREEMPT_VOLUNTARY=n
+CONFIG_PREEMPT=y
+CONFIG_PROVE_LOCKING=y
+CONFIG_PROVE_RCU=y
+CONFIG_SYSFS_DEPRECATED_V2=y
+CONFIG_IKCONFIG=y
+CONFIG_IKCONFIG_PROC=y
+CONFIG_PRINTK_TIME=y
+
diff --git a/rcutorture/configs/rcu/v0.0/ver_functions.sh b/rcutorture/configs/rcu/v0.0/ver_functions.sh
new file mode 100644
index 0000000..5ace37a
--- /dev/null
+++ b/rcutorture/configs/rcu/v0.0/ver_functions.sh
@@ -0,0 +1,33 @@
+#!/bin/bash
+#
+# Kernel-version-dependent shell functions for the rest of the scripts.
+#
+# 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, you can access it online at
+# http://www.gnu.org/licenses/gpl-2.0.html.
+#
+# Copyright (C) IBM Corporation, 2013
+#
+# Authors: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
+
+# per_version_boot_params bootparam-string config-file seconds
+#
+# Adds per-version torture-module parameters to kernels supporting them.
+# Which old kernels do not.
+per_version_boot_params () {
+ echo rcutorture.stat_interval=15 \
+ rcutorture.shutdown_secs=$3 \
+ rcutorture.rcutorture_runnable=1 \
+ rcutorture.test_no_idle_hz=1 \
+ rcutorture.verbose=1
+}
diff --git a/rcutorture/configs/rcu/v3.12/CFLIST b/rcutorture/configs/rcu/v3.12/CFLIST
new file mode 100644
index 0000000..da4cbc6
--- /dev/null
+++ b/rcutorture/configs/rcu/v3.12/CFLIST
@@ -0,0 +1,17 @@
+sysidleY.2013.06.19a
+sysidleN.2013.06.19a
+P1-S-T-NH-SD-SMP-HP
+P2-2-t-nh-sd-SMP-hp
+P3-3-T-nh-SD-SMP-hp
+P4-A-t-NH-sd-SMP-HP
+P5-U-T-NH-sd-SMP-hp
+P6---t-nh-SD-smp-hp
+N1-S-T-NH-SD-SMP-HP
+N2-2-t-nh-sd-SMP-hp
+N3-3-T-nh-SD-SMP-hp
+N4-A-t-NH-sd-SMP-HP
+N5-U-T-NH-sd-SMP-hp
+PT1-nh
+PT2-NH
+NT1-nh
+NT3-NH
diff --git a/rcutorture/configs/rcu/v3.12/N1-S-T-NH-SD-SMP-HP b/rcutorture/configs/rcu/v3.12/N1-S-T-NH-SD-SMP-HP
new file mode 100644
index 0000000..d81e11d
--- /dev/null
+++ b/rcutorture/configs/rcu/v3.12/N1-S-T-NH-SD-SMP-HP
@@ -0,0 +1,19 @@
+CONFIG_RCU_TRACE=y
+CONFIG_RCU_FAST_NO_HZ=y
+CONFIG_NO_HZ=y
+CONFIG_SMP=y
+CONFIG_RCU_FANOUT=8
+CONFIG_NR_CPUS=8
+CONFIG_RCU_FANOUT_EXACT=n
+CONFIG_HOTPLUG_CPU=y
+CONFIG_PREEMPT_NONE=y
+CONFIG_PREEMPT_VOLUNTARY=n
+CONFIG_PREEMPT=n
+#CHECK#CONFIG_TREE_RCU=y
+CONFIG_RCU_TORTURE_TEST=m
+CONFIG_MODULE_UNLOAD=y
+CONFIG_SYSFS_DEPRECATED_V2=y
+CONFIG_IKCONFIG=y
+CONFIG_IKCONFIG_PROC=y
+CONFIG_PRINTK_TIME=y
+
diff --git a/rcutorture/configs/rcu/v3.12/N2-2-t-nh-sd-SMP-hp b/rcutorture/configs/rcu/v3.12/N2-2-t-nh-sd-SMP-hp
new file mode 100644
index 0000000..02e4185
--- /dev/null
+++ b/rcutorture/configs/rcu/v3.12/N2-2-t-nh-sd-SMP-hp
@@ -0,0 +1,20 @@
+CONFIG_RCU_TRACE=n
+CONFIG_NO_HZ=n
+CONFIG_SMP=y
+CONFIG_RCU_FANOUT=4
+CONFIG_NR_CPUS=8
+CONFIG_RCU_FANOUT_EXACT=n
+CONFIG_HOTPLUG_CPU=n
+CONFIG_SUSPEND=n
+CONFIG_HIBERNATION=n
+CONFIG_PREEMPT_NONE=y
+CONFIG_PREEMPT_VOLUNTARY=n
+CONFIG_PREEMPT=n
+#CHECK#CONFIG_TREE_RCU=y
+CONFIG_RCU_TORTURE_TEST=m
+CONFIG_MODULE_UNLOAD=y
+CONFIG_SYSFS_DEPRECATED_V2=y
+CONFIG_IKCONFIG=y
+CONFIG_IKCONFIG_PROC=y
+CONFIG_PRINTK_TIME=y
+
diff --git a/rcutorture/configs/rcu/v3.12/N3-3-T-nh-SD-SMP-hp b/rcutorture/configs/rcu/v3.12/N3-3-T-nh-SD-SMP-hp
new file mode 100644
index 0000000..b3100f6
--- /dev/null
+++ b/rcutorture/configs/rcu/v3.12/N3-3-T-nh-SD-SMP-hp
@@ -0,0 +1,22 @@
+CONFIG_RCU_TRACE=y
+CONFIG_NO_HZ=n
+CONFIG_SMP=y
+CONFIG_RCU_FANOUT=2
+CONFIG_NR_CPUS=8
+CONFIG_RCU_FANOUT_EXACT=n
+CONFIG_HOTPLUG_CPU=n
+CONFIG_SUSPEND=n
+CONFIG_HIBERNATION=n
+CONFIG_PREEMPT_NONE=y
+CONFIG_PREEMPT_VOLUNTARY=n
+CONFIG_PREEMPT=n
+#CHECK#CONFIG_TREE_RCU=y
+CONFIG_RCU_TORTURE_TEST=m
+CONFIG_MODULE_UNLOAD=y
+CONFIG_PROVE_LOCKING=y
+CONFIG_PROVE_RCU=y
+CONFIG_SYSFS_DEPRECATED_V2=y
+CONFIG_IKCONFIG=y
+CONFIG_IKCONFIG_PROC=y
+CONFIG_PRINTK_TIME=y
+
diff --git a/rcutorture/configs/rcu/v3.12/N4-A-t-NH-sd-SMP-HP b/rcutorture/configs/rcu/v3.12/N4-A-t-NH-sd-SMP-HP
new file mode 100644
index 0000000..c56b445
--- /dev/null
+++ b/rcutorture/configs/rcu/v3.12/N4-A-t-NH-sd-SMP-HP
@@ -0,0 +1,18 @@
+CONFIG_RCU_TRACE=n
+CONFIG_NO_HZ=y
+CONFIG_SMP=y
+CONFIG_RCU_FANOUT=6
+CONFIG_NR_CPUS=8
+CONFIG_RCU_FANOUT_EXACT=n
+CONFIG_HOTPLUG_CPU=y
+CONFIG_PREEMPT_NONE=y
+CONFIG_PREEMPT_VOLUNTARY=n
+CONFIG_PREEMPT=n
+#CHECK#CONFIG_TREE_RCU=y
+CONFIG_RCU_TORTURE_TEST=m
+CONFIG_MODULE_UNLOAD=y
+CONFIG_SYSFS_DEPRECATED_V2=y
+CONFIG_IKCONFIG=y
+CONFIG_IKCONFIG_PROC=y
+CONFIG_PRINTK_TIME=y
+
diff --git a/rcutorture/configs/rcu/v3.12/N5-U-T-NH-sd-SMP-hp b/rcutorture/configs/rcu/v3.12/N5-U-T-NH-sd-SMP-hp
new file mode 100644
index 0000000..90d924f
--- /dev/null
+++ b/rcutorture/configs/rcu/v3.12/N5-U-T-NH-sd-SMP-hp
@@ -0,0 +1,22 @@
+CONFIG_RCU_TRACE=y
+CONFIG_DEBUG_KERNEL=y
+CONFIG_RCU_CPU_STALL_INFO=y
+CONFIG_NO_HZ=y
+CONFIG_SMP=y
+CONFIG_RCU_FANOUT=6
+CONFIG_NR_CPUS=8
+CONFIG_RCU_FANOUT_EXACT=y
+CONFIG_HOTPLUG_CPU=n
+CONFIG_SUSPEND=n
+CONFIG_HIBERNATION=n
+CONFIG_PREEMPT_NONE=y
+CONFIG_PREEMPT_VOLUNTARY=n
+CONFIG_PREEMPT=n
+#CHECK#CONFIG_TREE_RCU=y
+CONFIG_RCU_TORTURE_TEST=m
+CONFIG_MODULE_UNLOAD=y
+CONFIG_SYSFS_DEPRECATED_V2=y
+CONFIG_IKCONFIG=y
+CONFIG_IKCONFIG_PROC=y
+CONFIG_PRINTK_TIME=y
+
diff --git a/rcutorture/configs/rcu/v3.12/N6---t-nh-SD-smp-hp b/rcutorture/configs/rcu/v3.12/N6---t-nh-SD-smp-hp
new file mode 100644
index 0000000..0ccc36d
--- /dev/null
+++ b/rcutorture/configs/rcu/v3.12/N6---t-nh-SD-smp-hp
@@ -0,0 +1,19 @@
+CONFIG_RCU_TRACE=n
+CONFIG_NO_HZ=n
+CONFIG_SMP=y
+CONFIG_NR_CPUS=1
+CONFIG_RCU_FANOUT_EXACT=n
+CONFIG_HOTPLUG_CPU=n
+CONFIG_SUSPEND=n
+CONFIG_HIBERNATION=n
+CONFIG_PREEMPT_NONE=y
+CONFIG_PREEMPT_VOLUNTARY=n
+CONFIG_PREEMPT=n
+#CHECK#CONFIG_TREE_RCU=y
+CONFIG_RCU_TORTURE_TEST=m
+CONFIG_MODULE_UNLOAD=y
+CONFIG_SYSFS_DEPRECATED_V2=y
+CONFIG_IKCONFIG=y
+CONFIG_IKCONFIG_PROC=y
+CONFIG_PRINTK_TIME=y
+
diff --git a/rcutorture/configs/rcu/v3.12/N7-4-T-NH-SD-SMP-HP b/rcutorture/configs/rcu/v3.12/N7-4-T-NH-SD-SMP-HP
new file mode 100644
index 0000000..3f640cf
--- /dev/null
+++ b/rcutorture/configs/rcu/v3.12/N7-4-T-NH-SD-SMP-HP
@@ -0,0 +1,26 @@
+CONFIG_RCU_TRACE=y
+CONFIG_DEBUG_KERNEL=y
+CONFIG_RCU_CPU_STALL_INFO=y
+CONFIG_NO_HZ=y
+CONFIG_SMP=y
+CONFIG_RCU_FANOUT=2
+CONFIG_NR_CPUS=16
+CONFIG_RCU_FANOUT_EXACT=n
+CONFIG_HOTPLUG_CPU=y
+CONFIG_RCU_NOCB_CPU=y
+CONFIG_RCU_NOCB_CPU_NONE=y
+CONFIG_RCU_NOCB_CPU_ZERO=n
+CONFIG_RCU_NOCB_CPU_ALL=n
+CONFIG_SUSPEND=n
+CONFIG_HIBERNATION=n
+CONFIG_PREEMPT_NONE=y
+CONFIG_PREEMPT_VOLUNTARY=n
+CONFIG_PREEMPT=n
+#CHECK#CONFIG_TREE_RCU=y
+CONFIG_RCU_TORTURE_TEST=m
+CONFIG_MODULE_UNLOAD=y
+CONFIG_SYSFS_DEPRECATED_V2=y
+CONFIG_IKCONFIG=y
+CONFIG_IKCONFIG_PROC=y
+CONFIG_PRINTK_TIME=y
+
diff --git a/rcutorture/configs/rcu/v3.12/N8-2-T-NH-SD-SMP-HP b/rcutorture/configs/rcu/v3.12/N8-2-T-NH-SD-SMP-HP
new file mode 100644
index 0000000..285da2d
--- /dev/null
+++ b/rcutorture/configs/rcu/v3.12/N8-2-T-NH-SD-SMP-HP
@@ -0,0 +1,22 @@
+CONFIG_RCU_TRACE=y
+CONFIG_DEBUG_KERNEL=y
+CONFIG_RCU_CPU_STALL_INFO=y
+CONFIG_NO_HZ=y
+CONFIG_SMP=y
+CONFIG_RCU_FANOUT=14
+CONFIG_NR_CPUS=16
+CONFIG_RCU_FANOUT_EXACT=y
+CONFIG_HOTPLUG_CPU=y
+CONFIG_SUSPEND=n
+CONFIG_HIBERNATION=n
+CONFIG_PREEMPT_NONE=y
+CONFIG_PREEMPT_VOLUNTARY=n
+CONFIG_PREEMPT=n
+#CHECK#CONFIG_TREE_RCU=y
+CONFIG_RCU_TORTURE_TEST=m
+CONFIG_MODULE_UNLOAD=y
+CONFIG_SYSFS_DEPRECATED_V2=y
+CONFIG_IKCONFIG=y
+CONFIG_IKCONFIG_PROC=y
+CONFIG_PRINTK_TIME=y
+
diff --git a/rcutorture/configs/rcu/v3.12/NT1-nh b/rcutorture/configs/rcu/v3.12/NT1-nh
new file mode 100644
index 0000000..023f312
--- /dev/null
+++ b/rcutorture/configs/rcu/v3.12/NT1-nh
@@ -0,0 +1,23 @@
+#CHECK#CONFIG_TINY_RCU=y
+CONFIG_RCU_TRACE=y
+CONFIG_RCU_TORTURE_TEST=m
+CONFIG_MODULE_UNLOAD=y
+CONFIG_SUSPEND=n
+CONFIG_HIBERNATION=n
+#
+CONFIG_SMP=n
+#
+CONFIG_HOTPLUG_CPU=n
+#
+CONFIG_NO_HZ=n
+#
+CONFIG_PREEMPT_NONE=y
+CONFIG_PREEMPT_VOLUNTARY=n
+CONFIG_PREEMPT=n
+CONFIG_PROVE_LOCKING=y
+CONFIG_PROVE_RCU=y
+CONFIG_SYSFS_DEPRECATED_V2=y
+CONFIG_IKCONFIG=y
+CONFIG_IKCONFIG_PROC=y
+CONFIG_PRINTK_TIME=y
+
diff --git a/rcutorture/configs/rcu/v3.12/NT3-NH b/rcutorture/configs/rcu/v3.12/NT3-NH
new file mode 100644
index 0000000..6fd0235
--- /dev/null
+++ b/rcutorture/configs/rcu/v3.12/NT3-NH
@@ -0,0 +1,20 @@
+#CHECK#CONFIG_TINY_RCU=y
+CONFIG_RCU_TORTURE_TEST=m
+CONFIG_MODULE_UNLOAD=y
+CONFIG_SUSPEND=n
+CONFIG_HIBERNATION=n
+#
+CONFIG_SMP=n
+#
+CONFIG_HOTPLUG_CPU=n
+#
+CONFIG_NO_HZ=y
+#
+CONFIG_PREEMPT_NONE=y
+CONFIG_PREEMPT_VOLUNTARY=n
+CONFIG_PREEMPT=n
+CONFIG_SYSFS_DEPRECATED_V2=y
+CONFIG_IKCONFIG=y
+CONFIG_IKCONFIG_PROC=y
+CONFIG_PRINTK_TIME=y
+
diff --git a/rcutorture/configs/rcu/v3.12/P1-S-T-NH-SD-SMP-HP b/rcutorture/configs/rcu/v3.12/P1-S-T-NH-SD-SMP-HP
new file mode 100644
index 0000000..9647c44
--- /dev/null
+++ b/rcutorture/configs/rcu/v3.12/P1-S-T-NH-SD-SMP-HP
@@ -0,0 +1,20 @@
+CONFIG_RCU_TRACE=y
+CONFIG_RCU_CPU_STALL_INFO=y
+CONFIG_NO_HZ=y
+CONFIG_RCU_FAST_NO_HZ=y
+CONFIG_SMP=y
+CONFIG_RCU_FANOUT=8
+CONFIG_NR_CPUS=8
+CONFIG_RCU_FANOUT_EXACT=n
+CONFIG_HOTPLUG_CPU=y
+CONFIG_PREEMPT_NONE=n
+CONFIG_PREEMPT_VOLUNTARY=n
+CONFIG_PREEMPT=y
+#CHECK#CONFIG_TREE_PREEMPT_RCU=y
+CONFIG_RCU_TORTURE_TEST=m
+CONFIG_MODULE_UNLOAD=y
+CONFIG_SYSFS_DEPRECATED_V2=y
+CONFIG_IKCONFIG=y
+CONFIG_IKCONFIG_PROC=y
+CONFIG_PRINTK_TIME=y
+
diff --git a/rcutorture/configs/rcu/v3.12/P2-2-t-nh-sd-SMP-hp b/rcutorture/configs/rcu/v3.12/P2-2-t-nh-sd-SMP-hp
new file mode 100644
index 0000000..0f3b667
--- /dev/null
+++ b/rcutorture/configs/rcu/v3.12/P2-2-t-nh-sd-SMP-hp
@@ -0,0 +1,20 @@
+CONFIG_RCU_TRACE=n
+CONFIG_NO_HZ=n
+CONFIG_SMP=y
+CONFIG_RCU_FANOUT=4
+CONFIG_NR_CPUS=8
+CONFIG_RCU_FANOUT_EXACT=n
+CONFIG_HOTPLUG_CPU=n
+CONFIG_SUSPEND=n
+CONFIG_HIBERNATION=n
+CONFIG_PREEMPT_NONE=n
+CONFIG_PREEMPT_VOLUNTARY=n
+CONFIG_PREEMPT=y
+#CHECK#CONFIG_TREE_PREEMPT_RCU=y
+CONFIG_RCU_TORTURE_TEST=m
+CONFIG_MODULE_UNLOAD=y
+CONFIG_SYSFS_DEPRECATED_V2=y
+CONFIG_IKCONFIG=y
+CONFIG_IKCONFIG_PROC=y
+CONFIG_PRINTK_TIME=y
+
diff --git a/rcutorture/configs/rcu/v3.12/P3-3-T-nh-SD-SMP-hp b/rcutorture/configs/rcu/v3.12/P3-3-T-nh-SD-SMP-hp
new file mode 100644
index 0000000..b035e14
--- /dev/null
+++ b/rcutorture/configs/rcu/v3.12/P3-3-T-nh-SD-SMP-hp
@@ -0,0 +1,20 @@
+CONFIG_RCU_TRACE=y
+CONFIG_NO_HZ=n
+CONFIG_SMP=y
+CONFIG_RCU_FANOUT=2
+CONFIG_NR_CPUS=8
+CONFIG_RCU_FANOUT_EXACT=n
+CONFIG_HOTPLUG_CPU=n
+CONFIG_SUSPEND=n
+CONFIG_HIBERNATION=n
+CONFIG_PREEMPT_NONE=n
+CONFIG_PREEMPT_VOLUNTARY=n
+CONFIG_PREEMPT=y
+#CHECK#CONFIG_TREE_PREEMPT_RCU=y
+CONFIG_RCU_TORTURE_TEST=m
+CONFIG_MODULE_UNLOAD=y
+CONFIG_SYSFS_DEPRECATED_V2=y
+CONFIG_IKCONFIG=y
+CONFIG_IKCONFIG_PROC=y
+CONFIG_PRINTK_TIME=y
+
diff --git a/rcutorture/configs/rcu/v3.12/P4-A-t-NH-sd-SMP-HP b/rcutorture/configs/rcu/v3.12/P4-A-t-NH-sd-SMP-HP
new file mode 100644
index 0000000..3ccf6a9
--- /dev/null
+++ b/rcutorture/configs/rcu/v3.12/P4-A-t-NH-sd-SMP-HP
@@ -0,0 +1,22 @@
+CONFIG_RCU_TRACE=n
+CONFIG_NO_HZ=y
+CONFIG_SMP=y
+CONFIG_RCU_FANOUT=6
+CONFIG_NR_CPUS=8
+CONFIG_RCU_FANOUT_EXACT=n
+CONFIG_HOTPLUG_CPU=y
+CONFIG_PREEMPT_NONE=n
+CONFIG_PREEMPT_VOLUNTARY=n
+CONFIG_PREEMPT=y
+#CHECK#CONFIG_TREE_PREEMPT_RCU=y
+CONFIG_RCU_TORTURE_TEST=m
+CONFIG_MODULE_UNLOAD=y
+CONFIG_RT_MUTEXES=y
+CONFIG_RCU_BOOST=y
+CONFIG_RCU_BOOST_PRIO=2
+CONFIG_PROVE_LOCKING=y
+CONFIG_PROVE_RCU=y
+CONFIG_IKCONFIG=y
+CONFIG_IKCONFIG_PROC=y
+CONFIG_PRINTK_TIME=y
+
diff --git a/rcutorture/configs/rcu/v3.12/P5-U-T-NH-sd-SMP-hp b/rcutorture/configs/rcu/v3.12/P5-U-T-NH-sd-SMP-hp
new file mode 100644
index 0000000..a55c008
--- /dev/null
+++ b/rcutorture/configs/rcu/v3.12/P5-U-T-NH-sd-SMP-hp
@@ -0,0 +1,27 @@
+CONFIG_RCU_TRACE=y
+CONFIG_RCU_CPU_STALL_INFO=y
+CONFIG_NO_HZ=y
+CONFIG_SMP=y
+CONFIG_RCU_FANOUT=6
+CONFIG_NR_CPUS=8
+CONFIG_RCU_FANOUT_EXACT=y
+CONFIG_HOTPLUG_CPU=n
+CONFIG_SUSPEND=n
+CONFIG_HIBERNATION=n
+CONFIG_PREEMPT_NONE=n
+CONFIG_PREEMPT_VOLUNTARY=n
+CONFIG_PREEMPT=y
+#CHECK#CONFIG_TREE_PREEMPT_RCU=y
+CONFIG_DEBUG_KERNEL=y
+CONFIG_DEBUG_OBJECTS=y
+CONFIG_DEBUG_OBJECTS_RCU_HEAD=y
+CONFIG_RT_MUTEXES=y
+CONFIG_RCU_BOOST=y
+CONFIG_RCU_BOOST_PRIO=2
+CONFIG_RCU_TORTURE_TEST=m
+CONFIG_MODULE_UNLOAD=y
+CONFIG_SYSFS_DEPRECATED_V2=y
+CONFIG_IKCONFIG=y
+CONFIG_IKCONFIG_PROC=y
+CONFIG_PRINTK_TIME=y
+
diff --git a/rcutorture/configs/rcu/v3.12/P6---t-nh-SD-smp-hp b/rcutorture/configs/rcu/v3.12/P6---t-nh-SD-smp-hp
new file mode 100644
index 0000000..f4c9175
--- /dev/null
+++ b/rcutorture/configs/rcu/v3.12/P6---t-nh-SD-smp-hp
@@ -0,0 +1,18 @@
+CONFIG_RCU_TRACE=n
+CONFIG_NO_HZ=n
+CONFIG_SMP=n
+CONFIG_RCU_FANOUT_EXACT=n
+CONFIG_HOTPLUG_CPU=n
+CONFIG_SUSPEND=n
+CONFIG_HIBERNATION=n
+CONFIG_PREEMPT_NONE=n
+CONFIG_PREEMPT_VOLUNTARY=n
+CONFIG_PREEMPT=y
+CONFIG_TREE_PREEMPT_RCU=y
+CONFIG_RCU_TORTURE_TEST=m
+CONFIG_MODULE_UNLOAD=y
+CONFIG_SYSFS_DEPRECATED_V2=y
+CONFIG_IKCONFIG=y
+CONFIG_IKCONFIG_PROC=y
+CONFIG_PRINTK_TIME=y
+
diff --git a/rcutorture/configs/rcu/v3.12/P7-4-T-NH-SD-SMP-HP b/rcutorture/configs/rcu/v3.12/P7-4-T-NH-SD-SMP-HP
new file mode 100644
index 0000000..77a8c5b
--- /dev/null
+++ b/rcutorture/configs/rcu/v3.12/P7-4-T-NH-SD-SMP-HP
@@ -0,0 +1,30 @@
+CONFIG_RCU_TRACE=y
+CONFIG_NO_HZ=y
+CONFIG_SMP=y
+CONFIG_RCU_FANOUT=2
+CONFIG_NR_CPUS=16
+CONFIG_RCU_FANOUT_EXACT=n
+CONFIG_HOTPLUG_CPU=y
+CONFIG_RCU_NOCB_CPU=y
+CONFIG_RCU_NOCB_CPU_NONE=n
+CONFIG_RCU_NOCB_CPU_ZERO=n
+CONFIG_RCU_NOCB_CPU_ALL=y
+CONFIG_SUSPEND=n
+CONFIG_HIBERNATION=n
+CONFIG_PREEMPT_NONE=n
+CONFIG_PREEMPT_VOLUNTARY=n
+CONFIG_PREEMPT=y
+#CHECK#CONFIG_TREE_PREEMPT_RCU=y
+CONFIG_RCU_TORTURE_TEST=m
+CONFIG_MODULE_UNLOAD=y
+CONFIG_PROVE_LOCKING=y
+CONFIG_PROVE_RCU=y
+CONFIG_DEBUG_KERNEL=y
+CONFIG_DEBUG_OBJECTS=y
+CONFIG_DEBUG_OBJECTS_RCU_HEAD=y
+CONFIG_SYSFS_DEPRECATED_V2=y
+CONFIG_SLUB=y
+CONFIG_IKCONFIG=y
+CONFIG_IKCONFIG_PROC=y
+CONFIG_PRINTK_TIME=y
+
diff --git a/rcutorture/configs/rcu/v3.12/P7-4-T-NH-SD-SMP-HP-all b/rcutorture/configs/rcu/v3.12/P7-4-T-NH-SD-SMP-HP-all
new file mode 100644
index 0000000..0eecebc
--- /dev/null
+++ b/rcutorture/configs/rcu/v3.12/P7-4-T-NH-SD-SMP-HP-all
@@ -0,0 +1,30 @@
+CONFIG_RCU_TRACE=y
+CONFIG_NO_HZ=y
+CONFIG_SMP=y
+CONFIG_RCU_FANOUT=2
+CONFIG_NR_CPUS=16
+CONFIG_RCU_FANOUT_EXACT=n
+CONFIG_HOTPLUG_CPU=y
+CONFIG_RCU_NOCB_CPU=y
+CONFIG_RCU_NOCB_CPU_NONE=y
+CONFIG_RCU_NOCB_CPU_ZERO=n
+CONFIG_RCU_NOCB_CPU_ALL=n
+CONFIG_SUSPEND=n
+CONFIG_HIBERNATION=n
+CONFIG_PREEMPT_NONE=n
+CONFIG_PREEMPT_VOLUNTARY=n
+CONFIG_PREEMPT=y
+#CHECK#CONFIG_TREE_PREEMPT_RCU=y
+CONFIG_RCU_TORTURE_TEST=m
+CONFIG_MODULE_UNLOAD=y
+CONFIG_PROVE_LOCKING=y
+CONFIG_PROVE_RCU=y
+CONFIG_DEBUG_KERNEL=y
+CONFIG_DEBUG_OBJECTS=y
+CONFIG_DEBUG_OBJECTS_RCU_HEAD=y
+CONFIG_SYSFS_DEPRECATED_V2=y
+CONFIG_SLUB=y
+CONFIG_IKCONFIG=y
+CONFIG_IKCONFIG_PROC=y
+CONFIG_PRINTK_TIME=y
+
diff --git a/rcutorture/configs/rcu/v3.12/P7-4-T-NH-SD-SMP-HP-none b/rcutorture/configs/rcu/v3.12/P7-4-T-NH-SD-SMP-HP-none
new file mode 100644
index 0000000..0eecebc
--- /dev/null
+++ b/rcutorture/configs/rcu/v3.12/P7-4-T-NH-SD-SMP-HP-none
@@ -0,0 +1,30 @@
+CONFIG_RCU_TRACE=y
+CONFIG_NO_HZ=y
+CONFIG_SMP=y
+CONFIG_RCU_FANOUT=2
+CONFIG_NR_CPUS=16
+CONFIG_RCU_FANOUT_EXACT=n
+CONFIG_HOTPLUG_CPU=y
+CONFIG_RCU_NOCB_CPU=y
+CONFIG_RCU_NOCB_CPU_NONE=y
+CONFIG_RCU_NOCB_CPU_ZERO=n
+CONFIG_RCU_NOCB_CPU_ALL=n
+CONFIG_SUSPEND=n
+CONFIG_HIBERNATION=n
+CONFIG_PREEMPT_NONE=n
+CONFIG_PREEMPT_VOLUNTARY=n
+CONFIG_PREEMPT=y
+#CHECK#CONFIG_TREE_PREEMPT_RCU=y
+CONFIG_RCU_TORTURE_TEST=m
+CONFIG_MODULE_UNLOAD=y
+CONFIG_PROVE_LOCKING=y
+CONFIG_PROVE_RCU=y
+CONFIG_DEBUG_KERNEL=y
+CONFIG_DEBUG_OBJECTS=y
+CONFIG_DEBUG_OBJECTS_RCU_HEAD=y
+CONFIG_SYSFS_DEPRECATED_V2=y
+CONFIG_SLUB=y
+CONFIG_IKCONFIG=y
+CONFIG_IKCONFIG_PROC=y
+CONFIG_PRINTK_TIME=y
+
diff --git a/rcutorture/configs/rcu/v3.12/P7-4-T-NH-SD-SMP-hp b/rcutorture/configs/rcu/v3.12/P7-4-T-NH-SD-SMP-hp
new file mode 100644
index 0000000..588bc70
--- /dev/null
+++ b/rcutorture/configs/rcu/v3.12/P7-4-T-NH-SD-SMP-hp
@@ -0,0 +1,30 @@
+CONFIG_RCU_TRACE=y
+CONFIG_NO_HZ=y
+CONFIG_SMP=y
+CONFIG_RCU_FANOUT=2
+CONFIG_NR_CPUS=16
+CONFIG_RCU_FANOUT_EXACT=n
+CONFIG_HOTPLUG_CPU=n
+CONFIG_RCU_NOCB_CPU=y
+CONFIG_RCU_NOCB_CPU_NONE=n
+CONFIG_RCU_NOCB_CPU_ZERO=y
+CONFIG_RCU_NOCB_CPU_ALL=n
+CONFIG_SUSPEND=n
+CONFIG_HIBERNATION=n
+CONFIG_PREEMPT_NONE=n
+CONFIG_PREEMPT_VOLUNTARY=n
+CONFIG_PREEMPT=y
+#CHECK#CONFIG_TREE_PREEMPT_RCU=y
+CONFIG_RCU_TORTURE_TEST=m
+CONFIG_MODULE_UNLOAD=y
+CONFIG_PROVE_LOCKING=y
+CONFIG_PROVE_RCU=y
+CONFIG_DEBUG_KERNEL=y
+CONFIG_DEBUG_OBJECTS=y
+CONFIG_DEBUG_OBJECTS_RCU_HEAD=y
+CONFIG_SYSFS_DEPRECATED_V2=y
+CONFIG_SLUB=y
+CONFIG_IKCONFIG=y
+CONFIG_IKCONFIG_PROC=y
+CONFIG_PRINTK_TIME=y
+
diff --git a/rcutorture/configs/rcu/v3.12/PT1-nh b/rcutorture/configs/rcu/v3.12/PT1-nh
new file mode 100644
index 0000000..e3361c3
--- /dev/null
+++ b/rcutorture/configs/rcu/v3.12/PT1-nh
@@ -0,0 +1,23 @@
+CONFIG_TINY_PREEMPT_RCU=y
+CONFIG_RCU_BOOST=y
+CONFIG_RCU_BOOST_PRIO=2
+CONFIG_RCU_TRACE=y
+CONFIG_RCU_TORTURE_TEST=m
+CONFIG_MODULE_UNLOAD=y
+CONFIG_SUSPEND=n
+CONFIG_HIBERNATION=n
+#
+CONFIG_SMP=n
+#
+CONFIG_HOTPLUG_CPU=n
+#
+CONFIG_NO_HZ=n
+#
+CONFIG_PREEMPT_NONE=n
+CONFIG_PREEMPT_VOLUNTARY=n
+CONFIG_PREEMPT=y
+CONFIG_SYSFS_DEPRECATED_V2=y
+CONFIG_IKCONFIG=y
+CONFIG_IKCONFIG_PROC=y
+CONFIG_PRINTK_TIME=y
+
diff --git a/rcutorture/configs/rcu/v3.12/PT2-NH b/rcutorture/configs/rcu/v3.12/PT2-NH
new file mode 100644
index 0000000..64abfc3
--- /dev/null
+++ b/rcutorture/configs/rcu/v3.12/PT2-NH
@@ -0,0 +1,22 @@
+CONFIG_TINY_PREEMPT_RCU=y
+CONFIG_RCU_TORTURE_TEST=m
+CONFIG_MODULE_UNLOAD=y
+CONFIG_SUSPEND=n
+CONFIG_HIBERNATION=n
+#
+CONFIG_SMP=n
+#
+CONFIG_HOTPLUG_CPU=n
+#
+CONFIG_NO_HZ=y
+#
+CONFIG_PREEMPT_NONE=n
+CONFIG_PREEMPT_VOLUNTARY=n
+CONFIG_PREEMPT=y
+CONFIG_PROVE_LOCKING=y
+CONFIG_PROVE_RCU=y
+CONFIG_SYSFS_DEPRECATED_V2=y
+CONFIG_IKCONFIG=y
+CONFIG_IKCONFIG_PROC=y
+CONFIG_PRINTK_TIME=y
+
diff --git a/rcutorture/configs/rcu/v3.3/CFLIST b/rcutorture/configs/rcu/v3.3/CFLIST
new file mode 100644
index 0000000..1822394
--- /dev/null
+++ b/rcutorture/configs/rcu/v3.3/CFLIST
@@ -0,0 +1,14 @@
+P1-S-T-NH-SD-SMP-HP
+P2-2-t-nh-sd-SMP-hp
+P3-3-T-nh-SD-SMP-hp
+P4-A-t-NH-sd-SMP-HP
+P5-U-T-NH-sd-SMP-hp
+N1-S-T-NH-SD-SMP-HP
+N2-2-t-nh-sd-SMP-hp
+N3-3-T-nh-SD-SMP-hp
+N4-A-t-NH-sd-SMP-HP
+N5-U-T-NH-sd-SMP-hp
+PT1-nh
+PT2-NH
+NT1-nh
+NT3-NH
diff --git a/rcutorture/configs/rcu/v3.3/N1-S-T-NH-SD-SMP-HP b/rcutorture/configs/rcu/v3.3/N1-S-T-NH-SD-SMP-HP
new file mode 100644
index 0000000..d81e11d
--- /dev/null
+++ b/rcutorture/configs/rcu/v3.3/N1-S-T-NH-SD-SMP-HP
@@ -0,0 +1,19 @@
+CONFIG_RCU_TRACE=y
+CONFIG_RCU_FAST_NO_HZ=y
+CONFIG_NO_HZ=y
+CONFIG_SMP=y
+CONFIG_RCU_FANOUT=8
+CONFIG_NR_CPUS=8
+CONFIG_RCU_FANOUT_EXACT=n
+CONFIG_HOTPLUG_CPU=y
+CONFIG_PREEMPT_NONE=y
+CONFIG_PREEMPT_VOLUNTARY=n
+CONFIG_PREEMPT=n
+#CHECK#CONFIG_TREE_RCU=y
+CONFIG_RCU_TORTURE_TEST=m
+CONFIG_MODULE_UNLOAD=y
+CONFIG_SYSFS_DEPRECATED_V2=y
+CONFIG_IKCONFIG=y
+CONFIG_IKCONFIG_PROC=y
+CONFIG_PRINTK_TIME=y
+
diff --git a/rcutorture/configs/rcu/v3.3/N2-2-t-nh-sd-SMP-hp b/rcutorture/configs/rcu/v3.3/N2-2-t-nh-sd-SMP-hp
new file mode 100644
index 0000000..02e4185
--- /dev/null
+++ b/rcutorture/configs/rcu/v3.3/N2-2-t-nh-sd-SMP-hp
@@ -0,0 +1,20 @@
+CONFIG_RCU_TRACE=n
+CONFIG_NO_HZ=n
+CONFIG_SMP=y
+CONFIG_RCU_FANOUT=4
+CONFIG_NR_CPUS=8
+CONFIG_RCU_FANOUT_EXACT=n
+CONFIG_HOTPLUG_CPU=n
+CONFIG_SUSPEND=n
+CONFIG_HIBERNATION=n
+CONFIG_PREEMPT_NONE=y
+CONFIG_PREEMPT_VOLUNTARY=n
+CONFIG_PREEMPT=n
+#CHECK#CONFIG_TREE_RCU=y
+CONFIG_RCU_TORTURE_TEST=m
+CONFIG_MODULE_UNLOAD=y
+CONFIG_SYSFS_DEPRECATED_V2=y
+CONFIG_IKCONFIG=y
+CONFIG_IKCONFIG_PROC=y
+CONFIG_PRINTK_TIME=y
+
diff --git a/rcutorture/configs/rcu/v3.3/N3-3-T-nh-SD-SMP-hp b/rcutorture/configs/rcu/v3.3/N3-3-T-nh-SD-SMP-hp
new file mode 100644
index 0000000..b3100f6
--- /dev/null
+++ b/rcutorture/configs/rcu/v3.3/N3-3-T-nh-SD-SMP-hp
@@ -0,0 +1,22 @@
+CONFIG_RCU_TRACE=y
+CONFIG_NO_HZ=n
+CONFIG_SMP=y
+CONFIG_RCU_FANOUT=2
+CONFIG_NR_CPUS=8
+CONFIG_RCU_FANOUT_EXACT=n
+CONFIG_HOTPLUG_CPU=n
+CONFIG_SUSPEND=n
+CONFIG_HIBERNATION=n
+CONFIG_PREEMPT_NONE=y
+CONFIG_PREEMPT_VOLUNTARY=n
+CONFIG_PREEMPT=n
+#CHECK#CONFIG_TREE_RCU=y
+CONFIG_RCU_TORTURE_TEST=m
+CONFIG_MODULE_UNLOAD=y
+CONFIG_PROVE_LOCKING=y
+CONFIG_PROVE_RCU=y
+CONFIG_SYSFS_DEPRECATED_V2=y
+CONFIG_IKCONFIG=y
+CONFIG_IKCONFIG_PROC=y
+CONFIG_PRINTK_TIME=y
+
diff --git a/rcutorture/configs/rcu/v3.3/N4-A-t-NH-sd-SMP-HP b/rcutorture/configs/rcu/v3.3/N4-A-t-NH-sd-SMP-HP
new file mode 100644
index 0000000..c56b445
--- /dev/null
+++ b/rcutorture/configs/rcu/v3.3/N4-A-t-NH-sd-SMP-HP
@@ -0,0 +1,18 @@
+CONFIG_RCU_TRACE=n
+CONFIG_NO_HZ=y
+CONFIG_SMP=y
+CONFIG_RCU_FANOUT=6
+CONFIG_NR_CPUS=8
+CONFIG_RCU_FANOUT_EXACT=n
+CONFIG_HOTPLUG_CPU=y
+CONFIG_PREEMPT_NONE=y
+CONFIG_PREEMPT_VOLUNTARY=n
+CONFIG_PREEMPT=n
+#CHECK#CONFIG_TREE_RCU=y
+CONFIG_RCU_TORTURE_TEST=m
+CONFIG_MODULE_UNLOAD=y
+CONFIG_SYSFS_DEPRECATED_V2=y
+CONFIG_IKCONFIG=y
+CONFIG_IKCONFIG_PROC=y
+CONFIG_PRINTK_TIME=y
+
diff --git a/rcutorture/configs/rcu/v3.3/N5-U-T-NH-sd-SMP-hp b/rcutorture/configs/rcu/v3.3/N5-U-T-NH-sd-SMP-hp
new file mode 100644
index 0000000..90d924f
--- /dev/null
+++ b/rcutorture/configs/rcu/v3.3/N5-U-T-NH-sd-SMP-hp
@@ -0,0 +1,22 @@
+CONFIG_RCU_TRACE=y
+CONFIG_DEBUG_KERNEL=y
+CONFIG_RCU_CPU_STALL_INFO=y
+CONFIG_NO_HZ=y
+CONFIG_SMP=y
+CONFIG_RCU_FANOUT=6
+CONFIG_NR_CPUS=8
+CONFIG_RCU_FANOUT_EXACT=y
+CONFIG_HOTPLUG_CPU=n
+CONFIG_SUSPEND=n
+CONFIG_HIBERNATION=n
+CONFIG_PREEMPT_NONE=y
+CONFIG_PREEMPT_VOLUNTARY=n
+CONFIG_PREEMPT=n
+#CHECK#CONFIG_TREE_RCU=y
+CONFIG_RCU_TORTURE_TEST=m
+CONFIG_MODULE_UNLOAD=y
+CONFIG_SYSFS_DEPRECATED_V2=y
+CONFIG_IKCONFIG=y
+CONFIG_IKCONFIG_PROC=y
+CONFIG_PRINTK_TIME=y
+
diff --git a/rcutorture/configs/rcu/v3.3/NT1-nh b/rcutorture/configs/rcu/v3.3/NT1-nh
new file mode 100644
index 0000000..023f312
--- /dev/null
+++ b/rcutorture/configs/rcu/v3.3/NT1-nh
@@ -0,0 +1,23 @@
+#CHECK#CONFIG_TINY_RCU=y
+CONFIG_RCU_TRACE=y
+CONFIG_RCU_TORTURE_TEST=m
+CONFIG_MODULE_UNLOAD=y
+CONFIG_SUSPEND=n
+CONFIG_HIBERNATION=n
+#
+CONFIG_SMP=n
+#
+CONFIG_HOTPLUG_CPU=n
+#
+CONFIG_NO_HZ=n
+#
+CONFIG_PREEMPT_NONE=y
+CONFIG_PREEMPT_VOLUNTARY=n
+CONFIG_PREEMPT=n
+CONFIG_PROVE_LOCKING=y
+CONFIG_PROVE_RCU=y
+CONFIG_SYSFS_DEPRECATED_V2=y
+CONFIG_IKCONFIG=y
+CONFIG_IKCONFIG_PROC=y
+CONFIG_PRINTK_TIME=y
+
diff --git a/rcutorture/configs/rcu/v3.3/NT3-NH b/rcutorture/configs/rcu/v3.3/NT3-NH
new file mode 100644
index 0000000..6fd0235
--- /dev/null
+++ b/rcutorture/configs/rcu/v3.3/NT3-NH
@@ -0,0 +1,20 @@
+#CHECK#CONFIG_TINY_RCU=y
+CONFIG_RCU_TORTURE_TEST=m
+CONFIG_MODULE_UNLOAD=y
+CONFIG_SUSPEND=n
+CONFIG_HIBERNATION=n
+#
+CONFIG_SMP=n
+#
+CONFIG_HOTPLUG_CPU=n
+#
+CONFIG_NO_HZ=y
+#
+CONFIG_PREEMPT_NONE=y
+CONFIG_PREEMPT_VOLUNTARY=n
+CONFIG_PREEMPT=n
+CONFIG_SYSFS_DEPRECATED_V2=y
+CONFIG_IKCONFIG=y
+CONFIG_IKCONFIG_PROC=y
+CONFIG_PRINTK_TIME=y
+
diff --git a/rcutorture/configs/rcu/v3.3/P1-S-T-NH-SD-SMP-HP b/rcutorture/configs/rcu/v3.3/P1-S-T-NH-SD-SMP-HP
new file mode 100644
index 0000000..9647c44
--- /dev/null
+++ b/rcutorture/configs/rcu/v3.3/P1-S-T-NH-SD-SMP-HP
@@ -0,0 +1,20 @@
+CONFIG_RCU_TRACE=y
+CONFIG_RCU_CPU_STALL_INFO=y
+CONFIG_NO_HZ=y
+CONFIG_RCU_FAST_NO_HZ=y
+CONFIG_SMP=y
+CONFIG_RCU_FANOUT=8
+CONFIG_NR_CPUS=8
+CONFIG_RCU_FANOUT_EXACT=n
+CONFIG_HOTPLUG_CPU=y
+CONFIG_PREEMPT_NONE=n
+CONFIG_PREEMPT_VOLUNTARY=n
+CONFIG_PREEMPT=y
+#CHECK#CONFIG_TREE_PREEMPT_RCU=y
+CONFIG_RCU_TORTURE_TEST=m
+CONFIG_MODULE_UNLOAD=y
+CONFIG_SYSFS_DEPRECATED_V2=y
+CONFIG_IKCONFIG=y
+CONFIG_IKCONFIG_PROC=y
+CONFIG_PRINTK_TIME=y
+
diff --git a/rcutorture/configs/rcu/v3.3/P2-2-t-nh-sd-SMP-hp b/rcutorture/configs/rcu/v3.3/P2-2-t-nh-sd-SMP-hp
new file mode 100644
index 0000000..0f3b667
--- /dev/null
+++ b/rcutorture/configs/rcu/v3.3/P2-2-t-nh-sd-SMP-hp
@@ -0,0 +1,20 @@
+CONFIG_RCU_TRACE=n
+CONFIG_NO_HZ=n
+CONFIG_SMP=y
+CONFIG_RCU_FANOUT=4
+CONFIG_NR_CPUS=8
+CONFIG_RCU_FANOUT_EXACT=n
+CONFIG_HOTPLUG_CPU=n
+CONFIG_SUSPEND=n
+CONFIG_HIBERNATION=n
+CONFIG_PREEMPT_NONE=n
+CONFIG_PREEMPT_VOLUNTARY=n
+CONFIG_PREEMPT=y
+#CHECK#CONFIG_TREE_PREEMPT_RCU=y
+CONFIG_RCU_TORTURE_TEST=m
+CONFIG_MODULE_UNLOAD=y
+CONFIG_SYSFS_DEPRECATED_V2=y
+CONFIG_IKCONFIG=y
+CONFIG_IKCONFIG_PROC=y
+CONFIG_PRINTK_TIME=y
+
diff --git a/rcutorture/configs/rcu/v3.3/P3-3-T-nh-SD-SMP-hp b/rcutorture/configs/rcu/v3.3/P3-3-T-nh-SD-SMP-hp
new file mode 100644
index 0000000..b035e14
--- /dev/null
+++ b/rcutorture/configs/rcu/v3.3/P3-3-T-nh-SD-SMP-hp
@@ -0,0 +1,20 @@
+CONFIG_RCU_TRACE=y
+CONFIG_NO_HZ=n
+CONFIG_SMP=y
+CONFIG_RCU_FANOUT=2
+CONFIG_NR_CPUS=8
+CONFIG_RCU_FANOUT_EXACT=n
+CONFIG_HOTPLUG_CPU=n
+CONFIG_SUSPEND=n
+CONFIG_HIBERNATION=n
+CONFIG_PREEMPT_NONE=n
+CONFIG_PREEMPT_VOLUNTARY=n
+CONFIG_PREEMPT=y
+#CHECK#CONFIG_TREE_PREEMPT_RCU=y
+CONFIG_RCU_TORTURE_TEST=m
+CONFIG_MODULE_UNLOAD=y
+CONFIG_SYSFS_DEPRECATED_V2=y
+CONFIG_IKCONFIG=y
+CONFIG_IKCONFIG_PROC=y
+CONFIG_PRINTK_TIME=y
+
diff --git a/rcutorture/configs/rcu/v3.3/P4-A-t-NH-sd-SMP-HP b/rcutorture/configs/rcu/v3.3/P4-A-t-NH-sd-SMP-HP
new file mode 100644
index 0000000..3ccf6a9
--- /dev/null
+++ b/rcutorture/configs/rcu/v3.3/P4-A-t-NH-sd-SMP-HP
@@ -0,0 +1,22 @@
+CONFIG_RCU_TRACE=n
+CONFIG_NO_HZ=y
+CONFIG_SMP=y
+CONFIG_RCU_FANOUT=6
+CONFIG_NR_CPUS=8
+CONFIG_RCU_FANOUT_EXACT=n
+CONFIG_HOTPLUG_CPU=y
+CONFIG_PREEMPT_NONE=n
+CONFIG_PREEMPT_VOLUNTARY=n
+CONFIG_PREEMPT=y
+#CHECK#CONFIG_TREE_PREEMPT_RCU=y
+CONFIG_RCU_TORTURE_TEST=m
+CONFIG_MODULE_UNLOAD=y
+CONFIG_RT_MUTEXES=y
+CONFIG_RCU_BOOST=y
+CONFIG_RCU_BOOST_PRIO=2
+CONFIG_PROVE_LOCKING=y
+CONFIG_PROVE_RCU=y
+CONFIG_IKCONFIG=y
+CONFIG_IKCONFIG_PROC=y
+CONFIG_PRINTK_TIME=y
+
diff --git a/rcutorture/configs/rcu/v3.3/P5-U-T-NH-sd-SMP-hp b/rcutorture/configs/rcu/v3.3/P5-U-T-NH-sd-SMP-hp
new file mode 100644
index 0000000..a55c008
--- /dev/null
+++ b/rcutorture/configs/rcu/v3.3/P5-U-T-NH-sd-SMP-hp
@@ -0,0 +1,27 @@
+CONFIG_RCU_TRACE=y
+CONFIG_RCU_CPU_STALL_INFO=y
+CONFIG_NO_HZ=y
+CONFIG_SMP=y
+CONFIG_RCU_FANOUT=6
+CONFIG_NR_CPUS=8
+CONFIG_RCU_FANOUT_EXACT=y
+CONFIG_HOTPLUG_CPU=n
+CONFIG_SUSPEND=n
+CONFIG_HIBERNATION=n
+CONFIG_PREEMPT_NONE=n
+CONFIG_PREEMPT_VOLUNTARY=n
+CONFIG_PREEMPT=y
+#CHECK#CONFIG_TREE_PREEMPT_RCU=y
+CONFIG_DEBUG_KERNEL=y
+CONFIG_DEBUG_OBJECTS=y
+CONFIG_DEBUG_OBJECTS_RCU_HEAD=y
+CONFIG_RT_MUTEXES=y
+CONFIG_RCU_BOOST=y
+CONFIG_RCU_BOOST_PRIO=2
+CONFIG_RCU_TORTURE_TEST=m
+CONFIG_MODULE_UNLOAD=y
+CONFIG_SYSFS_DEPRECATED_V2=y
+CONFIG_IKCONFIG=y
+CONFIG_IKCONFIG_PROC=y
+CONFIG_PRINTK_TIME=y
+
diff --git a/rcutorture/configs/rcu/v3.3/PT1-nh b/rcutorture/configs/rcu/v3.3/PT1-nh
new file mode 100644
index 0000000..e3361c3
--- /dev/null
+++ b/rcutorture/configs/rcu/v3.3/PT1-nh
@@ -0,0 +1,23 @@
+CONFIG_TINY_PREEMPT_RCU=y
+CONFIG_RCU_BOOST=y
+CONFIG_RCU_BOOST_PRIO=2
+CONFIG_RCU_TRACE=y
+CONFIG_RCU_TORTURE_TEST=m
+CONFIG_MODULE_UNLOAD=y
+CONFIG_SUSPEND=n
+CONFIG_HIBERNATION=n
+#
+CONFIG_SMP=n
+#
+CONFIG_HOTPLUG_CPU=n
+#
+CONFIG_NO_HZ=n
+#
+CONFIG_PREEMPT_NONE=n
+CONFIG_PREEMPT_VOLUNTARY=n
+CONFIG_PREEMPT=y
+CONFIG_SYSFS_DEPRECATED_V2=y
+CONFIG_IKCONFIG=y
+CONFIG_IKCONFIG_PROC=y
+CONFIG_PRINTK_TIME=y
+
diff --git a/rcutorture/configs/rcu/v3.3/PT2-NH b/rcutorture/configs/rcu/v3.3/PT2-NH
new file mode 100644
index 0000000..64abfc3
--- /dev/null
+++ b/rcutorture/configs/rcu/v3.3/PT2-NH
@@ -0,0 +1,22 @@
+CONFIG_TINY_PREEMPT_RCU=y
+CONFIG_RCU_TORTURE_TEST=m
+CONFIG_MODULE_UNLOAD=y
+CONFIG_SUSPEND=n
+CONFIG_HIBERNATION=n
+#
+CONFIG_SMP=n
+#
+CONFIG_HOTPLUG_CPU=n
+#
+CONFIG_NO_HZ=y
+#
+CONFIG_PREEMPT_NONE=n
+CONFIG_PREEMPT_VOLUNTARY=n
+CONFIG_PREEMPT=y
+CONFIG_PROVE_LOCKING=y
+CONFIG_PROVE_RCU=y
+CONFIG_SYSFS_DEPRECATED_V2=y
+CONFIG_IKCONFIG=y
+CONFIG_IKCONFIG_PROC=y
+CONFIG_PRINTK_TIME=y
+
diff --git a/rcutorture/configs/rcu/v3.3/ver_functions.sh b/rcutorture/configs/rcu/v3.3/ver_functions.sh
new file mode 100644
index 0000000..bae5569
--- /dev/null
+++ b/rcutorture/configs/rcu/v3.3/ver_functions.sh
@@ -0,0 +1,44 @@
+#!/bin/bash
+#
+# Kernel-version-dependent shell functions for the rest of the scripts.
+#
+# 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, you can access it online at
+# http://www.gnu.org/licenses/gpl-2.0.html.
+#
+# Copyright (C) IBM Corporation, 2013
+#
+# Authors: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
+
+# rcutorture_param_onoff bootparam-string config-file
+#
+# Adds onoff rcutorture module parameters to kernels having it.
+rcutorture_param_onoff () {
+ if ! bootparam_hotplug_cpu "$1" && configfrag_hotplug_cpu "$2"
+ then
+ echo CPU-hotplug kernel, adding rcutorture onoff. 1>&2
+ echo rcutorture.onoff_interval=3 rcutorture.onoff_holdoff=30
+ fi
+}
+
+# per_version_boot_params bootparam-string config-file seconds
+#
+# Adds per-version torture-module parameters to kernels supporting them.
+per_version_boot_params () {
+ echo $1 `rcutorture_param_onoff "$1" "$2"` \
+ rcutorture.stat_interval=15 \
+ rcutorture.shutdown_secs=$3 \
+ rcutorture.rcutorture_runnable=1 \
+ rcutorture.test_no_idle_hz=1 \
+ rcutorture.verbose=1
+}
diff --git a/rcutorture/configs/rcu/v3.5/CFLIST b/rcutorture/configs/rcu/v3.5/CFLIST
new file mode 100644
index 0000000..1822394
--- /dev/null
+++ b/rcutorture/configs/rcu/v3.5/CFLIST
@@ -0,0 +1,14 @@
+P1-S-T-NH-SD-SMP-HP
+P2-2-t-nh-sd-SMP-hp
+P3-3-T-nh-SD-SMP-hp
+P4-A-t-NH-sd-SMP-HP
+P5-U-T-NH-sd-SMP-hp
+N1-S-T-NH-SD-SMP-HP
+N2-2-t-nh-sd-SMP-hp
+N3-3-T-nh-SD-SMP-hp
+N4-A-t-NH-sd-SMP-HP
+N5-U-T-NH-sd-SMP-hp
+PT1-nh
+PT2-NH
+NT1-nh
+NT3-NH
diff --git a/rcutorture/configs/rcu/v3.5/N1-S-T-NH-SD-SMP-HP b/rcutorture/configs/rcu/v3.5/N1-S-T-NH-SD-SMP-HP
new file mode 100644
index 0000000..d81e11d
--- /dev/null
+++ b/rcutorture/configs/rcu/v3.5/N1-S-T-NH-SD-SMP-HP
@@ -0,0 +1,19 @@
+CONFIG_RCU_TRACE=y
+CONFIG_RCU_FAST_NO_HZ=y
+CONFIG_NO_HZ=y
+CONFIG_SMP=y
+CONFIG_RCU_FANOUT=8
+CONFIG_NR_CPUS=8
+CONFIG_RCU_FANOUT_EXACT=n
+CONFIG_HOTPLUG_CPU=y
+CONFIG_PREEMPT_NONE=y
+CONFIG_PREEMPT_VOLUNTARY=n
+CONFIG_PREEMPT=n
+#CHECK#CONFIG_TREE_RCU=y
+CONFIG_RCU_TORTURE_TEST=m
+CONFIG_MODULE_UNLOAD=y
+CONFIG_SYSFS_DEPRECATED_V2=y
+CONFIG_IKCONFIG=y
+CONFIG_IKCONFIG_PROC=y
+CONFIG_PRINTK_TIME=y
+
diff --git a/rcutorture/configs/rcu/v3.5/N2-2-t-nh-sd-SMP-hp b/rcutorture/configs/rcu/v3.5/N2-2-t-nh-sd-SMP-hp
new file mode 100644
index 0000000..02e4185
--- /dev/null
+++ b/rcutorture/configs/rcu/v3.5/N2-2-t-nh-sd-SMP-hp
@@ -0,0 +1,20 @@
+CONFIG_RCU_TRACE=n
+CONFIG_NO_HZ=n
+CONFIG_SMP=y
+CONFIG_RCU_FANOUT=4
+CONFIG_NR_CPUS=8
+CONFIG_RCU_FANOUT_EXACT=n
+CONFIG_HOTPLUG_CPU=n
+CONFIG_SUSPEND=n
+CONFIG_HIBERNATION=n
+CONFIG_PREEMPT_NONE=y
+CONFIG_PREEMPT_VOLUNTARY=n
+CONFIG_PREEMPT=n
+#CHECK#CONFIG_TREE_RCU=y
+CONFIG_RCU_TORTURE_TEST=m
+CONFIG_MODULE_UNLOAD=y
+CONFIG_SYSFS_DEPRECATED_V2=y
+CONFIG_IKCONFIG=y
+CONFIG_IKCONFIG_PROC=y
+CONFIG_PRINTK_TIME=y
+
diff --git a/rcutorture/configs/rcu/v3.5/N3-3-T-nh-SD-SMP-hp b/rcutorture/configs/rcu/v3.5/N3-3-T-nh-SD-SMP-hp
new file mode 100644
index 0000000..b3100f6
--- /dev/null
+++ b/rcutorture/configs/rcu/v3.5/N3-3-T-nh-SD-SMP-hp
@@ -0,0 +1,22 @@
+CONFIG_RCU_TRACE=y
+CONFIG_NO_HZ=n
+CONFIG_SMP=y
+CONFIG_RCU_FANOUT=2
+CONFIG_NR_CPUS=8
+CONFIG_RCU_FANOUT_EXACT=n
+CONFIG_HOTPLUG_CPU=n
+CONFIG_SUSPEND=n
+CONFIG_HIBERNATION=n
+CONFIG_PREEMPT_NONE=y
+CONFIG_PREEMPT_VOLUNTARY=n
+CONFIG_PREEMPT=n
+#CHECK#CONFIG_TREE_RCU=y
+CONFIG_RCU_TORTURE_TEST=m
+CONFIG_MODULE_UNLOAD=y
+CONFIG_PROVE_LOCKING=y
+CONFIG_PROVE_RCU=y
+CONFIG_SYSFS_DEPRECATED_V2=y
+CONFIG_IKCONFIG=y
+CONFIG_IKCONFIG_PROC=y
+CONFIG_PRINTK_TIME=y
+
diff --git a/rcutorture/configs/rcu/v3.5/N4-A-t-NH-sd-SMP-HP b/rcutorture/configs/rcu/v3.5/N4-A-t-NH-sd-SMP-HP
new file mode 100644
index 0000000..c56b445
--- /dev/null
+++ b/rcutorture/configs/rcu/v3.5/N4-A-t-NH-sd-SMP-HP
@@ -0,0 +1,18 @@
+CONFIG_RCU_TRACE=n
+CONFIG_NO_HZ=y
+CONFIG_SMP=y
+CONFIG_RCU_FANOUT=6
+CONFIG_NR_CPUS=8
+CONFIG_RCU_FANOUT_EXACT=n
+CONFIG_HOTPLUG_CPU=y
+CONFIG_PREEMPT_NONE=y
+CONFIG_PREEMPT_VOLUNTARY=n
+CONFIG_PREEMPT=n
+#CHECK#CONFIG_TREE_RCU=y
+CONFIG_RCU_TORTURE_TEST=m
+CONFIG_MODULE_UNLOAD=y
+CONFIG_SYSFS_DEPRECATED_V2=y
+CONFIG_IKCONFIG=y
+CONFIG_IKCONFIG_PROC=y
+CONFIG_PRINTK_TIME=y
+
diff --git a/rcutorture/configs/rcu/v3.5/N5-U-T-NH-sd-SMP-hp b/rcutorture/configs/rcu/v3.5/N5-U-T-NH-sd-SMP-hp
new file mode 100644
index 0000000..90d924f
--- /dev/null
+++ b/rcutorture/configs/rcu/v3.5/N5-U-T-NH-sd-SMP-hp
@@ -0,0 +1,22 @@
+CONFIG_RCU_TRACE=y
+CONFIG_DEBUG_KERNEL=y
+CONFIG_RCU_CPU_STALL_INFO=y
+CONFIG_NO_HZ=y
+CONFIG_SMP=y
+CONFIG_RCU_FANOUT=6
+CONFIG_NR_CPUS=8
+CONFIG_RCU_FANOUT_EXACT=y
+CONFIG_HOTPLUG_CPU=n
+CONFIG_SUSPEND=n
+CONFIG_HIBERNATION=n
+CONFIG_PREEMPT_NONE=y
+CONFIG_PREEMPT_VOLUNTARY=n
+CONFIG_PREEMPT=n
+#CHECK#CONFIG_TREE_RCU=y
+CONFIG_RCU_TORTURE_TEST=m
+CONFIG_MODULE_UNLOAD=y
+CONFIG_SYSFS_DEPRECATED_V2=y
+CONFIG_IKCONFIG=y
+CONFIG_IKCONFIG_PROC=y
+CONFIG_PRINTK_TIME=y
+
diff --git a/rcutorture/configs/rcu/v3.5/NT1-nh b/rcutorture/configs/rcu/v3.5/NT1-nh
new file mode 100644
index 0000000..023f312
--- /dev/null
+++ b/rcutorture/configs/rcu/v3.5/NT1-nh
@@ -0,0 +1,23 @@
+#CHECK#CONFIG_TINY_RCU=y
+CONFIG_RCU_TRACE=y
+CONFIG_RCU_TORTURE_TEST=m
+CONFIG_MODULE_UNLOAD=y
+CONFIG_SUSPEND=n
+CONFIG_HIBERNATION=n
+#
+CONFIG_SMP=n
+#
+CONFIG_HOTPLUG_CPU=n
+#
+CONFIG_NO_HZ=n
+#
+CONFIG_PREEMPT_NONE=y
+CONFIG_PREEMPT_VOLUNTARY=n
+CONFIG_PREEMPT=n
+CONFIG_PROVE_LOCKING=y
+CONFIG_PROVE_RCU=y
+CONFIG_SYSFS_DEPRECATED_V2=y
+CONFIG_IKCONFIG=y
+CONFIG_IKCONFIG_PROC=y
+CONFIG_PRINTK_TIME=y
+
diff --git a/rcutorture/configs/rcu/v3.5/NT3-NH b/rcutorture/configs/rcu/v3.5/NT3-NH
new file mode 100644
index 0000000..6fd0235
--- /dev/null
+++ b/rcutorture/configs/rcu/v3.5/NT3-NH
@@ -0,0 +1,20 @@
+#CHECK#CONFIG_TINY_RCU=y
+CONFIG_RCU_TORTURE_TEST=m
+CONFIG_MODULE_UNLOAD=y
+CONFIG_SUSPEND=n
+CONFIG_HIBERNATION=n
+#
+CONFIG_SMP=n
+#
+CONFIG_HOTPLUG_CPU=n
+#
+CONFIG_NO_HZ=y
+#
+CONFIG_PREEMPT_NONE=y
+CONFIG_PREEMPT_VOLUNTARY=n
+CONFIG_PREEMPT=n
+CONFIG_SYSFS_DEPRECATED_V2=y
+CONFIG_IKCONFIG=y
+CONFIG_IKCONFIG_PROC=y
+CONFIG_PRINTK_TIME=y
+
diff --git a/rcutorture/configs/rcu/v3.5/P1-S-T-NH-SD-SMP-HP b/rcutorture/configs/rcu/v3.5/P1-S-T-NH-SD-SMP-HP
new file mode 100644
index 0000000..9647c44
--- /dev/null
+++ b/rcutorture/configs/rcu/v3.5/P1-S-T-NH-SD-SMP-HP
@@ -0,0 +1,20 @@
+CONFIG_RCU_TRACE=y
+CONFIG_RCU_CPU_STALL_INFO=y
+CONFIG_NO_HZ=y
+CONFIG_RCU_FAST_NO_HZ=y
+CONFIG_SMP=y
+CONFIG_RCU_FANOUT=8
+CONFIG_NR_CPUS=8
+CONFIG_RCU_FANOUT_EXACT=n
+CONFIG_HOTPLUG_CPU=y
+CONFIG_PREEMPT_NONE=n
+CONFIG_PREEMPT_VOLUNTARY=n
+CONFIG_PREEMPT=y
+#CHECK#CONFIG_TREE_PREEMPT_RCU=y
+CONFIG_RCU_TORTURE_TEST=m
+CONFIG_MODULE_UNLOAD=y
+CONFIG_SYSFS_DEPRECATED_V2=y
+CONFIG_IKCONFIG=y
+CONFIG_IKCONFIG_PROC=y
+CONFIG_PRINTK_TIME=y
+
diff --git a/rcutorture/configs/rcu/v3.5/P2-2-t-nh-sd-SMP-hp b/rcutorture/configs/rcu/v3.5/P2-2-t-nh-sd-SMP-hp
new file mode 100644
index 0000000..0f3b667
--- /dev/null
+++ b/rcutorture/configs/rcu/v3.5/P2-2-t-nh-sd-SMP-hp
@@ -0,0 +1,20 @@
+CONFIG_RCU_TRACE=n
+CONFIG_NO_HZ=n
+CONFIG_SMP=y
+CONFIG_RCU_FANOUT=4
+CONFIG_NR_CPUS=8
+CONFIG_RCU_FANOUT_EXACT=n
+CONFIG_HOTPLUG_CPU=n
+CONFIG_SUSPEND=n
+CONFIG_HIBERNATION=n
+CONFIG_PREEMPT_NONE=n
+CONFIG_PREEMPT_VOLUNTARY=n
+CONFIG_PREEMPT=y
+#CHECK#CONFIG_TREE_PREEMPT_RCU=y
+CONFIG_RCU_TORTURE_TEST=m
+CONFIG_MODULE_UNLOAD=y
+CONFIG_SYSFS_DEPRECATED_V2=y
+CONFIG_IKCONFIG=y
+CONFIG_IKCONFIG_PROC=y
+CONFIG_PRINTK_TIME=y
+
diff --git a/rcutorture/configs/rcu/v3.5/P3-3-T-nh-SD-SMP-hp b/rcutorture/configs/rcu/v3.5/P3-3-T-nh-SD-SMP-hp
new file mode 100644
index 0000000..b035e14
--- /dev/null
+++ b/rcutorture/configs/rcu/v3.5/P3-3-T-nh-SD-SMP-hp
@@ -0,0 +1,20 @@
+CONFIG_RCU_TRACE=y
+CONFIG_NO_HZ=n
+CONFIG_SMP=y
+CONFIG_RCU_FANOUT=2
+CONFIG_NR_CPUS=8
+CONFIG_RCU_FANOUT_EXACT=n
+CONFIG_HOTPLUG_CPU=n
+CONFIG_SUSPEND=n
+CONFIG_HIBERNATION=n
+CONFIG_PREEMPT_NONE=n
+CONFIG_PREEMPT_VOLUNTARY=n
+CONFIG_PREEMPT=y
+#CHECK#CONFIG_TREE_PREEMPT_RCU=y
+CONFIG_RCU_TORTURE_TEST=m
+CONFIG_MODULE_UNLOAD=y
+CONFIG_SYSFS_DEPRECATED_V2=y
+CONFIG_IKCONFIG=y
+CONFIG_IKCONFIG_PROC=y
+CONFIG_PRINTK_TIME=y
+
diff --git a/rcutorture/configs/rcu/v3.5/P4-A-t-NH-sd-SMP-HP b/rcutorture/configs/rcu/v3.5/P4-A-t-NH-sd-SMP-HP
new file mode 100644
index 0000000..3ccf6a9
--- /dev/null
+++ b/rcutorture/configs/rcu/v3.5/P4-A-t-NH-sd-SMP-HP
@@ -0,0 +1,22 @@
+CONFIG_RCU_TRACE=n
+CONFIG_NO_HZ=y
+CONFIG_SMP=y
+CONFIG_RCU_FANOUT=6
+CONFIG_NR_CPUS=8
+CONFIG_RCU_FANOUT_EXACT=n
+CONFIG_HOTPLUG_CPU=y
+CONFIG_PREEMPT_NONE=n
+CONFIG_PREEMPT_VOLUNTARY=n
+CONFIG_PREEMPT=y
+#CHECK#CONFIG_TREE_PREEMPT_RCU=y
+CONFIG_RCU_TORTURE_TEST=m
+CONFIG_MODULE_UNLOAD=y
+CONFIG_RT_MUTEXES=y
+CONFIG_RCU_BOOST=y
+CONFIG_RCU_BOOST_PRIO=2
+CONFIG_PROVE_LOCKING=y
+CONFIG_PROVE_RCU=y
+CONFIG_IKCONFIG=y
+CONFIG_IKCONFIG_PROC=y
+CONFIG_PRINTK_TIME=y
+
diff --git a/rcutorture/configs/rcu/v3.5/P5-U-T-NH-sd-SMP-hp b/rcutorture/configs/rcu/v3.5/P5-U-T-NH-sd-SMP-hp
new file mode 100644
index 0000000..a55c008
--- /dev/null
+++ b/rcutorture/configs/rcu/v3.5/P5-U-T-NH-sd-SMP-hp
@@ -0,0 +1,27 @@
+CONFIG_RCU_TRACE=y
+CONFIG_RCU_CPU_STALL_INFO=y
+CONFIG_NO_HZ=y
+CONFIG_SMP=y
+CONFIG_RCU_FANOUT=6
+CONFIG_NR_CPUS=8
+CONFIG_RCU_FANOUT_EXACT=y
+CONFIG_HOTPLUG_CPU=n
+CONFIG_SUSPEND=n
+CONFIG_HIBERNATION=n
+CONFIG_PREEMPT_NONE=n
+CONFIG_PREEMPT_VOLUNTARY=n
+CONFIG_PREEMPT=y
+#CHECK#CONFIG_TREE_PREEMPT_RCU=y
+CONFIG_DEBUG_KERNEL=y
+CONFIG_DEBUG_OBJECTS=y
+CONFIG_DEBUG_OBJECTS_RCU_HEAD=y
+CONFIG_RT_MUTEXES=y
+CONFIG_RCU_BOOST=y
+CONFIG_RCU_BOOST_PRIO=2
+CONFIG_RCU_TORTURE_TEST=m
+CONFIG_MODULE_UNLOAD=y
+CONFIG_SYSFS_DEPRECATED_V2=y
+CONFIG_IKCONFIG=y
+CONFIG_IKCONFIG_PROC=y
+CONFIG_PRINTK_TIME=y
+
diff --git a/rcutorture/configs/rcu/v3.5/PT1-nh b/rcutorture/configs/rcu/v3.5/PT1-nh
new file mode 100644
index 0000000..e3361c3
--- /dev/null
+++ b/rcutorture/configs/rcu/v3.5/PT1-nh
@@ -0,0 +1,23 @@
+CONFIG_TINY_PREEMPT_RCU=y
+CONFIG_RCU_BOOST=y
+CONFIG_RCU_BOOST_PRIO=2
+CONFIG_RCU_TRACE=y
+CONFIG_RCU_TORTURE_TEST=m
+CONFIG_MODULE_UNLOAD=y
+CONFIG_SUSPEND=n
+CONFIG_HIBERNATION=n
+#
+CONFIG_SMP=n
+#
+CONFIG_HOTPLUG_CPU=n
+#
+CONFIG_NO_HZ=n
+#
+CONFIG_PREEMPT_NONE=n
+CONFIG_PREEMPT_VOLUNTARY=n
+CONFIG_PREEMPT=y
+CONFIG_SYSFS_DEPRECATED_V2=y
+CONFIG_IKCONFIG=y
+CONFIG_IKCONFIG_PROC=y
+CONFIG_PRINTK_TIME=y
+
diff --git a/rcutorture/configs/rcu/v3.5/PT2-NH b/rcutorture/configs/rcu/v3.5/PT2-NH
new file mode 100644
index 0000000..64abfc3
--- /dev/null
+++ b/rcutorture/configs/rcu/v3.5/PT2-NH
@@ -0,0 +1,22 @@
+CONFIG_TINY_PREEMPT_RCU=y
+CONFIG_RCU_TORTURE_TEST=m
+CONFIG_MODULE_UNLOAD=y
+CONFIG_SUSPEND=n
+CONFIG_HIBERNATION=n
+#
+CONFIG_SMP=n
+#
+CONFIG_HOTPLUG_CPU=n
+#
+CONFIG_NO_HZ=y
+#
+CONFIG_PREEMPT_NONE=n
+CONFIG_PREEMPT_VOLUNTARY=n
+CONFIG_PREEMPT=y
+CONFIG_PROVE_LOCKING=y
+CONFIG_PROVE_RCU=y
+CONFIG_SYSFS_DEPRECATED_V2=y
+CONFIG_IKCONFIG=y
+CONFIG_IKCONFIG_PROC=y
+CONFIG_PRINTK_TIME=y
+
diff --git a/rcutorture/configs/rcu/v3.5/ver_functions.sh b/rcutorture/configs/rcu/v3.5/ver_functions.sh
new file mode 100644
index 0000000..8977d8d
--- /dev/null
+++ b/rcutorture/configs/rcu/v3.5/ver_functions.sh
@@ -0,0 +1,57 @@
+#!/bin/bash
+#
+# Kernel-version-dependent shell functions for the rest of the scripts.
+#
+# 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, you can access it online at
+# http://www.gnu.org/licenses/gpl-2.0.html.
+#
+# Copyright (C) IBM Corporation, 2013
+#
+# Authors: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
+
+# rcutorture_param_n_barrier_cbs bootparam-string
+#
+# Adds n_barrier_cbs rcutorture module parameter to kernels having it.
+rcutorture_param_n_barrier_cbs () {
+ if echo $1 | grep -q "rcutorture\.n_barrier_cbs"
+ then
+ :
+ else
+ echo rcutorture.n_barrier_cbs=4
+ fi
+}
+
+# rcutorture_param_onoff bootparam-string config-file
+#
+# Adds onoff rcutorture module parameters to kernels having it.
+rcutorture_param_onoff () {
+ if ! bootparam_hotplug_cpu "$1" && configfrag_hotplug_cpu "$2"
+ then
+ echo CPU-hotplug kernel, adding rcutorture onoff. 1>&2
+ echo rcutorture.onoff_interval=3 rcutorture.onoff_holdoff=30
+ fi
+}
+
+# per_version_boot_params bootparam-string config-file seconds
+#
+# Adds per-version torture-module parameters to kernels supporting them.
+per_version_boot_params () {
+ echo $1 `rcutorture_param_onoff "$1" "$2"` \
+ `rcutorture_param_n_barrier_cbs "$1"` \
+ rcutorture.stat_interval=15 \
+ rcutorture.shutdown_secs=$3 \
+ rcutorture.rcutorture_runnable=1 \
+ rcutorture.test_no_idle_hz=1 \
+ rcutorture.verbose=1
+}
diff --git a/rcutorture/doc/TINY_RCU.txt b/rcutorture/doc/TINY_RCU.txt
index 9ef33a7..28db67b 100644
--- a/rcutorture/doc/TINY_RCU.txt
+++ b/rcutorture/doc/TINY_RCU.txt
@@ -34,7 +34,7 @@ CONFIG_PREEMPT
CONFIG_PREEMPT_RCU
CONFIG_SMP
CONFIG_TINY_RCU
-CONFIG_PREEMPT_RCU
+CONFIG_TREE_PREEMPT_RCU
CONFIG_TREE_RCU
All forced by CONFIG_TINY_RCU.
diff --git a/rcutorture/doc/TREE_RCU-kconfig.txt b/rcutorture/doc/TREE_RCU-kconfig.txt
index ec03c88..3e588db 100644
--- a/rcutorture/doc/TREE_RCU-kconfig.txt
+++ b/rcutorture/doc/TREE_RCU-kconfig.txt
@@ -1,5 +1,5 @@
This document gives a brief rationale for the TREE_RCU-related test
-cases, a group that includes PREEMPT_RCU.
+cases, a group that includes TREE_PREEMPT_RCU.
Kconfig Parameters:
@@ -14,9 +14,10 @@ CONFIG_NO_HZ_FULL_SYSIDLE -- Do one.
CONFIG_PREEMPT -- Do half. (First three and #8.)
CONFIG_PROVE_LOCKING -- Do all but two, covering CONFIG_PROVE_RCU and not.
CONFIG_PROVE_RCU -- Do all but one under CONFIG_PROVE_LOCKING.
-CONFIG_RCU_BOOST -- one of PREEMPT_RCU.
-CONFIG_RCU_KTHREAD_PRIO -- set to 2 for _BOOST testing.
-CONFIG_RCU_CPU_STALL_INFO -- Do one.
+CONFIG_RCU_BOOST -- one of TREE_PREEMPT_RCU.
+CONFIG_RCU_BOOST_PRIO -- set to 2 for _BOOST testing.
+CONFIG_RCU_CPU_STALL_INFO -- do one with and without _VERBOSE.
+CONFIG_RCU_CPU_STALL_VERBOSE -- do one with and without _INFO.
CONFIG_RCU_FANOUT -- Cover hierarchy as currently, but overlap with others.
CONFIG_RCU_FANOUT_EXACT -- Do one.
CONFIG_RCU_FANOUT_LEAF -- Do one non-default.
@@ -26,7 +27,7 @@ CONFIG_RCU_NOCB_CPU_ALL -- Do one.
CONFIG_RCU_NOCB_CPU_NONE -- Do one.
CONFIG_RCU_NOCB_CPU_ZERO -- Do one.
CONFIG_RCU_TRACE -- Do half.
-CONFIG_SMP -- Need one !SMP for PREEMPT_RCU.
+CONFIG_SMP -- Need one !SMP for TREE_PREEMPT_RCU.
RCU-bh: Do one with PREEMPT and one with !PREEMPT.
RCU-sched: Do one with PREEMPT but not BOOST.
@@ -76,7 +77,7 @@ CONFIG_RCU_CPU_STALL_TIMEOUT
CONFIG_RCU_STALL_COMMON
- Implied by TREE_RCU and PREEMPT_RCU.
+ Implied by TREE_RCU and TREE_PREEMPT_RCU.
CONFIG_RCU_TORTURE_TEST
CONFIG_RCU_TORTURE_TEST_RUNNABLE
@@ -87,7 +88,7 @@ CONFIG_RCU_USER_QS
Redundant with CONFIG_NO_HZ_FULL.
-CONFIG_PREEMPT_RCU
+CONFIG_TREE_PREEMPT_RCU
CONFIG_TREE_RCU
These are controlled by CONFIG_PREEMPT.
diff --git a/size/.gitignore b/size/.gitignore
deleted file mode 100644
index 189b781..0000000
--- a/size/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-get_size
diff --git a/size/Makefile b/size/Makefile
deleted file mode 100644
index 04dc25e..0000000
--- a/size/Makefile
+++ /dev/null
@@ -1,12 +0,0 @@
-CC = $(CROSS_COMPILE)gcc
-
-all: get_size
-
-get_size: get_size.c
- $(CC) -static -ffreestanding -nostartfiles -s $< -o $@
-
-run_tests: all
- ./get_size
-
-clean:
- $(RM) get_size
diff --git a/size/get_size.c b/size/get_size.c
deleted file mode 100644
index 2d1af7c..0000000
--- a/size/get_size.c
+++ /dev/null
@@ -1,100 +0,0 @@
-/*
- * Copyright 2014 Sony Mobile Communications Inc.
- *
- * Licensed under the terms of the GNU GPL License version 2
- *
- * Selftest for runtime system size
- *
- * Prints the amount of RAM that the currently running system is using.
- *
- * This program tries to be as small as possible itself, to
- * avoid perturbing the system memory utilization with its
- * own execution. It also attempts to have as few dependencies
- * on kernel features as possible.
- *
- * It should be statically linked, with startup libs avoided.
- * It uses no library calls, and only the following 3 syscalls:
- * sysinfo(), write(), and _exit()
- *
- * For output, it avoids printf (which in some C libraries
- * has large external dependencies) by implementing it's own
- * number output and print routines, and using __builtin_strlen()
- */
-
-#include <sys/sysinfo.h>
-#include <unistd.h>
-
-#define STDOUT_FILENO 1
-
-static int print(const char *s)
-{
- return write(STDOUT_FILENO, s, __builtin_strlen(s));
-}
-
-static inline char *num_to_str(unsigned long num, char *buf, int len)
-{
- unsigned int digit;
-
- /* put digits in buffer from back to front */
- buf += len - 1;
- *buf = 0;
- do {
- digit = num % 10;
- *(--buf) = digit + '0';
- num /= 10;
- } while (num > 0);
-
- return buf;
-}
-
-static int print_num(unsigned long num)
-{
- char num_buf[30];
-
- return print(num_to_str(num, num_buf, sizeof(num_buf)));
-}
-
-static int print_k_value(const char *s, unsigned long num, unsigned long units)
-{
- unsigned long long temp;
- int ccode;
-
- print(s);
-
- temp = num;
- temp = (temp * units)/1024;
- num = temp;
- ccode = print_num(num);
- print("\n");
- return ccode;
-}
-
-/* this program has no main(), as startup libraries are not used */
-void _start(void)
-{
- int ccode;
- struct sysinfo info;
- unsigned long used;
-
- print("Testing system size.\n");
- print("1..1\n");
-
- ccode = sysinfo(&info);
- if (ccode < 0) {
- print("not ok 1 get runtime memory use\n");
- print("# could not get sysinfo\n");
- _exit(ccode);
- }
- /* ignore cache complexities for now */
- used = info.totalram - info.freeram - info.bufferram;
- print_k_value("ok 1 get runtime memory use # size = ", used,
- info.mem_unit);
-
- print("# System runtime memory report (units in Kilobytes):\n");
- print_k_value("# Total: ", info.totalram, info.mem_unit);
- print_k_value("# Free: ", info.freeram, info.mem_unit);
- print_k_value("# Buffer: ", info.bufferram, info.mem_unit);
- print_k_value("# In use: ", used, info.mem_unit);
-
- _exit(0);
-}
diff --git a/timers/posix_timers.c b/timers/posix_timers.c
index f87d970..41bd855 100644
--- a/timers/posix_timers.c
+++ b/timers/posix_timers.c
@@ -15,8 +15,6 @@
#include <time.h>
#include <pthread.h>
-#include "../kselftest.h"
-
#define DELAY 2
#define USECS_PER_SEC 1000000
@@ -196,16 +194,16 @@ int main(int argc, char **argv)
printf("based timers if other threads run on the CPU...\n");
if (check_itimer(ITIMER_VIRTUAL) < 0)
- return ksft_exit_fail();
+ return -1;
if (check_itimer(ITIMER_PROF) < 0)
- return ksft_exit_fail();
+ return -1;
if (check_itimer(ITIMER_REAL) < 0)
- return ksft_exit_fail();
+ return -1;
if (check_timer_create(CLOCK_THREAD_CPUTIME_ID) < 0)
- return ksft_exit_fail();
+ return -1;
/*
* It's unfortunately hard to reliably test a timer expiration
@@ -217,7 +215,7 @@ int main(int argc, char **argv)
* find a better solution.
*/
if (check_timer_create(CLOCK_PROCESS_CPUTIME_ID) < 0)
- return ksft_exit_fail();
+ return -1;
- return ksft_exit_pass();
+ return 0;
}
diff --git a/user/Makefile b/user/Makefile
index 12c9d15..396255b 100644
--- a/user/Makefile
+++ b/user/Makefile
@@ -4,4 +4,10 @@
all:
run_tests: all
- ./test_user_copy.sh
+ @if /sbin/modprobe test_user_copy ; then \
+ rmmod test_user_copy; \
+ echo "user_copy: ok"; \
+ else \
+ echo "user_copy: [FAIL]"; \
+ exit 1; \
+ fi
diff --git a/user/test_user_copy.sh b/user/test_user_copy.sh
deleted file mode 100755
index 350107f..0000000
--- a/user/test_user_copy.sh
+++ /dev/null
@@ -1,10 +0,0 @@
-#!/bin/sh
-# Runs copy_to/from_user infrastructure using test_user_copy kernel module
-
-if /sbin/modprobe -q test_user_copy; then
- /sbin/modprobe -q -r test_user_copy
- echo "user_copy: ok"
-else
- echo "user_copy: [FAIL]"
- exit 1
-fi