aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorArthur She <arthur.she@linaro.org>2014-09-18 11:06:12 -0700
committerArthur She <arthur.she@linaro.org>2014-09-18 11:06:12 -0700
commitdbb5bc6a61eff1f9cd72c597b4d3a4b0d4411f04 (patch)
tree4b825dc642cb6eb9a060e54bf8d69288fbee4904
parent095e64f00a2f694a8ec46f05665b16b269c69758 (diff)
Update to 0db49b72bce26341274b74fd968501489a361ae3 from repo http://git.linaro.org/kernel/linux-linaro-tracking.git branch master0db49b72bce26341274b74fd968501489a361ae3
-rw-r--r--Makefile28
-rw-r--r--README.txt42
-rw-r--r--breakpoints/Makefile23
-rw-r--r--breakpoints/breakpoint_test.c394
-rw-r--r--cpu-hotplug/Makefile6
-rw-r--r--cpu-hotplug/on-off-test.sh221
-rw-r--r--efivarfs/Makefile12
-rw-r--r--efivarfs/create-read.c38
-rw-r--r--efivarfs/efivarfs.sh198
-rw-r--r--efivarfs/open-unlink.c63
-rw-r--r--ipc/Makefile25
-rw-r--r--ipc/msgque.c252
-rw-r--r--kcmp/.gitignore2
-rw-r--r--kcmp/Makefile28
-rw-r--r--kcmp/kcmp_test.c96
-rw-r--r--memory-hotplug/Makefile6
-rw-r--r--memory-hotplug/on-off-test.sh230
-rw-r--r--mqueue/.gitignore2
-rw-r--r--mqueue/Makefile10
-rw-r--r--mqueue/mq_open_tests.c492
-rw-r--r--mqueue/mq_perf_tests.c741
-rw-r--r--net/.gitignore3
-rw-r--r--net/Makefile25
-rw-r--r--net/psock_fanout.c312
-rw-r--r--net/psock_lib.h127
-rw-r--r--net/psock_tpacket.c805
-rw-r--r--net/run_afpackettests26
-rw-r--r--net/run_netsocktests12
-rw-r--r--net/socket.c92
-rw-r--r--powerpc/Makefile39
-rw-r--r--powerpc/copyloops/Makefile29
-rw-r--r--powerpc/copyloops/asm/ppc_asm.h89
-rw-r--r--powerpc/copyloops/asm/processor.h0
l---------powerpc/copyloops/copyuser_64.S1
l---------powerpc/copyloops/copyuser_power7.S1
l---------powerpc/copyloops/memcpy_64.S1
l---------powerpc/copyloops/memcpy_power7.S1
-rw-r--r--powerpc/copyloops/validate.c99
-rw-r--r--powerpc/harness.c114
-rw-r--r--powerpc/mm/Makefile18
-rw-r--r--powerpc/mm/hugetlb_vs_thp_test.c72
-rw-r--r--powerpc/pmu/Makefile41
-rw-r--r--powerpc/pmu/count_instructions.c135
-rw-r--r--powerpc/pmu/ebb/Makefile32
-rw-r--r--powerpc/pmu/ebb/back_to_back_ebbs_test.c106
-rw-r--r--powerpc/pmu/ebb/close_clears_pmcc_test.c59
-rw-r--r--powerpc/pmu/ebb/cpu_event_pinned_vs_ebb_test.c93
-rw-r--r--powerpc/pmu/ebb/cpu_event_vs_ebb_test.c89
-rw-r--r--powerpc/pmu/ebb/cycles_test.c58
-rw-r--r--powerpc/pmu/ebb/cycles_with_freeze_test.c117
-rw-r--r--powerpc/pmu/ebb/ebb.c727
-rw-r--r--powerpc/pmu/ebb/ebb.h78
-rw-r--r--powerpc/pmu/ebb/ebb_handler.S365
-rw-r--r--powerpc/pmu/ebb/ebb_on_child_test.c86
-rw-r--r--powerpc/pmu/ebb/ebb_on_willing_child_test.c92
-rw-r--r--powerpc/pmu/ebb/ebb_vs_cpu_event_test.c86
-rw-r--r--powerpc/pmu/ebb/event_attributes_test.c131
-rw-r--r--powerpc/pmu/ebb/fixed_instruction_loop.S43
-rw-r--r--powerpc/pmu/ebb/fork_cleanup_test.c79
-rw-r--r--powerpc/pmu/ebb/instruction_count_test.c164
-rw-r--r--powerpc/pmu/ebb/lost_exception_test.c100
-rw-r--r--powerpc/pmu/ebb/multi_counter_test.c91
-rw-r--r--powerpc/pmu/ebb/multi_ebb_procs_test.c109
-rw-r--r--powerpc/pmu/ebb/no_handler_test.c61
-rw-r--r--powerpc/pmu/ebb/pmae_handling_test.c106
-rw-r--r--powerpc/pmu/ebb/pmc56_overflow_test.c93
-rw-r--r--powerpc/pmu/ebb/reg.h49
-rw-r--r--powerpc/pmu/ebb/reg_access_test.c39
-rw-r--r--powerpc/pmu/ebb/task_event_pinned_vs_ebb_test.c91
-rw-r--r--powerpc/pmu/ebb/task_event_vs_ebb_test.c83
-rw-r--r--powerpc/pmu/ebb/trace.c300
-rw-r--r--powerpc/pmu/ebb/trace.h41
-rw-r--r--powerpc/pmu/event.c131
-rw-r--r--powerpc/pmu/event.h43
-rw-r--r--powerpc/pmu/lib.c252
-rw-r--r--powerpc/pmu/lib.h41
-rw-r--r--powerpc/pmu/loop.S43
-rw-r--r--powerpc/subunit.h52
-rw-r--r--powerpc/tm/Makefile15
-rw-r--r--powerpc/tm/tm-resched-dscr.c98
-rw-r--r--powerpc/utils.h49
-rw-r--r--ptrace/Makefile10
-rw-r--r--ptrace/peeksiginfo.c214
-rw-r--r--rcutorture/.gitignore6
-rw-r--r--rcutorture/bin/config2frag.sh25
-rwxr-xr-xrcutorture/bin/configNR_CPUS.sh45
-rwxr-xr-xrcutorture/bin/configcheck.sh54
-rwxr-xr-xrcutorture/bin/configinit.sh74
-rwxr-xr-xrcutorture/bin/cpus2use.sh41
-rw-r--r--rcutorture/bin/functions.sh223
-rwxr-xr-xrcutorture/bin/kvm-build.sh71
-rwxr-xr-xrcutorture/bin/kvm-recheck-lock.sh51
-rwxr-xr-xrcutorture/bin/kvm-recheck-rcu.sh51
-rwxr-xr-xrcutorture/bin/kvm-recheck.sh63
-rwxr-xr-xrcutorture/bin/kvm-test-1-run.sh222
-rw-r--r--rcutorture/bin/kvm.sh410
-rwxr-xr-xrcutorture/bin/parse-build.sh57
-rwxr-xr-xrcutorture/bin/parse-console.sh41
-rwxr-xr-xrcutorture/bin/parse-torture.sh106
-rw-r--r--rcutorture/configs/lock/BUSTED6
-rw-r--r--rcutorture/configs/lock/BUSTED.boot1
-rw-r--r--rcutorture/configs/lock/CFLIST1
-rw-r--r--rcutorture/configs/lock/CFcommon2
-rw-r--r--rcutorture/configs/lock/LOCK016
-rw-r--r--rcutorture/configs/lock/ver_functions.sh43
-rw-r--r--rcutorture/configs/rcu/BUSTED7
-rw-r--r--rcutorture/configs/rcu/BUSTED.boot1
-rw-r--r--rcutorture/configs/rcu/CFLIST13
-rw-r--r--rcutorture/configs/rcu/CFcommon2
-rw-r--r--rcutorture/configs/rcu/SRCU-N7
-rw-r--r--rcutorture/configs/rcu/SRCU-N.boot1
-rw-r--r--rcutorture/configs/rcu/SRCU-P7
-rw-r--r--rcutorture/configs/rcu/SRCU-P.boot1
-rw-r--r--rcutorture/configs/rcu/TINY0112
-rw-r--r--rcutorture/configs/rcu/TINY0212
-rw-r--r--rcutorture/configs/rcu/TREE0122
-rw-r--r--rcutorture/configs/rcu/TREE01.boot1
-rw-r--r--rcutorture/configs/rcu/TREE0225
-rw-r--r--rcutorture/configs/rcu/TREE02-T25
-rw-r--r--rcutorture/configs/rcu/TREE0322
-rw-r--r--rcutorture/configs/rcu/TREE0424
-rw-r--r--rcutorture/configs/rcu/TREE04.boot1
-rw-r--r--rcutorture/configs/rcu/TREE0524
-rw-r--r--rcutorture/configs/rcu/TREE05.boot1
-rw-r--r--rcutorture/configs/rcu/TREE0625
-rw-r--r--rcutorture/configs/rcu/TREE0723
-rw-r--r--rcutorture/configs/rcu/TREE0825
-rw-r--r--rcutorture/configs/rcu/TREE08-T25
-rw-r--r--rcutorture/configs/rcu/TREE08.boot1
-rw-r--r--rcutorture/configs/rcu/TREE0920
-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-hp28
-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-hp28
-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-hp28
-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-hp28
-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/configs/rcu/ver_functions.sh57
-rw-r--r--rcutorture/doc/TINY_RCU.txt40
-rw-r--r--rcutorture/doc/TREE_RCU-kconfig.txt95
-rw-r--r--rcutorture/doc/initrd.txt90
-rw-r--r--rcutorture/doc/rcu-test-image.txt42
-rw-r--r--sysctl/Makefile19
-rw-r--r--sysctl/common_tests109
-rw-r--r--sysctl/run_numerictests10
-rw-r--r--sysctl/run_stringtests77
-rw-r--r--timers/Makefile8
-rw-r--r--timers/posix_timers.c221
-rw-r--r--user/Makefile13
-rw-r--r--vm/.gitignore4
-rw-r--r--vm/Makefile15
-rw-r--r--vm/hugepage-mmap.c92
-rw-r--r--vm/hugepage-shm.c100
-rw-r--r--vm/hugetlbfstest.c84
-rw-r--r--vm/map_hugetlb.c79
-rw-r--r--vm/run_vmtests93
-rw-r--r--vm/thuge-gen.c254
221 files changed, 0 insertions, 14487 deletions
diff --git a/Makefile b/Makefile
deleted file mode 100644
index e66e710..0000000
--- a/Makefile
+++ /dev/null
@@ -1,28 +0,0 @@
-TARGETS = breakpoints
-TARGETS += cpu-hotplug
-TARGETS += efivarfs
-TARGETS += kcmp
-TARGETS += memory-hotplug
-TARGETS += mqueue
-TARGETS += net
-TARGETS += ptrace
-TARGETS += timers
-TARGETS += vm
-TARGETS += powerpc
-TARGETS += user
-TARGETS += sysctl
-
-all:
- for TARGET in $(TARGETS); do \
- make -C $$TARGET; \
- done;
-
-run_tests: all
- for TARGET in $(TARGETS); do \
- make -C $$TARGET run_tests; \
- done;
-
-clean:
- for TARGET in $(TARGETS); do \
- make -C $$TARGET clean; \
- done;
diff --git a/README.txt b/README.txt
deleted file mode 100644
index 5e2faf9..0000000
--- a/README.txt
+++ /dev/null
@@ -1,42 +0,0 @@
-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.
-
-Running the selftests
-=====================
-
-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 targetted for a single subsystem:
-
- $ 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.
-
-
-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/Makefile b/breakpoints/Makefile
deleted file mode 100644
index e18b42b..0000000
--- a/breakpoints/Makefile
+++ /dev/null
@@ -1,23 +0,0 @@
-# Taken from perf makefile
-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
-endif
-ifeq ($(ARCH),x86_64)
- ARCH := x86
-endif
-
-
-all:
-ifeq ($(ARCH),x86)
- gcc breakpoint_test.c -o breakpoint_test
-else
- echo "Not an x86 target, can't build breakpoints selftests"
-endif
-
-run_tests:
- @./breakpoint_test || echo "breakpoints selftests: [FAIL]"
-
-clean:
- rm -fr breakpoint_test
diff --git a/breakpoints/breakpoint_test.c b/breakpoints/breakpoint_test.c
deleted file mode 100644
index a0743f3..0000000
--- a/breakpoints/breakpoint_test.c
+++ /dev/null
@@ -1,394 +0,0 @@
-/*
- * Copyright (C) 2011 Red Hat, Inc., Frederic Weisbecker <fweisbec@redhat.com>
- *
- * Licensed under the terms of the GNU GPL License version 2
- *
- * Selftests for breakpoints (and more generally the do_debug() path) in x86.
- */
-
-
-#include <sys/ptrace.h>
-#include <unistd.h>
-#include <stddef.h>
-#include <sys/user.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <signal.h>
-#include <sys/types.h>
-#include <sys/wait.h>
-
-
-/* Breakpoint access modes */
-enum {
- BP_X = 1,
- BP_RW = 2,
- BP_W = 4,
-};
-
-static pid_t child_pid;
-
-/*
- * Ensures the child and parent are always "talking" about
- * the same test sequence. (ie: that we haven't forgotten
- * to call check_trapped() somewhere).
- */
-static int nr_tests;
-
-static void set_breakpoint_addr(void *addr, int n)
-{
- int ret;
-
- ret = ptrace(PTRACE_POKEUSER, child_pid,
- offsetof(struct user, u_debugreg[n]), addr);
- if (ret) {
- perror("Can't set breakpoint addr\n");
- exit(-1);
- }
-}
-
-static void toggle_breakpoint(int n, int type, int len,
- int local, int global, int set)
-{
- int ret;
-
- int xtype, xlen;
- unsigned long vdr7, dr7;
-
- switch (type) {
- case BP_X:
- xtype = 0;
- break;
- case BP_W:
- xtype = 1;
- break;
- case BP_RW:
- xtype = 3;
- break;
- }
-
- switch (len) {
- case 1:
- xlen = 0;
- break;
- case 2:
- xlen = 4;
- break;
- case 4:
- xlen = 0xc;
- break;
- case 8:
- xlen = 8;
- break;
- }
-
- dr7 = ptrace(PTRACE_PEEKUSER, child_pid,
- offsetof(struct user, u_debugreg[7]), 0);
-
- vdr7 = (xlen | xtype) << 16;
- vdr7 <<= 4 * n;
-
- if (local) {
- vdr7 |= 1 << (2 * n);
- vdr7 |= 1 << 8;
- }
- if (global) {
- vdr7 |= 2 << (2 * n);
- vdr7 |= 1 << 9;
- }
-
- if (set)
- dr7 |= vdr7;
- else
- dr7 &= ~vdr7;
-
- ret = ptrace(PTRACE_POKEUSER, child_pid,
- offsetof(struct user, u_debugreg[7]), dr7);
- if (ret) {
- perror("Can't set dr7");
- exit(-1);
- }
-}
-
-/* Dummy variables to test read/write accesses */
-static unsigned long long dummy_var[4];
-
-/* Dummy functions to test execution accesses */
-static void dummy_func(void) { }
-static void dummy_func1(void) { }
-static void dummy_func2(void) { }
-static void dummy_func3(void) { }
-
-static void (*dummy_funcs[])(void) = {
- dummy_func,
- dummy_func1,
- dummy_func2,
- dummy_func3,
-};
-
-static int trapped;
-
-static void check_trapped(void)
-{
- /*
- * If we haven't trapped, wake up the parent
- * so that it notices the failure.
- */
- if (!trapped)
- kill(getpid(), SIGUSR1);
- trapped = 0;
-
- nr_tests++;
-}
-
-static void write_var(int len)
-{
- char *pcval; short *psval; int *pival; long long *plval;
- int i;
-
- for (i = 0; i < 4; i++) {
- switch (len) {
- case 1:
- pcval = (char *)&dummy_var[i];
- *pcval = 0xff;
- break;
- case 2:
- psval = (short *)&dummy_var[i];
- *psval = 0xffff;
- break;
- case 4:
- pival = (int *)&dummy_var[i];
- *pival = 0xffffffff;
- break;
- case 8:
- plval = (long long *)&dummy_var[i];
- *plval = 0xffffffffffffffffLL;
- break;
- }
- check_trapped();
- }
-}
-
-static void read_var(int len)
-{
- char cval; short sval; int ival; long long lval;
- int i;
-
- for (i = 0; i < 4; i++) {
- switch (len) {
- case 1:
- cval = *(char *)&dummy_var[i];
- break;
- case 2:
- sval = *(short *)&dummy_var[i];
- break;
- case 4:
- ival = *(int *)&dummy_var[i];
- break;
- case 8:
- lval = *(long long *)&dummy_var[i];
- break;
- }
- check_trapped();
- }
-}
-
-/*
- * Do the r/w/x accesses to trigger the breakpoints. And run
- * the usual traps.
- */
-static void trigger_tests(void)
-{
- int len, local, global, i;
- char val;
- int ret;
-
- ret = ptrace(PTRACE_TRACEME, 0, NULL, 0);
- if (ret) {
- perror("Can't be traced?\n");
- return;
- }
-
- /* Wake up father so that it sets up the first test */
- kill(getpid(), SIGUSR1);
-
- /* Test instruction breakpoints */
- for (local = 0; local < 2; local++) {
- for (global = 0; global < 2; global++) {
- if (!local && !global)
- continue;
-
- for (i = 0; i < 4; i++) {
- dummy_funcs[i]();
- check_trapped();
- }
- }
- }
-
- /* Test write watchpoints */
- for (len = 1; len <= sizeof(long); len <<= 1) {
- for (local = 0; local < 2; local++) {
- for (global = 0; global < 2; global++) {
- if (!local && !global)
- continue;
- write_var(len);
- }
- }
- }
-
- /* Test read/write watchpoints (on read accesses) */
- for (len = 1; len <= sizeof(long); len <<= 1) {
- for (local = 0; local < 2; local++) {
- for (global = 0; global < 2; global++) {
- if (!local && !global)
- continue;
- read_var(len);
- }
- }
- }
-
- /* Icebp trap */
- asm(".byte 0xf1\n");
- check_trapped();
-
- /* Int 3 trap */
- asm("int $3\n");
- check_trapped();
-
- kill(getpid(), SIGUSR1);
-}
-
-static void check_success(const char *msg)
-{
- const char *msg2;
- int child_nr_tests;
- int status;
-
- /* Wait for the child to SIGTRAP */
- wait(&status);
-
- msg2 = "Failed";
-
- if (WSTOPSIG(status) == SIGTRAP) {
- child_nr_tests = ptrace(PTRACE_PEEKDATA, child_pid,
- &nr_tests, 0);
- if (child_nr_tests == nr_tests)
- msg2 = "Ok";
- if (ptrace(PTRACE_POKEDATA, child_pid, &trapped, 1)) {
- perror("Can't poke\n");
- exit(-1);
- }
- }
-
- nr_tests++;
-
- printf("%s [%s]\n", msg, msg2);
-}
-
-static void launch_instruction_breakpoints(char *buf, int local, int global)
-{
- int i;
-
- for (i = 0; i < 4; i++) {
- set_breakpoint_addr(dummy_funcs[i], i);
- toggle_breakpoint(i, BP_X, 1, local, global, 1);
- ptrace(PTRACE_CONT, child_pid, NULL, 0);
- sprintf(buf, "Test breakpoint %d with local: %d global: %d",
- i, local, global);
- check_success(buf);
- toggle_breakpoint(i, BP_X, 1, local, global, 0);
- }
-}
-
-static void launch_watchpoints(char *buf, int mode, int len,
- int local, int global)
-{
- const char *mode_str;
- int i;
-
- if (mode == BP_W)
- mode_str = "write";
- else
- mode_str = "read";
-
- for (i = 0; i < 4; i++) {
- set_breakpoint_addr(&dummy_var[i], i);
- toggle_breakpoint(i, mode, len, local, global, 1);
- ptrace(PTRACE_CONT, child_pid, NULL, 0);
- sprintf(buf, "Test %s watchpoint %d with len: %d local: "
- "%d global: %d", mode_str, i, len, local, global);
- check_success(buf);
- toggle_breakpoint(i, mode, len, local, global, 0);
- }
-}
-
-/* Set the breakpoints and check the child successfully trigger them */
-static void launch_tests(void)
-{
- char buf[1024];
- int len, local, global, i;
-
- /* Instruction breakpoints */
- for (local = 0; local < 2; local++) {
- for (global = 0; global < 2; global++) {
- if (!local && !global)
- continue;
- launch_instruction_breakpoints(buf, local, global);
- }
- }
-
- /* Write watchpoint */
- for (len = 1; len <= sizeof(long); len <<= 1) {
- for (local = 0; local < 2; local++) {
- for (global = 0; global < 2; global++) {
- if (!local && !global)
- continue;
- launch_watchpoints(buf, BP_W, len,
- local, global);
- }
- }
- }
-
- /* Read-Write watchpoint */
- for (len = 1; len <= sizeof(long); len <<= 1) {
- for (local = 0; local < 2; local++) {
- for (global = 0; global < 2; global++) {
- if (!local && !global)
- continue;
- launch_watchpoints(buf, BP_RW, len,
- local, global);
- }
- }
- }
-
- /* Icebp traps */
- ptrace(PTRACE_CONT, child_pid, NULL, 0);
- check_success("Test icebp");
-
- /* Int 3 traps */
- ptrace(PTRACE_CONT, child_pid, NULL, 0);
- check_success("Test int 3 trap");
-
- ptrace(PTRACE_CONT, child_pid, NULL, 0);
-}
-
-int main(int argc, char **argv)
-{
- pid_t pid;
- int ret;
-
- pid = fork();
- if (!pid) {
- trigger_tests();
- return 0;
- }
-
- child_pid = pid;
-
- wait(NULL);
-
- launch_tests();
-
- wait(NULL);
-
- return 0;
-}
diff --git a/cpu-hotplug/Makefile b/cpu-hotplug/Makefile
deleted file mode 100644
index 790c23a..0000000
--- a/cpu-hotplug/Makefile
+++ /dev/null
@@ -1,6 +0,0 @@
-all:
-
-run_tests:
- @/bin/bash ./on-off-test.sh || echo "cpu-hotplug selftests: [FAIL]"
-
-clean:
diff --git a/cpu-hotplug/on-off-test.sh b/cpu-hotplug/on-off-test.sh
deleted file mode 100644
index bdde7cf..0000000
--- a/cpu-hotplug/on-off-test.sh
+++ /dev/null
@@ -1,221 +0,0 @@
-#!/bin/bash
-
-SYSFS=
-
-prerequisite()
-{
- msg="skip all tests:"
-
- if [ $UID != 0 ]; then
- echo $msg must be run as root >&2
- exit 0
- fi
-
- SYSFS=`mount -t sysfs | head -1 | awk '{ print $3 }'`
-
- if [ ! -d "$SYSFS" ]; then
- echo $msg sysfs is not mounted >&2
- exit 0
- fi
-
- if ! ls $SYSFS/devices/system/cpu/cpu* > /dev/null 2>&1; then
- echo $msg cpu hotplug is not supported >&2
- exit 0
- fi
-}
-
-#
-# list all hot-pluggable CPUs
-#
-hotpluggable_cpus()
-{
- local state=${1:-.\*}
-
- for cpu in $SYSFS/devices/system/cpu/cpu*; do
- if [ -f $cpu/online ] && grep -q $state $cpu/online; then
- echo ${cpu##/*/cpu}
- fi
- done
-}
-
-hotplaggable_offline_cpus()
-{
- hotpluggable_cpus 0
-}
-
-hotpluggable_online_cpus()
-{
- hotpluggable_cpus 1
-}
-
-cpu_is_online()
-{
- grep -q 1 $SYSFS/devices/system/cpu/cpu$1/online
-}
-
-cpu_is_offline()
-{
- grep -q 0 $SYSFS/devices/system/cpu/cpu$1/online
-}
-
-online_cpu()
-{
- echo 1 > $SYSFS/devices/system/cpu/cpu$1/online
-}
-
-offline_cpu()
-{
- echo 0 > $SYSFS/devices/system/cpu/cpu$1/online
-}
-
-online_cpu_expect_success()
-{
- local cpu=$1
-
- if ! online_cpu $cpu; then
- echo $FUNCNAME $cpu: unexpected fail >&2
- elif ! cpu_is_online $cpu; then
- echo $FUNCNAME $cpu: unexpected offline >&2
- fi
-}
-
-online_cpu_expect_fail()
-{
- local cpu=$1
-
- if online_cpu $cpu 2> /dev/null; then
- echo $FUNCNAME $cpu: unexpected success >&2
- elif ! cpu_is_offline $cpu; then
- echo $FUNCNAME $cpu: unexpected online >&2
- fi
-}
-
-offline_cpu_expect_success()
-{
- local cpu=$1
-
- if ! offline_cpu $cpu; then
- echo $FUNCNAME $cpu: unexpected fail >&2
- elif ! cpu_is_offline $cpu; then
- echo $FUNCNAME $cpu: unexpected offline >&2
- fi
-}
-
-offline_cpu_expect_fail()
-{
- local cpu=$1
-
- if offline_cpu $cpu 2> /dev/null; then
- echo $FUNCNAME $cpu: unexpected success >&2
- elif ! cpu_is_online $cpu; then
- echo $FUNCNAME $cpu: unexpected offline >&2
- fi
-}
-
-error=-12
-priority=0
-
-while getopts e:hp: opt; do
- case $opt in
- e)
- error=$OPTARG
- ;;
- h)
- echo "Usage $0 [ -e errno ] [ -p notifier-priority ]"
- exit
- ;;
- p)
- priority=$OPTARG
- ;;
- esac
-done
-
-if ! [ "$error" -ge -4095 -a "$error" -lt 0 ]; then
- echo "error code must be -4095 <= errno < 0" >&2
- exit 1
-fi
-
-prerequisite
-
-#
-# Online all hot-pluggable CPUs
-#
-for cpu in `hotplaggable_offline_cpus`; do
- online_cpu_expect_success $cpu
-done
-
-#
-# Offline all hot-pluggable CPUs
-#
-for cpu in `hotpluggable_online_cpus`; do
- offline_cpu_expect_success $cpu
-done
-
-#
-# Online all hot-pluggable CPUs again
-#
-for cpu in `hotplaggable_offline_cpus`; do
- online_cpu_expect_success $cpu
-done
-
-#
-# Test with cpu notifier error injection
-#
-
-DEBUGFS=`mount -t debugfs | head -1 | awk '{ print $3 }'`
-NOTIFIER_ERR_INJECT_DIR=$DEBUGFS/notifier-error-inject/cpu
-
-prerequisite_extra()
-{
- msg="skip extra tests:"
-
- /sbin/modprobe -q -r cpu-notifier-error-inject
- /sbin/modprobe -q cpu-notifier-error-inject priority=$priority
-
- if [ ! -d "$DEBUGFS" ]; then
- echo $msg debugfs is not mounted >&2
- exit 0
- fi
-
- if [ ! -d $NOTIFIER_ERR_INJECT_DIR ]; then
- echo $msg cpu-notifier-error-inject module is not available >&2
- exit 0
- fi
-}
-
-prerequisite_extra
-
-#
-# Offline all hot-pluggable CPUs
-#
-echo 0 > $NOTIFIER_ERR_INJECT_DIR/actions/CPU_DOWN_PREPARE/error
-for cpu in `hotpluggable_online_cpus`; do
- offline_cpu_expect_success $cpu
-done
-
-#
-# Test CPU hot-add error handling (offline => online)
-#
-echo $error > $NOTIFIER_ERR_INJECT_DIR/actions/CPU_UP_PREPARE/error
-for cpu in `hotplaggable_offline_cpus`; do
- online_cpu_expect_fail $cpu
-done
-
-#
-# Online all hot-pluggable CPUs
-#
-echo 0 > $NOTIFIER_ERR_INJECT_DIR/actions/CPU_UP_PREPARE/error
-for cpu in `hotplaggable_offline_cpus`; do
- online_cpu_expect_success $cpu
-done
-
-#
-# Test CPU hot-remove error handling (online => offline)
-#
-echo $error > $NOTIFIER_ERR_INJECT_DIR/actions/CPU_DOWN_PREPARE/error
-for cpu in `hotpluggable_online_cpus`; do
- offline_cpu_expect_fail $cpu
-done
-
-echo 0 > $NOTIFIER_ERR_INJECT_DIR/actions/CPU_DOWN_PREPARE/error
-/sbin/modprobe -q -r cpu-notifier-error-inject
diff --git a/efivarfs/Makefile b/efivarfs/Makefile
deleted file mode 100644
index 29e8c6b..0000000
--- a/efivarfs/Makefile
+++ /dev/null
@@ -1,12 +0,0 @@
-CC = $(CROSS_COMPILE)gcc
-CFLAGS = -Wall
-
-test_objs = open-unlink create-read
-
-all: $(test_objs)
-
-run_tests: all
- @/bin/bash ./efivarfs.sh || echo "efivarfs selftests: [FAIL]"
-
-clean:
- rm -f $(test_objs)
diff --git a/efivarfs/create-read.c b/efivarfs/create-read.c
deleted file mode 100644
index 7feef18..0000000
--- a/efivarfs/create-read.c
+++ /dev/null
@@ -1,38 +0,0 @@
-#include <stdio.h>
-#include <stdint.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-#include <errno.h>
-#include <string.h>
-
-int main(int argc, char **argv)
-{
- const char *path;
- char buf[4];
- int fd, rc;
-
- if (argc < 2) {
- fprintf(stderr, "usage: %s <path>\n", argv[0]);
- return EXIT_FAILURE;
- }
-
- path = argv[1];
-
- /* create a test variable */
- fd = open(path, O_RDWR | O_CREAT, 0600);
- if (fd < 0) {
- perror("open(O_WRONLY)");
- return EXIT_FAILURE;
- }
-
- rc = read(fd, buf, sizeof(buf));
- if (rc != 0) {
- fprintf(stderr, "Reading a new var should return EOF\n");
- return EXIT_FAILURE;
- }
-
- return EXIT_SUCCESS;
-}
diff --git a/efivarfs/efivarfs.sh b/efivarfs/efivarfs.sh
deleted file mode 100644
index 77edcdc..0000000
--- a/efivarfs/efivarfs.sh
+++ /dev/null
@@ -1,198 +0,0 @@
-#!/bin/bash
-
-efivarfs_mount=/sys/firmware/efi/efivars
-test_guid=210be57c-9849-4fc7-a635-e6382d1aec27
-
-check_prereqs()
-{
- local msg="skip all tests:"
-
- if [ $UID != 0 ]; then
- echo $msg must be run as root >&2
- exit 0
- fi
-
- if ! grep -q "^\S\+ $efivarfs_mount efivarfs" /proc/mounts; then
- echo $msg efivarfs is not mounted on $efivarfs_mount >&2
- exit 0
- fi
-}
-
-run_test()
-{
- local test="$1"
-
- echo "--------------------"
- echo "running $test"
- echo "--------------------"
-
- if [ "$(type -t $test)" = 'function' ]; then
- ( $test )
- else
- ( ./$test )
- fi
-
- if [ $? -ne 0 ]; then
- echo " [FAIL]"
- rc=1
- else
- echo " [PASS]"
- fi
-}
-
-test_create()
-{
- local attrs='\x07\x00\x00\x00'
- local file=$efivarfs_mount/$FUNCNAME-$test_guid
-
- printf "$attrs\x00" > $file
-
- if [ ! -e $file ]; then
- echo "$file couldn't be created" >&2
- exit 1
- fi
-
- if [ $(stat -c %s $file) -ne 5 ]; then
- echo "$file has invalid size" >&2
- exit 1
- fi
-}
-
-test_create_empty()
-{
- local file=$efivarfs_mount/$FUNCNAME-$test_guid
-
- : > $file
-
- if [ ! -e $file ]; then
- echo "$file can not be created without writing" >&2
- exit 1
- fi
-}
-
-test_create_read()
-{
- local file=$efivarfs_mount/$FUNCNAME-$test_guid
- ./create-read $file
-}
-
-test_delete()
-{
- local attrs='\x07\x00\x00\x00'
- local file=$efivarfs_mount/$FUNCNAME-$test_guid
-
- printf "$attrs\x00" > $file
-
- if [ ! -e $file ]; then
- echo "$file couldn't be created" >&2
- exit 1
- fi
-
- rm $file
-
- if [ -e $file ]; then
- echo "$file couldn't be deleted" >&2
- exit 1
- fi
-
-}
-
-# test that we can remove a variable by issuing a write with only
-# attributes specified
-test_zero_size_delete()
-{
- local attrs='\x07\x00\x00\x00'
- local file=$efivarfs_mount/$FUNCNAME-$test_guid
-
- printf "$attrs\x00" > $file
-
- if [ ! -e $file ]; then
- echo "$file does not exist" >&2
- exit 1
- fi
-
- printf "$attrs" > $file
-
- if [ -e $file ]; then
- echo "$file should have been deleted" >&2
- exit 1
- fi
-}
-
-test_open_unlink()
-{
- local file=$efivarfs_mount/$FUNCNAME-$test_guid
- ./open-unlink $file
-}
-
-# test that we can create a range of filenames
-test_valid_filenames()
-{
- local attrs='\x07\x00\x00\x00'
- local ret=0
-
- local file_list="abc dump-type0-11-1-1362436005 1234 -"
- for f in $file_list; do
- local file=$efivarfs_mount/$f-$test_guid
-
- printf "$attrs\x00" > $file
-
- if [ ! -e $file ]; then
- echo "$file could not be created" >&2
- ret=1
- else
- rm $file
- fi
- done
-
- exit $ret
-}
-
-test_invalid_filenames()
-{
- local attrs='\x07\x00\x00\x00'
- local ret=0
-
- local file_list="
- -1234-1234-1234-123456789abc
- foo
- foo-bar
- -foo-
- foo-barbazba-foob-foob-foob-foobarbazfoo
- foo-------------------------------------
- -12345678-1234-1234-1234-123456789abc
- a-12345678=1234-1234-1234-123456789abc
- a-12345678-1234=1234-1234-123456789abc
- a-12345678-1234-1234=1234-123456789abc
- a-12345678-1234-1234-1234=123456789abc
- 1112345678-1234-1234-1234-123456789abc"
-
- for f in $file_list; do
- local file=$efivarfs_mount/$f
-
- printf "$attrs\x00" 2>/dev/null > $file
-
- if [ -e $file ]; then
- echo "Creating $file should have failed" >&2
- rm $file
- ret=1
- fi
- done
-
- exit $ret
-}
-
-check_prereqs
-
-rc=0
-
-run_test test_create
-run_test test_create_empty
-run_test test_create_read
-run_test test_delete
-run_test test_zero_size_delete
-run_test test_open_unlink
-run_test test_valid_filenames
-run_test test_invalid_filenames
-
-exit $rc
diff --git a/efivarfs/open-unlink.c b/efivarfs/open-unlink.c
deleted file mode 100644
index 8c07644..0000000
--- a/efivarfs/open-unlink.c
+++ /dev/null
@@ -1,63 +0,0 @@
-#include <stdio.h>
-#include <stdint.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-
-int main(int argc, char **argv)
-{
- const char *path;
- char buf[5];
- int fd, rc;
-
- if (argc < 2) {
- fprintf(stderr, "usage: %s <path>\n", argv[0]);
- return EXIT_FAILURE;
- }
-
- path = argv[1];
-
- /* attributes: EFI_VARIABLE_NON_VOLATILE |
- * EFI_VARIABLE_BOOTSERVICE_ACCESS |
- * EFI_VARIABLE_RUNTIME_ACCESS
- */
- *(uint32_t *)buf = 0x7;
- buf[4] = 0;
-
- /* create a test variable */
- fd = open(path, O_WRONLY | O_CREAT);
- if (fd < 0) {
- perror("open(O_WRONLY)");
- return EXIT_FAILURE;
- }
-
- rc = write(fd, buf, sizeof(buf));
- if (rc != sizeof(buf)) {
- perror("write");
- return EXIT_FAILURE;
- }
-
- close(fd);
-
- fd = open(path, O_RDONLY);
- if (fd < 0) {
- perror("open");
- return EXIT_FAILURE;
- }
-
- if (unlink(path) < 0) {
- perror("unlink");
- return EXIT_FAILURE;
- }
-
- rc = read(fd, buf, sizeof(buf));
- if (rc > 0) {
- fprintf(stderr, "reading from an unlinked variable "
- "shouldn't be possible\n");
- return EXIT_FAILURE;
- }
-
- return EXIT_SUCCESS;
-}
diff --git a/ipc/Makefile b/ipc/Makefile
deleted file mode 100644
index 5386fd7..0000000
--- a/ipc/Makefile
+++ /dev/null
@@ -1,25 +0,0 @@
-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../../../../usr/include/
-
-all:
-ifeq ($(ARCH),X86)
- gcc $(CFLAGS) msgque.c -o msgque_test
-else
- echo "Not an x86 target, can't build msgque selftest"
-endif
-
-run_tests: all
- ./msgque_test
-
-clean:
- rm -fr ./msgque_test
diff --git a/ipc/msgque.c b/ipc/msgque.c
deleted file mode 100644
index 552f081..0000000
--- a/ipc/msgque.c
+++ /dev/null
@@ -1,252 +0,0 @@
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <errno.h>
-#include <linux/msg.h>
-#include <fcntl.h>
-
-#define MAX_MSG_SIZE 32
-
-struct msg1 {
- int msize;
- long mtype;
- char mtext[MAX_MSG_SIZE];
-};
-
-#define TEST_STRING "Test sysv5 msg"
-#define MSG_TYPE 1
-
-#define ANOTHER_TEST_STRING "Yet another test sysv5 msg"
-#define ANOTHER_MSG_TYPE 26538
-
-struct msgque_data {
- key_t key;
- int msq_id;
- int qbytes;
- int qnum;
- int mode;
- struct msg1 *messages;
-};
-
-int restore_queue(struct msgque_data *msgque)
-{
- int fd, ret, id, i;
- char buf[32];
-
- fd = open("/proc/sys/kernel/msg_next_id", O_WRONLY);
- if (fd == -1) {
- printf("Failed to open /proc/sys/kernel/msg_next_id\n");
- return -errno;
- }
- sprintf(buf, "%d", msgque->msq_id);
-
- ret = write(fd, buf, strlen(buf));
- if (ret != strlen(buf)) {
- printf("Failed to write to /proc/sys/kernel/msg_next_id\n");
- return -errno;
- }
-
- id = msgget(msgque->key, msgque->mode | IPC_CREAT | IPC_EXCL);
- if (id == -1) {
- printf("Failed to create queue\n");
- return -errno;
- }
-
- if (id != msgque->msq_id) {
- printf("Restored queue has wrong id (%d instead of %d)\n",
- id, msgque->msq_id);
- ret = -EFAULT;
- goto destroy;
- }
-
- for (i = 0; i < msgque->qnum; i++) {
- if (msgsnd(msgque->msq_id, &msgque->messages[i].mtype,
- msgque->messages[i].msize, IPC_NOWAIT) != 0) {
- printf("msgsnd failed (%m)\n");
- ret = -errno;
- goto destroy;
- };
- }
- return 0;
-
-destroy:
- if (msgctl(id, IPC_RMID, 0))
- printf("Failed to destroy queue: %d\n", -errno);
- return ret;
-}
-
-int check_and_destroy_queue(struct msgque_data *msgque)
-{
- struct msg1 message;
- int cnt = 0, ret;
-
- while (1) {
- ret = msgrcv(msgque->msq_id, &message.mtype, MAX_MSG_SIZE,
- 0, IPC_NOWAIT);
- if (ret < 0) {
- if (errno == ENOMSG)
- break;
- printf("Failed to read IPC message: %m\n");
- ret = -errno;
- goto err;
- }
- if (ret != msgque->messages[cnt].msize) {
- printf("Wrong message size: %d (expected %d)\n", ret,
- msgque->messages[cnt].msize);
- ret = -EINVAL;
- goto err;
- }
- if (message.mtype != msgque->messages[cnt].mtype) {
- printf("Wrong message type\n");
- ret = -EINVAL;
- goto err;
- }
- if (memcmp(message.mtext, msgque->messages[cnt].mtext, ret)) {
- printf("Wrong message content\n");
- ret = -EINVAL;
- goto err;
- }
- cnt++;
- }
-
- if (cnt != msgque->qnum) {
- printf("Wrong message number\n");
- ret = -EINVAL;
- goto err;
- }
-
- ret = 0;
-err:
- if (msgctl(msgque->msq_id, IPC_RMID, 0)) {
- printf("Failed to destroy queue: %d\n", -errno);
- return -errno;
- }
- return ret;
-}
-
-int dump_queue(struct msgque_data *msgque)
-{
- struct msqid64_ds ds;
- int kern_id;
- int i, ret;
-
- for (kern_id = 0; kern_id < 256; kern_id++) {
- ret = msgctl(kern_id, MSG_STAT, &ds);
- if (ret < 0) {
- if (errno == -EINVAL)
- continue;
- printf("Failed to get stats for IPC queue with id %d\n",
- kern_id);
- return -errno;
- }
-
- if (ret == msgque->msq_id)
- break;
- }
-
- msgque->messages = malloc(sizeof(struct msg1) * ds.msg_qnum);
- if (msgque->messages == NULL) {
- printf("Failed to get stats for IPC queue\n");
- return -ENOMEM;
- }
-
- msgque->qnum = ds.msg_qnum;
- msgque->mode = ds.msg_perm.mode;
- msgque->qbytes = ds.msg_qbytes;
-
- for (i = 0; i < msgque->qnum; i++) {
- ret = msgrcv(msgque->msq_id, &msgque->messages[i].mtype,
- MAX_MSG_SIZE, i, IPC_NOWAIT | MSG_COPY);
- if (ret < 0) {
- printf("Failed to copy IPC message: %m (%d)\n", errno);
- return -errno;
- }
- msgque->messages[i].msize = ret;
- }
- return 0;
-}
-
-int fill_msgque(struct msgque_data *msgque)
-{
- struct msg1 msgbuf;
-
- msgbuf.mtype = MSG_TYPE;
- memcpy(msgbuf.mtext, TEST_STRING, sizeof(TEST_STRING));
- if (msgsnd(msgque->msq_id, &msgbuf.mtype, sizeof(TEST_STRING),
- IPC_NOWAIT) != 0) {
- printf("First message send failed (%m)\n");
- return -errno;
- };
-
- msgbuf.mtype = ANOTHER_MSG_TYPE;
- memcpy(msgbuf.mtext, ANOTHER_TEST_STRING, sizeof(ANOTHER_TEST_STRING));
- if (msgsnd(msgque->msq_id, &msgbuf.mtype, sizeof(ANOTHER_TEST_STRING),
- IPC_NOWAIT) != 0) {
- printf("Second message send failed (%m)\n");
- return -errno;
- };
- return 0;
-}
-
-int main(int argc, char **argv)
-{
- int msg, pid, err;
- struct msgque_data msgque;
-
- if (getuid() != 0) {
- printf("Please run the test as root - Exiting.\n");
- exit(1);
- }
-
- msgque.key = ftok(argv[0], 822155650);
- if (msgque.key == -1) {
- 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\n");
- goto err_out;
- }
-
- err = fill_msgque(&msgque);
- if (err) {
- printf("Failed to fill queue\n");
- goto err_destroy;
- }
-
- err = dump_queue(&msgque);
- if (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\n");
- goto err_out;
- }
-
- err = restore_queue(&msgque);
- if (err) {
- printf("Failed to restore queue\n");
- goto err_destroy;
- }
-
- err = check_and_destroy_queue(&msgque);
- if (err) {
- printf("Failed to test queue\n");
- goto err_out;
- }
- return 0;
-
-err_destroy:
- if (msgctl(msgque.msq_id, IPC_RMID, 0)) {
- printf("Failed to destroy queue: %d\n", -errno);
- return -errno;
- }
-err_out:
- return err;
-}
diff --git a/kcmp/.gitignore b/kcmp/.gitignore
deleted file mode 100644
index 5a9b373..0000000
--- a/kcmp/.gitignore
+++ /dev/null
@@ -1,2 +0,0 @@
-kcmp_test
-kcmp-test-file
diff --git a/kcmp/Makefile b/kcmp/Makefile
deleted file mode 100644
index d7d6bbe..0000000
--- a/kcmp/Makefile
+++ /dev/null
@@ -1,28 +0,0 @@
-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:
-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]"
-
-clean:
- $(RM) kcmp_test kcmp-test-file
diff --git a/kcmp/kcmp_test.c b/kcmp/kcmp_test.c
deleted file mode 100644
index fa4f1b3..0000000
--- a/kcmp/kcmp_test.c
+++ /dev/null
@@ -1,96 +0,0 @@
-#define _GNU_SOURCE
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <signal.h>
-#include <limits.h>
-#include <unistd.h>
-#include <errno.h>
-#include <string.h>
-#include <fcntl.h>
-
-#include <linux/unistd.h>
-#include <linux/kcmp.h>
-
-#include <sys/syscall.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <sys/wait.h>
-
-static long sys_kcmp(int pid1, int pid2, int type, int fd1, int fd2)
-{
- return syscall(__NR_kcmp, pid1, pid2, type, fd1, fd2);
-}
-
-int main(int argc, char **argv)
-{
- const char kpath[] = "kcmp-test-file";
- int pid1, pid2;
- int fd1, fd2;
- int status;
-
- fd1 = open(kpath, O_RDWR | O_CREAT | O_TRUNC, 0644);
- pid1 = getpid();
-
- if (fd1 < 0) {
- perror("Can't create file");
- exit(1);
- }
-
- pid2 = fork();
- if (pid2 < 0) {
- perror("fork failed");
- exit(1);
- }
-
- if (!pid2) {
- int pid2 = getpid();
- int ret;
-
- fd2 = open(kpath, O_RDWR, 0644);
- if (fd2 < 0) {
- perror("Can't open file");
- exit(1);
- }
-
- /* An example of output and arguments */
- printf("pid1: %6d pid2: %6d FD: %2ld FILES: %2ld VM: %2ld "
- "FS: %2ld SIGHAND: %2ld IO: %2ld SYSVSEM: %2ld "
- "INV: %2ld\n",
- pid1, pid2,
- sys_kcmp(pid1, pid2, KCMP_FILE, fd1, fd2),
- sys_kcmp(pid1, pid2, KCMP_FILES, 0, 0),
- sys_kcmp(pid1, pid2, KCMP_VM, 0, 0),
- sys_kcmp(pid1, pid2, KCMP_FS, 0, 0),
- sys_kcmp(pid1, pid2, KCMP_SIGHAND, 0, 0),
- sys_kcmp(pid1, pid2, KCMP_IO, 0, 0),
- sys_kcmp(pid1, pid2, KCMP_SYSVSEM, 0, 0),
-
- /* This one should fail */
- sys_kcmp(pid1, pid2, KCMP_TYPES + 1, 0, 0));
-
- /* This one should return same fd */
- ret = sys_kcmp(pid1, pid2, KCMP_FILE, fd1, fd1);
- if (ret) {
- printf("FAIL: 0 expected but %d returned (%s)\n",
- ret, strerror(errno));
- ret = -1;
- } else
- printf("PASS: 0 returned as expected\n");
-
- /* Compare with self */
- ret = sys_kcmp(pid1, pid1, KCMP_VM, 0, 0);
- if (ret) {
- printf("FAIL: 0 expected but %li returned (%s)\n",
- ret, strerror(errno));
- ret = -1;
- } else
- printf("PASS: 0 returned as expected\n");
-
- exit(ret);
- }
-
- waitpid(pid2, &status, P_ALL);
-
- return 0;
-}
diff --git a/memory-hotplug/Makefile b/memory-hotplug/Makefile
deleted file mode 100644
index 058c76f..0000000
--- a/memory-hotplug/Makefile
+++ /dev/null
@@ -1,6 +0,0 @@
-all:
-
-run_tests:
- @/bin/bash ./on-off-test.sh || echo "memory-hotplug selftests: [FAIL]"
-
-clean:
diff --git a/memory-hotplug/on-off-test.sh b/memory-hotplug/on-off-test.sh
deleted file mode 100644
index a2816f6..0000000
--- a/memory-hotplug/on-off-test.sh
+++ /dev/null
@@ -1,230 +0,0 @@
-#!/bin/bash
-
-SYSFS=
-
-prerequisite()
-{
- msg="skip all tests:"
-
- if [ $UID != 0 ]; then
- echo $msg must be run as root >&2
- exit 0
- fi
-
- SYSFS=`mount -t sysfs | head -1 | awk '{ print $3 }'`
-
- if [ ! -d "$SYSFS" ]; then
- echo $msg sysfs is not mounted >&2
- exit 0
- fi
-
- if ! ls $SYSFS/devices/system/memory/memory* > /dev/null 2>&1; then
- echo $msg memory hotplug is not supported >&2
- exit 0
- fi
-}
-
-#
-# list all hot-pluggable memory
-#
-hotpluggable_memory()
-{
- local state=${1:-.\*}
-
- for memory in $SYSFS/devices/system/memory/memory*; do
- if grep -q 1 $memory/removable &&
- grep -q $state $memory/state; then
- echo ${memory##/*/memory}
- fi
- done
-}
-
-hotplaggable_offline_memory()
-{
- hotpluggable_memory offline
-}
-
-hotpluggable_online_memory()
-{
- hotpluggable_memory online
-}
-
-memory_is_online()
-{
- grep -q online $SYSFS/devices/system/memory/memory$1/state
-}
-
-memory_is_offline()
-{
- grep -q offline $SYSFS/devices/system/memory/memory$1/state
-}
-
-online_memory()
-{
- echo online > $SYSFS/devices/system/memory/memory$1/state
-}
-
-offline_memory()
-{
- echo offline > $SYSFS/devices/system/memory/memory$1/state
-}
-
-online_memory_expect_success()
-{
- local memory=$1
-
- if ! online_memory $memory; then
- echo $FUNCNAME $memory: unexpected fail >&2
- elif ! memory_is_online $memory; then
- echo $FUNCNAME $memory: unexpected offline >&2
- fi
-}
-
-online_memory_expect_fail()
-{
- local memory=$1
-
- if online_memory $memory 2> /dev/null; then
- echo $FUNCNAME $memory: unexpected success >&2
- elif ! memory_is_offline $memory; then
- echo $FUNCNAME $memory: unexpected online >&2
- fi
-}
-
-offline_memory_expect_success()
-{
- local memory=$1
-
- if ! offline_memory $memory; then
- echo $FUNCNAME $memory: unexpected fail >&2
- elif ! memory_is_offline $memory; then
- echo $FUNCNAME $memory: unexpected offline >&2
- fi
-}
-
-offline_memory_expect_fail()
-{
- local memory=$1
-
- if offline_memory $memory 2> /dev/null; then
- echo $FUNCNAME $memory: unexpected success >&2
- elif ! memory_is_online $memory; then
- echo $FUNCNAME $memory: unexpected offline >&2
- fi
-}
-
-error=-12
-priority=0
-ratio=10
-
-while getopts e:hp:r: opt; do
- case $opt in
- e)
- error=$OPTARG
- ;;
- h)
- echo "Usage $0 [ -e errno ] [ -p notifier-priority ] [ -r percent-of-memory-to-offline ]"
- exit
- ;;
- p)
- priority=$OPTARG
- ;;
- r)
- ratio=$OPTARG
- ;;
- esac
-done
-
-if ! [ "$error" -ge -4095 -a "$error" -lt 0 ]; then
- echo "error code must be -4095 <= errno < 0" >&2
- exit 1
-fi
-
-prerequisite
-
-#
-# Online all hot-pluggable memory
-#
-for memory in `hotplaggable_offline_memory`; do
- online_memory_expect_success $memory
-done
-
-#
-# Offline $ratio percent of hot-pluggable memory
-#
-for memory in `hotpluggable_online_memory`; do
- if [ $((RANDOM % 100)) -lt $ratio ]; then
- offline_memory_expect_success $memory
- fi
-done
-
-#
-# Online all hot-pluggable memory again
-#
-for memory in `hotplaggable_offline_memory`; do
- online_memory_expect_success $memory
-done
-
-#
-# Test with memory notifier error injection
-#
-
-DEBUGFS=`mount -t debugfs | head -1 | awk '{ print $3 }'`
-NOTIFIER_ERR_INJECT_DIR=$DEBUGFS/notifier-error-inject/memory
-
-prerequisite_extra()
-{
- msg="skip extra tests:"
-
- /sbin/modprobe -q -r memory-notifier-error-inject
- /sbin/modprobe -q memory-notifier-error-inject priority=$priority
-
- if [ ! -d "$DEBUGFS" ]; then
- echo $msg debugfs is not mounted >&2
- exit 0
- fi
-
- if [ ! -d $NOTIFIER_ERR_INJECT_DIR ]; then
- echo $msg memory-notifier-error-inject module is not available >&2
- exit 0
- fi
-}
-
-prerequisite_extra
-
-#
-# Offline $ratio percent of hot-pluggable memory
-#
-echo 0 > $NOTIFIER_ERR_INJECT_DIR/actions/MEM_GOING_OFFLINE/error
-for memory in `hotpluggable_online_memory`; do
- if [ $((RANDOM % 100)) -lt $ratio ]; then
- offline_memory_expect_success $memory
- fi
-done
-
-#
-# Test memory hot-add error handling (offline => online)
-#
-echo $error > $NOTIFIER_ERR_INJECT_DIR/actions/MEM_GOING_ONLINE/error
-for memory in `hotplaggable_offline_memory`; do
- online_memory_expect_fail $memory
-done
-
-#
-# Online all hot-pluggable memory
-#
-echo 0 > $NOTIFIER_ERR_INJECT_DIR/actions/MEM_GOING_ONLINE/error
-for memory in `hotplaggable_offline_memory`; do
- online_memory_expect_success $memory
-done
-
-#
-# Test memory hot-remove error handling (online => offline)
-#
-echo $error > $NOTIFIER_ERR_INJECT_DIR/actions/MEM_GOING_OFFLINE/error
-for memory in `hotpluggable_online_memory`; do
- offline_memory_expect_fail $memory
-done
-
-echo 0 > $NOTIFIER_ERR_INJECT_DIR/actions/MEM_GOING_OFFLINE/error
-/sbin/modprobe -q -r memory-notifier-error-inject
diff --git a/mqueue/.gitignore b/mqueue/.gitignore
deleted file mode 100644
index d8d4237..0000000
--- a/mqueue/.gitignore
+++ /dev/null
@@ -1,2 +0,0 @@
-mq_open_tests
-mq_perf_tests
diff --git a/mqueue/Makefile b/mqueue/Makefile
deleted file mode 100644
index 218a122..0000000
--- a/mqueue/Makefile
+++ /dev/null
@@ -1,10 +0,0 @@
-all:
- gcc -O2 -lrt mq_open_tests.c -o mq_open_tests
- gcc -O2 -lrt -lpthread -lpopt -o mq_perf_tests mq_perf_tests.c
-
-run_tests:
- @./mq_open_tests /test1 || echo "mq_open_tests: [FAIL]"
- @./mq_perf_tests || echo "mq_perf_tests: [FAIL]"
-
-clean:
- rm -f mq_open_tests mq_perf_tests
diff --git a/mqueue/mq_open_tests.c b/mqueue/mq_open_tests.c
deleted file mode 100644
index 711cc29..0000000
--- a/mqueue/mq_open_tests.c
+++ /dev/null
@@ -1,492 +0,0 @@
-/*
- * This application is Copyright 2012 Red Hat, Inc.
- * Doug Ledford <dledford@redhat.com>
- *
- * mq_open_tests is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, version 3.
- *
- * mq_open_tests 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.
- *
- * For the full text of the license, see <http://www.gnu.org/licenses/>.
- *
- * mq_open_tests.c
- * Tests the various situations that should either succeed or fail to
- * open a posix message queue and then reports whether or not they
- * did as they were supposed to.
- *
- */
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <fcntl.h>
-#include <string.h>
-#include <limits.h>
-#include <errno.h>
-#include <sys/types.h>
-#include <sys/time.h>
-#include <sys/resource.h>
-#include <sys/stat.h>
-#include <mqueue.h>
-
-static char *usage =
-"Usage:\n"
-" %s path\n"
-"\n"
-" path Path name of the message queue to create\n"
-"\n"
-" Note: this program must be run as root in order to enable all tests\n"
-"\n";
-
-char *DEF_MSGS = "/proc/sys/fs/mqueue/msg_default";
-char *DEF_MSGSIZE = "/proc/sys/fs/mqueue/msgsize_default";
-char *MAX_MSGS = "/proc/sys/fs/mqueue/msg_max";
-char *MAX_MSGSIZE = "/proc/sys/fs/mqueue/msgsize_max";
-
-int default_settings;
-struct rlimit saved_limits, cur_limits;
-int saved_def_msgs, saved_def_msgsize, saved_max_msgs, saved_max_msgsize;
-int cur_def_msgs, cur_def_msgsize, cur_max_msgs, cur_max_msgsize;
-FILE *def_msgs, *def_msgsize, *max_msgs, *max_msgsize;
-char *queue_path;
-mqd_t queue = -1;
-
-static inline void __set(FILE *stream, int value, char *err_msg);
-void shutdown(int exit_val, char *err_cause, int line_no);
-static inline int get(FILE *stream);
-static inline void set(FILE *stream, int value);
-static inline void getr(int type, struct rlimit *rlim);
-static inline void setr(int type, struct rlimit *rlim);
-void validate_current_settings();
-static inline void test_queue(struct mq_attr *attr, struct mq_attr *result);
-static inline int test_queue_fail(struct mq_attr *attr, struct mq_attr *result);
-
-static inline void __set(FILE *stream, int value, char *err_msg)
-{
- rewind(stream);
- if (fprintf(stream, "%d", value) < 0)
- perror(err_msg);
-}
-
-
-void shutdown(int exit_val, char *err_cause, int line_no)
-{
- static int in_shutdown = 0;
-
- /* In case we get called recursively by a set() call below */
- if (in_shutdown++)
- return;
-
- seteuid(0);
-
- if (queue != -1)
- if (mq_close(queue))
- perror("mq_close() during shutdown");
- if (queue_path)
- /*
- * Be silent if this fails, if we cleaned up already it's
- * expected to fail
- */
- mq_unlink(queue_path);
- if (default_settings) {
- if (saved_def_msgs)
- __set(def_msgs, saved_def_msgs,
- "failed to restore saved_def_msgs");
- if (saved_def_msgsize)
- __set(def_msgsize, saved_def_msgsize,
- "failed to restore saved_def_msgsize");
- }
- if (saved_max_msgs)
- __set(max_msgs, saved_max_msgs,
- "failed to restore saved_max_msgs");
- if (saved_max_msgsize)
- __set(max_msgsize, saved_max_msgsize,
- "failed to restore saved_max_msgsize");
- if (exit_val)
- error(exit_val, errno, "%s at %d", err_cause, line_no);
- exit(0);
-}
-
-static inline int get(FILE *stream)
-{
- int value;
- rewind(stream);
- if (fscanf(stream, "%d", &value) != 1)
- shutdown(4, "Error reading /proc entry", __LINE__ - 1);
- return value;
-}
-
-static inline void set(FILE *stream, int value)
-{
- int new_value;
-
- rewind(stream);
- if (fprintf(stream, "%d", value) < 0)
- return shutdown(5, "Failed writing to /proc file",
- __LINE__ - 1);
- new_value = get(stream);
- if (new_value != value)
- return shutdown(5, "We didn't get what we wrote to /proc back",
- __LINE__ - 1);
-}
-
-static inline void getr(int type, struct rlimit *rlim)
-{
- if (getrlimit(type, rlim))
- shutdown(6, "getrlimit()", __LINE__ - 1);
-}
-
-static inline void setr(int type, struct rlimit *rlim)
-{
- if (setrlimit(type, rlim))
- shutdown(7, "setrlimit()", __LINE__ - 1);
-}
-
-void validate_current_settings()
-{
- int rlim_needed;
-
- if (cur_limits.rlim_cur < 4096) {
- printf("Current rlimit value for POSIX message queue bytes is "
- "unreasonably low,\nincreasing.\n\n");
- cur_limits.rlim_cur = 8192;
- cur_limits.rlim_max = 16384;
- setr(RLIMIT_MSGQUEUE, &cur_limits);
- }
-
- if (default_settings) {
- rlim_needed = (cur_def_msgs + 1) * (cur_def_msgsize + 1 +
- 2 * sizeof(void *));
- if (rlim_needed > cur_limits.rlim_cur) {
- printf("Temporarily lowering default queue parameters "
- "to something that will work\n"
- "with the current rlimit values.\n\n");
- set(def_msgs, 10);
- cur_def_msgs = 10;
- set(def_msgsize, 128);
- cur_def_msgsize = 128;
- }
- } else {
- rlim_needed = (cur_max_msgs + 1) * (cur_max_msgsize + 1 +
- 2 * sizeof(void *));
- if (rlim_needed > cur_limits.rlim_cur) {
- printf("Temporarily lowering maximum queue parameters "
- "to something that will work\n"
- "with the current rlimit values in case this is "
- "a kernel that ties the default\n"
- "queue parameters to the maximum queue "
- "parameters.\n\n");
- set(max_msgs, 10);
- cur_max_msgs = 10;
- set(max_msgsize, 128);
- cur_max_msgsize = 128;
- }
- }
-}
-
-/*
- * test_queue - Test opening a queue, shutdown if we fail. This should
- * only be called in situations that should never fail. We clean up
- * after ourselves and return the queue attributes in *result.
- */
-static inline void test_queue(struct mq_attr *attr, struct mq_attr *result)
-{
- int flags = O_RDWR | O_EXCL | O_CREAT;
- int perms = DEFFILEMODE;
-
- if ((queue = mq_open(queue_path, flags, perms, attr)) == -1)
- shutdown(1, "mq_open()", __LINE__);
- if (mq_getattr(queue, result))
- shutdown(1, "mq_getattr()", __LINE__);
- if (mq_close(queue))
- shutdown(1, "mq_close()", __LINE__);
- queue = -1;
- if (mq_unlink(queue_path))
- shutdown(1, "mq_unlink()", __LINE__);
-}
-
-/*
- * Same as test_queue above, but failure is not fatal.
- * Returns:
- * 0 - Failed to create a queue
- * 1 - Created a queue, attributes in *result
- */
-static inline int test_queue_fail(struct mq_attr *attr, struct mq_attr *result)
-{
- int flags = O_RDWR | O_EXCL | O_CREAT;
- int perms = DEFFILEMODE;
-
- if ((queue = mq_open(queue_path, flags, perms, attr)) == -1)
- return 0;
- if (mq_getattr(queue, result))
- shutdown(1, "mq_getattr()", __LINE__);
- if (mq_close(queue))
- shutdown(1, "mq_close()", __LINE__);
- queue = -1;
- if (mq_unlink(queue_path))
- shutdown(1, "mq_unlink()", __LINE__);
- return 1;
-}
-
-int main(int argc, char *argv[])
-{
- struct mq_attr attr, result;
-
- if (argc != 2) {
- fprintf(stderr, "Must pass a valid queue name\n\n");
- fprintf(stderr, usage, argv[0]);
- exit(1);
- }
-
- /*
- * Although we can create a msg queue with a non-absolute path name,
- * unlink will fail. So, if the name doesn't start with a /, add one
- * when we save it.
- */
- if (*argv[1] == '/')
- queue_path = strdup(argv[1]);
- else {
- queue_path = malloc(strlen(argv[1]) + 2);
- if (!queue_path) {
- perror("malloc()");
- exit(1);
- }
- queue_path[0] = '/';
- queue_path[1] = 0;
- strcat(queue_path, argv[1]);
- }
-
- if (getuid() != 0) {
- fprintf(stderr, "Not running as root, but almost all tests "
- "require root in order to modify\nsystem settings. "
- "Exiting.\n");
- exit(1);
- }
-
- /* Find out what files there are for us to make tweaks in */
- def_msgs = fopen(DEF_MSGS, "r+");
- def_msgsize = fopen(DEF_MSGSIZE, "r+");
- max_msgs = fopen(MAX_MSGS, "r+");
- max_msgsize = fopen(MAX_MSGSIZE, "r+");
-
- if (!max_msgs)
- shutdown(2, "Failed to open msg_max", __LINE__);
- if (!max_msgsize)
- shutdown(2, "Failed to open msgsize_max", __LINE__);
- if (def_msgs || def_msgsize)
- default_settings = 1;
-
- /* Load up the current system values for everything we can */
- getr(RLIMIT_MSGQUEUE, &saved_limits);
- cur_limits = saved_limits;
- if (default_settings) {
- saved_def_msgs = cur_def_msgs = get(def_msgs);
- saved_def_msgsize = cur_def_msgsize = get(def_msgsize);
- }
- saved_max_msgs = cur_max_msgs = get(max_msgs);
- saved_max_msgsize = cur_max_msgsize = get(max_msgsize);
-
- /* Tell the user our initial state */
- printf("\nInitial system state:\n");
- printf("\tUsing queue path:\t\t%s\n", queue_path);
- printf("\tRLIMIT_MSGQUEUE(soft):\t\t%d\n", saved_limits.rlim_cur);
- printf("\tRLIMIT_MSGQUEUE(hard):\t\t%d\n", saved_limits.rlim_max);
- printf("\tMaximum Message Size:\t\t%d\n", saved_max_msgsize);
- printf("\tMaximum Queue Size:\t\t%d\n", saved_max_msgs);
- if (default_settings) {
- printf("\tDefault Message Size:\t\t%d\n", saved_def_msgsize);
- printf("\tDefault Queue Size:\t\t%d\n", saved_def_msgs);
- } else {
- printf("\tDefault Message Size:\t\tNot Supported\n");
- printf("\tDefault Queue Size:\t\tNot Supported\n");
- }
- printf("\n");
-
- validate_current_settings();
-
- printf("Adjusted system state for testing:\n");
- printf("\tRLIMIT_MSGQUEUE(soft):\t\t%d\n", cur_limits.rlim_cur);
- printf("\tRLIMIT_MSGQUEUE(hard):\t\t%d\n", cur_limits.rlim_max);
- printf("\tMaximum Message Size:\t\t%d\n", cur_max_msgsize);
- printf("\tMaximum Queue Size:\t\t%d\n", cur_max_msgs);
- if (default_settings) {
- printf("\tDefault Message Size:\t\t%d\n", cur_def_msgsize);
- printf("\tDefault Queue Size:\t\t%d\n", cur_def_msgs);
- }
-
- printf("\n\nTest series 1, behavior when no attr struct "
- "passed to mq_open:\n");
- if (!default_settings) {
- test_queue(NULL, &result);
- printf("Given sane system settings, mq_open without an attr "
- "struct succeeds:\tPASS\n");
- if (result.mq_maxmsg != cur_max_msgs ||
- result.mq_msgsize != cur_max_msgsize) {
- printf("Kernel does not support setting the default "
- "mq attributes,\nbut also doesn't tie the "
- "defaults to the maximums:\t\t\tPASS\n");
- } else {
- set(max_msgs, ++cur_max_msgs);
- set(max_msgsize, ++cur_max_msgsize);
- test_queue(NULL, &result);
- if (result.mq_maxmsg == cur_max_msgs &&
- result.mq_msgsize == cur_max_msgsize)
- printf("Kernel does not support setting the "
- "default mq attributes and\n"
- "also ties system wide defaults to "
- "the system wide maximums:\t\t"
- "FAIL\n");
- else
- printf("Kernel does not support setting the "
- "default mq attributes,\n"
- "but also doesn't tie the defaults to "
- "the maximums:\t\t\tPASS\n");
- }
- } else {
- printf("Kernel supports setting defaults separately from "
- "maximums:\t\tPASS\n");
- /*
- * While we are here, go ahead and test that the kernel
- * properly follows the default settings
- */
- test_queue(NULL, &result);
- printf("Given sane values, mq_open without an attr struct "
- "succeeds:\t\tPASS\n");
- if (result.mq_maxmsg != cur_def_msgs ||
- result.mq_msgsize != cur_def_msgsize)
- printf("Kernel supports setting defaults, but does "
- "not actually honor them:\tFAIL\n\n");
- else {
- set(def_msgs, ++cur_def_msgs);
- set(def_msgsize, ++cur_def_msgsize);
- /* In case max was the same as the default */
- set(max_msgs, ++cur_max_msgs);
- set(max_msgsize, ++cur_max_msgsize);
- test_queue(NULL, &result);
- if (result.mq_maxmsg != cur_def_msgs ||
- result.mq_msgsize != cur_def_msgsize)
- printf("Kernel supports setting defaults, but "
- "does not actually honor them:\t"
- "FAIL\n");
- else
- printf("Kernel properly honors default setting "
- "knobs:\t\t\t\tPASS\n");
- }
- set(def_msgs, cur_max_msgs + 1);
- cur_def_msgs = cur_max_msgs + 1;
- set(def_msgsize, cur_max_msgsize + 1);
- cur_def_msgsize = cur_max_msgsize + 1;
- if (cur_def_msgs * (cur_def_msgsize + 2 * sizeof(void *)) >=
- cur_limits.rlim_cur) {
- cur_limits.rlim_cur = (cur_def_msgs + 2) *
- (cur_def_msgsize + 2 * sizeof(void *));
- cur_limits.rlim_max = 2 * cur_limits.rlim_cur;
- setr(RLIMIT_MSGQUEUE, &cur_limits);
- }
- if (test_queue_fail(NULL, &result)) {
- if (result.mq_maxmsg == cur_max_msgs &&
- result.mq_msgsize == cur_max_msgsize)
- printf("Kernel properly limits default values "
- "to lesser of default/max:\t\tPASS\n");
- else
- printf("Kernel does not properly set default "
- "queue parameters when\ndefaults > "
- "max:\t\t\t\t\t\t\t\tFAIL\n");
- } else
- printf("Kernel fails to open mq because defaults are "
- "greater than maximums:\tFAIL\n");
- set(def_msgs, --cur_def_msgs);
- set(def_msgsize, --cur_def_msgsize);
- cur_limits.rlim_cur = cur_limits.rlim_max = cur_def_msgs *
- cur_def_msgsize;
- setr(RLIMIT_MSGQUEUE, &cur_limits);
- if (test_queue_fail(NULL, &result))
- printf("Kernel creates queue even though defaults "
- "would exceed\nrlimit setting:"
- "\t\t\t\t\t\t\t\tFAIL\n");
- else
- printf("Kernel properly fails to create queue when "
- "defaults would\nexceed rlimit:"
- "\t\t\t\t\t\t\t\tPASS\n");
- }
-
- /*
- * Test #2 - open with an attr struct that exceeds rlimit
- */
- printf("\n\nTest series 2, behavior when attr struct is "
- "passed to mq_open:\n");
- cur_max_msgs = 32;
- cur_max_msgsize = cur_limits.rlim_max >> 4;
- set(max_msgs, cur_max_msgs);
- set(max_msgsize, cur_max_msgsize);
- attr.mq_maxmsg = cur_max_msgs;
- attr.mq_msgsize = cur_max_msgsize;
- if (test_queue_fail(&attr, &result))
- printf("Queue open in excess of rlimit max when euid = 0 "
- "succeeded:\t\tFAIL\n");
- else
- printf("Queue open in excess of rlimit max when euid = 0 "
- "failed:\t\tPASS\n");
- attr.mq_maxmsg = cur_max_msgs + 1;
- attr.mq_msgsize = 10;
- if (test_queue_fail(&attr, &result))
- printf("Queue open with mq_maxmsg > limit when euid = 0 "
- "succeeded:\t\tPASS\n");
- else
- printf("Queue open with mq_maxmsg > limit when euid = 0 "
- "failed:\t\tFAIL\n");
- attr.mq_maxmsg = 1;
- attr.mq_msgsize = cur_max_msgsize + 1;
- if (test_queue_fail(&attr, &result))
- printf("Queue open with mq_msgsize > limit when euid = 0 "
- "succeeded:\t\tPASS\n");
- else
- printf("Queue open with mq_msgsize > limit when euid = 0 "
- "failed:\t\tFAIL\n");
- attr.mq_maxmsg = 65536;
- attr.mq_msgsize = 65536;
- if (test_queue_fail(&attr, &result))
- printf("Queue open with total size > 2GB when euid = 0 "
- "succeeded:\t\tFAIL\n");
- else
- printf("Queue open with total size > 2GB when euid = 0 "
- "failed:\t\t\tPASS\n");
- seteuid(99);
- attr.mq_maxmsg = cur_max_msgs;
- attr.mq_msgsize = cur_max_msgsize;
- if (test_queue_fail(&attr, &result))
- printf("Queue open in excess of rlimit max when euid = 99 "
- "succeeded:\t\tFAIL\n");
- else
- printf("Queue open in excess of rlimit max when euid = 99 "
- "failed:\t\tPASS\n");
- attr.mq_maxmsg = cur_max_msgs + 1;
- attr.mq_msgsize = 10;
- if (test_queue_fail(&attr, &result))
- printf("Queue open with mq_maxmsg > limit when euid = 99 "
- "succeeded:\t\tFAIL\n");
- else
- printf("Queue open with mq_maxmsg > limit when euid = 99 "
- "failed:\t\tPASS\n");
- attr.mq_maxmsg = 1;
- attr.mq_msgsize = cur_max_msgsize + 1;
- if (test_queue_fail(&attr, &result))
- printf("Queue open with mq_msgsize > limit when euid = 99 "
- "succeeded:\t\tFAIL\n");
- else
- printf("Queue open with mq_msgsize > limit when euid = 99 "
- "failed:\t\tPASS\n");
- attr.mq_maxmsg = 65536;
- attr.mq_msgsize = 65536;
- if (test_queue_fail(&attr, &result))
- printf("Queue open with total size > 2GB when euid = 99 "
- "succeeded:\t\tFAIL\n");
- else
- printf("Queue open with total size > 2GB when euid = 99 "
- "failed:\t\t\tPASS\n");
-
- shutdown(0,"",0);
-}
diff --git a/mqueue/mq_perf_tests.c b/mqueue/mq_perf_tests.c
deleted file mode 100644
index 2fadd4b..0000000
--- a/mqueue/mq_perf_tests.c
+++ /dev/null
@@ -1,741 +0,0 @@
-/*
- * This application is Copyright 2012 Red Hat, Inc.
- * Doug Ledford <dledford@redhat.com>
- *
- * mq_perf_tests is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, version 3.
- *
- * mq_perf_tests 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.
- *
- * For the full text of the license, see <http://www.gnu.org/licenses/>.
- *
- * mq_perf_tests.c
- * Tests various types of message queue workloads, concentrating on those
- * situations that invole large message sizes, large message queue depths,
- * or both, and reports back useful metrics about kernel message queue
- * performance.
- *
- */
-#define _GNU_SOURCE
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <fcntl.h>
-#include <string.h>
-#include <limits.h>
-#include <errno.h>
-#include <signal.h>
-#include <pthread.h>
-#include <sched.h>
-#include <sys/types.h>
-#include <sys/time.h>
-#include <sys/resource.h>
-#include <sys/stat.h>
-#include <mqueue.h>
-#include <popt.h>
-
-static char *usage =
-"Usage:\n"
-" %s [-c #[,#..] -f] path\n"
-"\n"
-" -c # Skip most tests and go straight to a high queue depth test\n"
-" and then run that test continuously (useful for running at\n"
-" the same time as some other workload to see how much the\n"
-" cache thrashing caused by adding messages to a very deep\n"
-" queue impacts the performance of other programs). The number\n"
-" indicates which CPU core we should bind the process to during\n"
-" the run. If you have more than one physical CPU, then you\n"
-" will need one copy per physical CPU package, and you should\n"
-" specify the CPU cores to pin ourself to via a comma separated\n"
-" list of CPU values.\n"
-" -f Only usable with continuous mode. Pin ourself to the CPUs\n"
-" as requested, then instead of looping doing a high mq\n"
-" workload, just busy loop. This will allow us to lock up a\n"
-" single CPU just like we normally would, but without actually\n"
-" thrashing the CPU cache. This is to make it easier to get\n"
-" comparable numbers from some other workload running on the\n"
-" other CPUs. One set of numbers with # CPUs locked up running\n"
-" an mq workload, and another set of numbers with those same\n"
-" CPUs locked away from the test workload, but not doing\n"
-" anything to trash the cache like the mq workload might.\n"
-" path Path name of the message queue to create\n"
-"\n"
-" Note: this program must be run as root in order to enable all tests\n"
-"\n";
-
-char *MAX_MSGS = "/proc/sys/fs/mqueue/msg_max";
-char *MAX_MSGSIZE = "/proc/sys/fs/mqueue/msgsize_max";
-
-#define min(a, b) ((a) < (b) ? (a) : (b))
-#define MAX_CPUS 64
-char *cpu_option_string;
-int cpus_to_pin[MAX_CPUS];
-int num_cpus_to_pin;
-pthread_t cpu_threads[MAX_CPUS];
-pthread_t main_thread;
-cpu_set_t *cpu_set;
-int cpu_set_size;
-int cpus_online;
-
-#define MSG_SIZE 16
-#define TEST1_LOOPS 10000000
-#define TEST2_LOOPS 100000
-int continuous_mode;
-int continuous_mode_fake;
-
-struct rlimit saved_limits, cur_limits;
-int saved_max_msgs, saved_max_msgsize;
-int cur_max_msgs, cur_max_msgsize;
-FILE *max_msgs, *max_msgsize;
-int cur_nice;
-char *queue_path = "/mq_perf_tests";
-mqd_t queue = -1;
-struct mq_attr result;
-int mq_prio_max;
-
-const struct poptOption options[] = {
- {
- .longName = "continuous",
- .shortName = 'c',
- .argInfo = POPT_ARG_STRING,
- .arg = &cpu_option_string,
- .val = 'c',
- .descrip = "Run continuous tests at a high queue depth in "
- "order to test the effects of cache thrashing on "
- "other tasks on the system. This test is intended "
- "to be run on one core of each physical CPU while "
- "some other CPU intensive task is run on all the other "
- "cores of that same physical CPU and the other task "
- "is timed. It is assumed that the process of adding "
- "messages to the message queue in a tight loop will "
- "impact that other task to some degree. Once the "
- "tests are performed in this way, you should then "
- "re-run the tests using fake mode in order to check "
- "the difference in time required to perform the CPU "
- "intensive task",
- .argDescrip = "cpu[,cpu]",
- },
- {
- .longName = "fake",
- .shortName = 'f',
- .argInfo = POPT_ARG_NONE,
- .arg = &continuous_mode_fake,
- .val = 0,
- .descrip = "Tie up the CPUs that we would normally tie up in"
- "continuous mode, but don't actually do any mq stuff, "
- "just keep the CPU busy so it can't be used to process "
- "system level tasks as this would free up resources on "
- "the other CPU cores and skew the comparison between "
- "the no-mqueue work and mqueue work tests",
- .argDescrip = NULL,
- },
- {
- .longName = "path",
- .shortName = 'p',
- .argInfo = POPT_ARG_STRING | POPT_ARGFLAG_SHOW_DEFAULT,
- .arg = &queue_path,
- .val = 'p',
- .descrip = "The name of the path to use in the mqueue "
- "filesystem for our tests",
- .argDescrip = "pathname",
- },
- POPT_AUTOHELP
- POPT_TABLEEND
-};
-
-static inline void __set(FILE *stream, int value, char *err_msg);
-void shutdown(int exit_val, char *err_cause, int line_no);
-void sig_action_SIGUSR1(int signum, siginfo_t *info, void *context);
-void sig_action(int signum, siginfo_t *info, void *context);
-static inline int get(FILE *stream);
-static inline void set(FILE *stream, int value);
-static inline int try_set(FILE *stream, int value);
-static inline void getr(int type, struct rlimit *rlim);
-static inline void setr(int type, struct rlimit *rlim);
-static inline void open_queue(struct mq_attr *attr);
-void increase_limits(void);
-
-static inline void __set(FILE *stream, int value, char *err_msg)
-{
- rewind(stream);
- if (fprintf(stream, "%d", value) < 0)
- perror(err_msg);
-}
-
-
-void shutdown(int exit_val, char *err_cause, int line_no)
-{
- static int in_shutdown = 0;
- int errno_at_shutdown = errno;
- int i;
-
- /* In case we get called by multiple threads or from an sighandler */
- if (in_shutdown++)
- return;
-
- for (i = 0; i < num_cpus_to_pin; i++)
- if (cpu_threads[i]) {
- pthread_kill(cpu_threads[i], SIGUSR1);
- pthread_join(cpu_threads[i], NULL);
- }
-
- if (queue != -1)
- if (mq_close(queue))
- perror("mq_close() during shutdown");
- if (queue_path)
- /*
- * Be silent if this fails, if we cleaned up already it's
- * expected to fail
- */
- mq_unlink(queue_path);
- if (saved_max_msgs)
- __set(max_msgs, saved_max_msgs,
- "failed to restore saved_max_msgs");
- if (saved_max_msgsize)
- __set(max_msgsize, saved_max_msgsize,
- "failed to restore saved_max_msgsize");
- if (exit_val)
- error(exit_val, errno_at_shutdown, "%s at %d",
- err_cause, line_no);
- exit(0);
-}
-
-void sig_action_SIGUSR1(int signum, siginfo_t *info, void *context)
-{
- if (pthread_self() != main_thread)
- pthread_exit(0);
- else {
- fprintf(stderr, "Caught signal %d in SIGUSR1 handler, "
- "exiting\n", signum);
- shutdown(0, "", 0);
- fprintf(stderr, "\n\nReturned from shutdown?!?!\n\n");
- exit(0);
- }
-}
-
-void sig_action(int signum, siginfo_t *info, void *context)
-{
- if (pthread_self() != main_thread)
- pthread_kill(main_thread, signum);
- else {
- fprintf(stderr, "Caught signal %d, exiting\n", signum);
- shutdown(0, "", 0);
- fprintf(stderr, "\n\nReturned from shutdown?!?!\n\n");
- exit(0);
- }
-}
-
-static inline int get(FILE *stream)
-{
- int value;
- rewind(stream);
- if (fscanf(stream, "%d", &value) != 1)
- shutdown(4, "Error reading /proc entry", __LINE__);
- return value;
-}
-
-static inline void set(FILE *stream, int value)
-{
- int new_value;
-
- rewind(stream);
- if (fprintf(stream, "%d", value) < 0)
- return shutdown(5, "Failed writing to /proc file", __LINE__);
- new_value = get(stream);
- if (new_value != value)
- return shutdown(5, "We didn't get what we wrote to /proc back",
- __LINE__);
-}
-
-static inline int try_set(FILE *stream, int value)
-{
- int new_value;
-
- rewind(stream);
- fprintf(stream, "%d", value);
- new_value = get(stream);
- return new_value == value;
-}
-
-static inline void getr(int type, struct rlimit *rlim)
-{
- if (getrlimit(type, rlim))
- shutdown(6, "getrlimit()", __LINE__);
-}
-
-static inline void setr(int type, struct rlimit *rlim)
-{
- if (setrlimit(type, rlim))
- shutdown(7, "setrlimit()", __LINE__);
-}
-
-/**
- * open_queue - open the global queue for testing
- * @attr - An attr struct specifying the desired queue traits
- * @result - An attr struct that lists the actual traits the queue has
- *
- * This open is not allowed to fail, failure will result in an orderly
- * shutdown of the program. The global queue_path is used to set what
- * queue to open, the queue descriptor is saved in the global queue
- * variable.
- */
-static inline void open_queue(struct mq_attr *attr)
-{
- int flags = O_RDWR | O_EXCL | O_CREAT | O_NONBLOCK;
- int perms = DEFFILEMODE;
-
- queue = mq_open(queue_path, flags, perms, attr);
- if (queue == -1)
- shutdown(1, "mq_open()", __LINE__);
- if (mq_getattr(queue, &result))
- shutdown(1, "mq_getattr()", __LINE__);
- printf("\n\tQueue %s created:\n", queue_path);
- printf("\t\tmq_flags:\t\t\t%s\n", result.mq_flags & O_NONBLOCK ?
- "O_NONBLOCK" : "(null)");
- printf("\t\tmq_maxmsg:\t\t\t%d\n", result.mq_maxmsg);
- printf("\t\tmq_msgsize:\t\t\t%d\n", result.mq_msgsize);
- printf("\t\tmq_curmsgs:\t\t\t%d\n", result.mq_curmsgs);
-}
-
-void *fake_cont_thread(void *arg)
-{
- int i;
-
- for (i = 0; i < num_cpus_to_pin; i++)
- if (cpu_threads[i] == pthread_self())
- break;
- printf("\tStarted fake continuous mode thread %d on CPU %d\n", i,
- cpus_to_pin[i]);
- while (1)
- ;
-}
-
-void *cont_thread(void *arg)
-{
- char buff[MSG_SIZE];
- int i, priority;
-
- for (i = 0; i < num_cpus_to_pin; i++)
- if (cpu_threads[i] == pthread_self())
- break;
- printf("\tStarted continuous mode thread %d on CPU %d\n", i,
- cpus_to_pin[i]);
- while (1) {
- while (mq_send(queue, buff, sizeof(buff), 0) == 0)
- ;
- mq_receive(queue, buff, sizeof(buff), &priority);
- }
-}
-
-#define drain_queue() \
- while (mq_receive(queue, buff, MSG_SIZE, &prio_in) == MSG_SIZE)
-
-#define do_untimed_send() \
- do { \
- if (mq_send(queue, buff, MSG_SIZE, prio_out)) \
- shutdown(3, "Test send failure", __LINE__); \
- } while (0)
-
-#define do_send_recv() \
- do { \
- clock_gettime(clock, &start); \
- if (mq_send(queue, buff, MSG_SIZE, prio_out)) \
- shutdown(3, "Test send failure", __LINE__); \
- clock_gettime(clock, &middle); \
- if (mq_receive(queue, buff, MSG_SIZE, &prio_in) != MSG_SIZE) \
- shutdown(3, "Test receive failure", __LINE__); \
- clock_gettime(clock, &end); \
- nsec = ((middle.tv_sec - start.tv_sec) * 1000000000) + \
- (middle.tv_nsec - start.tv_nsec); \
- send_total.tv_nsec += nsec; \
- if (send_total.tv_nsec >= 1000000000) { \
- send_total.tv_sec++; \
- send_total.tv_nsec -= 1000000000; \
- } \
- nsec = ((end.tv_sec - middle.tv_sec) * 1000000000) + \
- (end.tv_nsec - middle.tv_nsec); \
- recv_total.tv_nsec += nsec; \
- if (recv_total.tv_nsec >= 1000000000) { \
- recv_total.tv_sec++; \
- recv_total.tv_nsec -= 1000000000; \
- } \
- } while (0)
-
-struct test {
- char *desc;
- void (*func)(int *);
-};
-
-void const_prio(int *prio)
-{
- return;
-}
-
-void inc_prio(int *prio)
-{
- if (++*prio == mq_prio_max)
- *prio = 0;
-}
-
-void dec_prio(int *prio)
-{
- if (--*prio < 0)
- *prio = mq_prio_max - 1;
-}
-
-void random_prio(int *prio)
-{
- *prio = random() % mq_prio_max;
-}
-
-struct test test2[] = {
- {"\n\tTest #2a: Time send/recv message, queue full, constant prio\n",
- const_prio},
- {"\n\tTest #2b: Time send/recv message, queue full, increasing prio\n",
- inc_prio},
- {"\n\tTest #2c: Time send/recv message, queue full, decreasing prio\n",
- dec_prio},
- {"\n\tTest #2d: Time send/recv message, queue full, random prio\n",
- random_prio},
- {NULL, NULL}
-};
-
-/**
- * Tests to perform (all done with MSG_SIZE messages):
- *
- * 1) Time to add/remove message with 0 messages on queue
- * 1a) with constant prio
- * 2) Time to add/remove message when queue close to capacity:
- * 2a) with constant prio
- * 2b) with increasing prio
- * 2c) with decreasing prio
- * 2d) with random prio
- * 3) Test limits of priorities honored (double check _SC_MQ_PRIO_MAX)
- */
-void *perf_test_thread(void *arg)
-{
- char buff[MSG_SIZE];
- int prio_out, prio_in;
- int i;
- clockid_t clock;
- pthread_t *t;
- struct timespec res, start, middle, end, send_total, recv_total;
- unsigned long long nsec;
- struct test *cur_test;
-
- t = &cpu_threads[0];
- printf("\n\tStarted mqueue performance test thread on CPU %d\n",
- cpus_to_pin[0]);
- mq_prio_max = sysconf(_SC_MQ_PRIO_MAX);
- if (mq_prio_max == -1)
- shutdown(2, "sysconf(_SC_MQ_PRIO_MAX)", __LINE__);
- if (pthread_getcpuclockid(cpu_threads[0], &clock) != 0)
- shutdown(2, "pthread_getcpuclockid", __LINE__);
-
- if (clock_getres(clock, &res))
- shutdown(2, "clock_getres()", __LINE__);
-
- printf("\t\tMax priorities:\t\t\t%d\n", mq_prio_max);
- printf("\t\tClock resolution:\t\t%d nsec%s\n", res.tv_nsec,
- res.tv_nsec > 1 ? "s" : "");
-
-
-
- printf("\n\tTest #1: Time send/recv message, queue empty\n");
- printf("\t\t(%d iterations)\n", TEST1_LOOPS);
- prio_out = 0;
- send_total.tv_sec = 0;
- send_total.tv_nsec = 0;
- recv_total.tv_sec = 0;
- recv_total.tv_nsec = 0;
- for (i = 0; i < TEST1_LOOPS; i++)
- do_send_recv();
- printf("\t\tSend msg:\t\t\t%d.%ds total time\n",
- send_total.tv_sec, send_total.tv_nsec);
- nsec = ((unsigned long long)send_total.tv_sec * 1000000000 +
- send_total.tv_nsec) / TEST1_LOOPS;
- printf("\t\t\t\t\t\t%d nsec/msg\n", nsec);
- printf("\t\tRecv msg:\t\t\t%d.%ds total time\n",
- recv_total.tv_sec, recv_total.tv_nsec);
- nsec = ((unsigned long long)recv_total.tv_sec * 1000000000 +
- recv_total.tv_nsec) / TEST1_LOOPS;
- printf("\t\t\t\t\t\t%d nsec/msg\n", nsec);
-
-
- for (cur_test = test2; cur_test->desc != NULL; cur_test++) {
- printf(cur_test->desc);
- printf("\t\t(%d iterations)\n", TEST2_LOOPS);
- prio_out = 0;
- send_total.tv_sec = 0;
- send_total.tv_nsec = 0;
- recv_total.tv_sec = 0;
- recv_total.tv_nsec = 0;
- printf("\t\tFilling queue...");
- fflush(stdout);
- clock_gettime(clock, &start);
- for (i = 0; i < result.mq_maxmsg - 1; i++) {
- do_untimed_send();
- cur_test->func(&prio_out);
- }
- clock_gettime(clock, &end);
- nsec = ((unsigned long long)(end.tv_sec - start.tv_sec) *
- 1000000000) + (end.tv_nsec - start.tv_nsec);
- printf("done.\t\t%lld.%llds\n", nsec / 1000000000,
- nsec % 1000000000);
- printf("\t\tTesting...");
- fflush(stdout);
- for (i = 0; i < TEST2_LOOPS; i++) {
- do_send_recv();
- cur_test->func(&prio_out);
- }
- printf("done.\n");
- printf("\t\tSend msg:\t\t\t%d.%ds total time\n",
- send_total.tv_sec, send_total.tv_nsec);
- nsec = ((unsigned long long)send_total.tv_sec * 1000000000 +
- send_total.tv_nsec) / TEST2_LOOPS;
- printf("\t\t\t\t\t\t%d nsec/msg\n", nsec);
- printf("\t\tRecv msg:\t\t\t%d.%ds total time\n",
- recv_total.tv_sec, recv_total.tv_nsec);
- nsec = ((unsigned long long)recv_total.tv_sec * 1000000000 +
- recv_total.tv_nsec) / TEST2_LOOPS;
- printf("\t\t\t\t\t\t%d nsec/msg\n", nsec);
- printf("\t\tDraining queue...");
- fflush(stdout);
- clock_gettime(clock, &start);
- drain_queue();
- clock_gettime(clock, &end);
- nsec = ((unsigned long long)(end.tv_sec - start.tv_sec) *
- 1000000000) + (end.tv_nsec - start.tv_nsec);
- printf("done.\t\t%lld.%llds\n", nsec / 1000000000,
- nsec % 1000000000);
- }
- return 0;
-}
-
-void increase_limits(void)
-{
- cur_limits.rlim_cur = RLIM_INFINITY;
- cur_limits.rlim_max = RLIM_INFINITY;
- setr(RLIMIT_MSGQUEUE, &cur_limits);
- while (try_set(max_msgs, cur_max_msgs += 10))
- ;
- cur_max_msgs = get(max_msgs);
- while (try_set(max_msgsize, cur_max_msgsize += 1024))
- ;
- cur_max_msgsize = get(max_msgsize);
- if (setpriority(PRIO_PROCESS, 0, -20) != 0)
- shutdown(2, "setpriority()", __LINE__);
- cur_nice = -20;
-}
-
-int main(int argc, char *argv[])
-{
- struct mq_attr attr;
- char *option, *next_option;
- int i, cpu;
- struct sigaction sa;
- poptContext popt_context;
- char rc;
- void *retval;
-
- main_thread = pthread_self();
- num_cpus_to_pin = 0;
-
- if (sysconf(_SC_NPROCESSORS_ONLN) == -1) {
- perror("sysconf(_SC_NPROCESSORS_ONLN)");
- exit(1);
- }
- cpus_online = min(MAX_CPUS, sysconf(_SC_NPROCESSORS_ONLN));
- cpu_set = CPU_ALLOC(cpus_online);
- if (cpu_set == NULL) {
- perror("CPU_ALLOC()");
- exit(1);
- }
- cpu_set_size = CPU_ALLOC_SIZE(cpus_online);
- CPU_ZERO_S(cpu_set_size, cpu_set);
-
- popt_context = poptGetContext(NULL, argc, (const char **)argv,
- options, 0);
-
- while ((rc = poptGetNextOpt(popt_context)) > 0) {
- switch (rc) {
- case 'c':
- continuous_mode = 1;
- option = cpu_option_string;
- do {
- next_option = strchr(option, ',');
- if (next_option)
- *next_option = '\0';
- cpu = atoi(option);
- if (cpu >= cpus_online)
- fprintf(stderr, "CPU %d exceeds "
- "cpus online, ignoring.\n",
- cpu);
- else
- cpus_to_pin[num_cpus_to_pin++] = cpu;
- if (next_option)
- option = ++next_option;
- } while (next_option && num_cpus_to_pin < MAX_CPUS);
- /* Double check that they didn't give us the same CPU
- * more than once */
- for (cpu = 0; cpu < num_cpus_to_pin; cpu++) {
- if (CPU_ISSET_S(cpus_to_pin[cpu], cpu_set_size,
- cpu_set)) {
- fprintf(stderr, "Any given CPU may "
- "only be given once.\n");
- exit(1);
- } else
- CPU_SET_S(cpus_to_pin[cpu],
- cpu_set_size, cpu_set);
- }
- break;
- case 'p':
- /*
- * Although we can create a msg queue with a
- * non-absolute path name, unlink will fail. So,
- * if the name doesn't start with a /, add one
- * when we save it.
- */
- option = queue_path;
- if (*option != '/') {
- queue_path = malloc(strlen(option) + 2);
- if (!queue_path) {
- perror("malloc()");
- exit(1);
- }
- queue_path[0] = '/';
- queue_path[1] = 0;
- strcat(queue_path, option);
- free(option);
- }
- break;
- }
- }
-
- if (continuous_mode && num_cpus_to_pin == 0) {
- fprintf(stderr, "Must pass at least one CPU to continuous "
- "mode.\n");
- poptPrintUsage(popt_context, stderr, 0);
- exit(1);
- } else if (!continuous_mode) {
- num_cpus_to_pin = 1;
- cpus_to_pin[0] = cpus_online - 1;
- }
-
- if (getuid() != 0) {
- fprintf(stderr, "Not running as root, but almost all tests "
- "require root in order to modify\nsystem settings. "
- "Exiting.\n");
- exit(1);
- }
-
- max_msgs = fopen(MAX_MSGS, "r+");
- max_msgsize = fopen(MAX_MSGSIZE, "r+");
- if (!max_msgs)
- shutdown(2, "Failed to open msg_max", __LINE__);
- if (!max_msgsize)
- shutdown(2, "Failed to open msgsize_max", __LINE__);
-
- /* Load up the current system values for everything we can */
- getr(RLIMIT_MSGQUEUE, &saved_limits);
- cur_limits = saved_limits;
- saved_max_msgs = cur_max_msgs = get(max_msgs);
- saved_max_msgsize = cur_max_msgsize = get(max_msgsize);
- errno = 0;
- cur_nice = getpriority(PRIO_PROCESS, 0);
- if (errno)
- shutdown(2, "getpriority()", __LINE__);
-
- /* Tell the user our initial state */
- printf("\nInitial system state:\n");
- printf("\tUsing queue path:\t\t\t%s\n", queue_path);
- printf("\tRLIMIT_MSGQUEUE(soft):\t\t\t%d\n", saved_limits.rlim_cur);
- printf("\tRLIMIT_MSGQUEUE(hard):\t\t\t%d\n", saved_limits.rlim_max);
- printf("\tMaximum Message Size:\t\t\t%d\n", saved_max_msgsize);
- printf("\tMaximum Queue Size:\t\t\t%d\n", saved_max_msgs);
- printf("\tNice value:\t\t\t\t%d\n", cur_nice);
- printf("\n");
-
- increase_limits();
-
- printf("Adjusted system state for testing:\n");
- if (cur_limits.rlim_cur == RLIM_INFINITY) {
- printf("\tRLIMIT_MSGQUEUE(soft):\t\t\t(unlimited)\n");
- printf("\tRLIMIT_MSGQUEUE(hard):\t\t\t(unlimited)\n");
- } else {
- printf("\tRLIMIT_MSGQUEUE(soft):\t\t\t%d\n",
- cur_limits.rlim_cur);
- printf("\tRLIMIT_MSGQUEUE(hard):\t\t\t%d\n",
- cur_limits.rlim_max);
- }
- printf("\tMaximum Message Size:\t\t\t%d\n", cur_max_msgsize);
- printf("\tMaximum Queue Size:\t\t\t%d\n", cur_max_msgs);
- printf("\tNice value:\t\t\t\t%d\n", cur_nice);
- printf("\tContinuous mode:\t\t\t(%s)\n", continuous_mode ?
- (continuous_mode_fake ? "fake mode" : "enabled") :
- "disabled");
- printf("\tCPUs to pin:\t\t\t\t%d", cpus_to_pin[0]);
- for (cpu = 1; cpu < num_cpus_to_pin; cpu++)
- printf(",%d", cpus_to_pin[cpu]);
- printf("\n");
-
- sa.sa_sigaction = sig_action_SIGUSR1;
- sigemptyset(&sa.sa_mask);
- sigaddset(&sa.sa_mask, SIGHUP);
- sigaddset(&sa.sa_mask, SIGINT);
- sigaddset(&sa.sa_mask, SIGQUIT);
- sigaddset(&sa.sa_mask, SIGTERM);
- sa.sa_flags = SA_SIGINFO;
- if (sigaction(SIGUSR1, &sa, NULL) == -1)
- shutdown(1, "sigaction(SIGUSR1)", __LINE__);
- sa.sa_sigaction = sig_action;
- if (sigaction(SIGHUP, &sa, NULL) == -1)
- shutdown(1, "sigaction(SIGHUP)", __LINE__);
- if (sigaction(SIGINT, &sa, NULL) == -1)
- shutdown(1, "sigaction(SIGINT)", __LINE__);
- if (sigaction(SIGQUIT, &sa, NULL) == -1)
- shutdown(1, "sigaction(SIGQUIT)", __LINE__);
- if (sigaction(SIGTERM, &sa, NULL) == -1)
- shutdown(1, "sigaction(SIGTERM)", __LINE__);
-
- if (!continuous_mode_fake) {
- attr.mq_flags = O_NONBLOCK;
- attr.mq_maxmsg = cur_max_msgs;
- attr.mq_msgsize = MSG_SIZE;
- open_queue(&attr);
- }
- for (i = 0; i < num_cpus_to_pin; i++) {
- pthread_attr_t thread_attr;
- void *thread_func;
-
- if (continuous_mode_fake)
- thread_func = &fake_cont_thread;
- else if (continuous_mode)
- thread_func = &cont_thread;
- else
- thread_func = &perf_test_thread;
-
- CPU_ZERO_S(cpu_set_size, cpu_set);
- CPU_SET_S(cpus_to_pin[i], cpu_set_size, cpu_set);
- pthread_attr_init(&thread_attr);
- pthread_attr_setaffinity_np(&thread_attr, cpu_set_size,
- cpu_set);
- if (pthread_create(&cpu_threads[i], &thread_attr, thread_func,
- NULL))
- shutdown(1, "pthread_create()", __LINE__);
- pthread_attr_destroy(&thread_attr);
- }
-
- if (!continuous_mode) {
- pthread_join(cpu_threads[0], &retval);
- shutdown((long)retval, "perf_test_thread()", __LINE__);
- } else {
- while (1)
- sleep(1);
- }
- shutdown(0, "", 0);
-}
diff --git a/net/.gitignore b/net/.gitignore
deleted file mode 100644
index 0032662..0000000
--- a/net/.gitignore
+++ /dev/null
@@ -1,3 +0,0 @@
-socket
-psock_fanout
-psock_tpacket
diff --git a/net/Makefile b/net/Makefile
deleted file mode 100644
index c7493b8..0000000
--- a/net/Makefile
+++ /dev/null
@@ -1,25 +0,0 @@
-# Makefile for net selftests
-
-CC = $(CROSS_COMPILE)gcc
-CFLAGS = -Wall -O2 -g
-
-CFLAGS += -I../../../../usr/include/
-
-NET_PROGS = socket psock_fanout psock_tpacket
-
-all: $(NET_PROGS)
-%: %.c
- $(CC) $(CFLAGS) -o $@ $^
-
-run_tests: all
- @/bin/sh ./run_netsocktests || echo "sockettests: [FAIL]"
- @/bin/sh ./run_afpackettests || echo "afpackettests: [FAIL]"
- @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/psock_fanout.c b/net/psock_fanout.c
deleted file mode 100644
index 57b9c2b..0000000
--- a/net/psock_fanout.c
+++ /dev/null
@@ -1,312 +0,0 @@
-/*
- * Copyright 2013 Google Inc.
- * Author: Willem de Bruijn (willemb@google.com)
- *
- * A basic test of packet socket fanout behavior.
- *
- * Control:
- * - create fanout fails as expected with illegal flag combinations
- * - join fanout fails as expected with diverging types or flags
- *
- * Datapath:
- * Open a pair of packet sockets and a pair of INET sockets, send a known
- * number of packets across the two INET sockets and count the number of
- * packets enqueued onto the two packet sockets.
- *
- * The test currently runs for
- * - PACKET_FANOUT_HASH
- * - PACKET_FANOUT_HASH with PACKET_FANOUT_FLAG_ROLLOVER
- * - PACKET_FANOUT_LB
- * - PACKET_FANOUT_CPU
- * - PACKET_FANOUT_ROLLOVER
- *
- * Todo:
- * - functionality: PACKET_FANOUT_FLAG_DEFRAG
- *
- * License (GPLv2):
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms and conditions of the GNU General Public License,
- * version 2, as published by the Free Software Foundation.
- *
- * This program is distributed in the hope it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for
- * more details.
- *
- * You should have received a copy of the GNU General Public License along with
- * this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
- */
-
-#define _GNU_SOURCE /* for sched_setaffinity */
-
-#include <arpa/inet.h>
-#include <errno.h>
-#include <fcntl.h>
-#include <linux/filter.h>
-#include <linux/if_packet.h>
-#include <net/ethernet.h>
-#include <netinet/ip.h>
-#include <netinet/udp.h>
-#include <poll.h>
-#include <sched.h>
-#include <stdint.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <sys/mman.h>
-#include <sys/socket.h>
-#include <sys/stat.h>
-#include <sys/types.h>
-#include <unistd.h>
-
-#include "psock_lib.h"
-
-#define RING_NUM_FRAMES 20
-
-/* Open a socket in a given fanout mode.
- * @return -1 if mode is bad, a valid socket otherwise */
-static int sock_fanout_open(uint16_t typeflags, int num_packets)
-{
- int fd, val;
-
- fd = socket(PF_PACKET, SOCK_DGRAM, htons(ETH_P_IP));
- if (fd < 0) {
- perror("socket packet");
- exit(1);
- }
-
- /* fanout group ID is always 0: tests whether old groups are deleted */
- val = ((int) typeflags) << 16;
- if (setsockopt(fd, SOL_PACKET, PACKET_FANOUT, &val, sizeof(val))) {
- if (close(fd)) {
- perror("close packet");
- exit(1);
- }
- return -1;
- }
-
- pair_udp_setfilter(fd);
- return fd;
-}
-
-static char *sock_fanout_open_ring(int fd)
-{
- struct tpacket_req req = {
- .tp_block_size = getpagesize(),
- .tp_frame_size = getpagesize(),
- .tp_block_nr = RING_NUM_FRAMES,
- .tp_frame_nr = RING_NUM_FRAMES,
- };
- char *ring;
- int val = TPACKET_V2;
-
- if (setsockopt(fd, SOL_PACKET, PACKET_VERSION, (void *) &val,
- sizeof(val))) {
- perror("packetsock ring setsockopt version");
- exit(1);
- }
- if (setsockopt(fd, SOL_PACKET, PACKET_RX_RING, (void *) &req,
- sizeof(req))) {
- perror("packetsock ring setsockopt");
- exit(1);
- }
-
- ring = mmap(0, req.tp_block_size * req.tp_block_nr,
- PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
- if (!ring) {
- fprintf(stderr, "packetsock ring mmap\n");
- exit(1);
- }
-
- return ring;
-}
-
-static int sock_fanout_read_ring(int fd, void *ring)
-{
- struct tpacket2_hdr *header = ring;
- int count = 0;
-
- while (header->tp_status & TP_STATUS_USER && count < RING_NUM_FRAMES) {
- count++;
- header = ring + (count * getpagesize());
- }
-
- return count;
-}
-
-static int sock_fanout_read(int fds[], char *rings[], const int expect[])
-{
- int ret[2];
-
- ret[0] = sock_fanout_read_ring(fds[0], rings[0]);
- ret[1] = sock_fanout_read_ring(fds[1], rings[1]);
-
- fprintf(stderr, "info: count=%d,%d, expect=%d,%d\n",
- ret[0], ret[1], expect[0], expect[1]);
-
- if ((!(ret[0] == expect[0] && ret[1] == expect[1])) &&
- (!(ret[0] == expect[1] && ret[1] == expect[0]))) {
- fprintf(stderr, "ERROR: incorrect queue lengths\n");
- return 1;
- }
-
- return 0;
-}
-
-/* Test illegal mode + flag combination */
-static void test_control_single(void)
-{
- fprintf(stderr, "test: control single socket\n");
-
- if (sock_fanout_open(PACKET_FANOUT_ROLLOVER |
- PACKET_FANOUT_FLAG_ROLLOVER, 0) != -1) {
- fprintf(stderr, "ERROR: opened socket with dual rollover\n");
- exit(1);
- }
-}
-
-/* Test illegal group with different modes or flags */
-static void test_control_group(void)
-{
- int fds[2];
-
- fprintf(stderr, "test: control multiple sockets\n");
-
- fds[0] = sock_fanout_open(PACKET_FANOUT_HASH, 20);
- if (fds[0] == -1) {
- fprintf(stderr, "ERROR: failed to open HASH socket\n");
- exit(1);
- }
- if (sock_fanout_open(PACKET_FANOUT_HASH |
- PACKET_FANOUT_FLAG_DEFRAG, 10) != -1) {
- fprintf(stderr, "ERROR: joined group with wrong flag defrag\n");
- exit(1);
- }
- if (sock_fanout_open(PACKET_FANOUT_HASH |
- PACKET_FANOUT_FLAG_ROLLOVER, 10) != -1) {
- fprintf(stderr, "ERROR: joined group with wrong flag ro\n");
- exit(1);
- }
- if (sock_fanout_open(PACKET_FANOUT_CPU, 10) != -1) {
- fprintf(stderr, "ERROR: joined group with wrong mode\n");
- exit(1);
- }
- fds[1] = sock_fanout_open(PACKET_FANOUT_HASH, 20);
- if (fds[1] == -1) {
- fprintf(stderr, "ERROR: failed to join group\n");
- exit(1);
- }
- if (close(fds[1]) || close(fds[0])) {
- fprintf(stderr, "ERROR: closing sockets\n");
- exit(1);
- }
-}
-
-static int test_datapath(uint16_t typeflags, int port_off,
- const int expect1[], const int expect2[])
-{
- const int expect0[] = { 0, 0 };
- char *rings[2];
- int fds[2], fds_udp[2][2], ret;
-
- fprintf(stderr, "test: datapath 0x%hx\n", typeflags);
-
- fds[0] = sock_fanout_open(typeflags, 20);
- fds[1] = sock_fanout_open(typeflags, 20);
- if (fds[0] == -1 || fds[1] == -1) {
- fprintf(stderr, "ERROR: failed open\n");
- exit(1);
- }
- rings[0] = sock_fanout_open_ring(fds[0]);
- rings[1] = sock_fanout_open_ring(fds[1]);
- pair_udp_open(fds_udp[0], PORT_BASE);
- pair_udp_open(fds_udp[1], PORT_BASE + port_off);
- sock_fanout_read(fds, rings, expect0);
-
- /* Send data, but not enough to overflow a queue */
- pair_udp_send(fds_udp[0], 15);
- pair_udp_send(fds_udp[1], 5);
- ret = sock_fanout_read(fds, rings, expect1);
-
- /* Send more data, overflow the queue */
- pair_udp_send(fds_udp[0], 15);
- /* TODO: ensure consistent order between expect1 and expect2 */
- ret |= sock_fanout_read(fds, rings, expect2);
-
- if (munmap(rings[1], RING_NUM_FRAMES * getpagesize()) ||
- munmap(rings[0], RING_NUM_FRAMES * getpagesize())) {
- fprintf(stderr, "close rings\n");
- exit(1);
- }
- if (close(fds_udp[1][1]) || close(fds_udp[1][0]) ||
- close(fds_udp[0][1]) || close(fds_udp[0][0]) ||
- close(fds[1]) || close(fds[0])) {
- fprintf(stderr, "close datapath\n");
- exit(1);
- }
-
- return ret;
-}
-
-static int set_cpuaffinity(int cpuid)
-{
- cpu_set_t mask;
-
- CPU_ZERO(&mask);
- CPU_SET(cpuid, &mask);
- if (sched_setaffinity(0, sizeof(mask), &mask)) {
- if (errno != EINVAL) {
- fprintf(stderr, "setaffinity %d\n", cpuid);
- exit(1);
- }
- return 1;
- }
-
- return 0;
-}
-
-int main(int argc, char **argv)
-{
- const int expect_hash[2][2] = { { 15, 5 }, { 20, 5 } };
- const int expect_hash_rb[2][2] = { { 15, 5 }, { 20, 15 } };
- const int expect_lb[2][2] = { { 10, 10 }, { 18, 17 } };
- const int expect_rb[2][2] = { { 20, 0 }, { 20, 15 } };
- const int expect_cpu0[2][2] = { { 20, 0 }, { 20, 0 } };
- const int expect_cpu1[2][2] = { { 0, 20 }, { 0, 20 } };
- int port_off = 2, tries = 5, ret;
-
- test_control_single();
- test_control_group();
-
- /* find a set of ports that do not collide onto the same socket */
- ret = test_datapath(PACKET_FANOUT_HASH, port_off,
- expect_hash[0], expect_hash[1]);
- while (ret && tries--) {
- fprintf(stderr, "info: trying alternate ports (%d)\n", tries);
- ret = test_datapath(PACKET_FANOUT_HASH, ++port_off,
- expect_hash[0], expect_hash[1]);
- }
-
- ret |= test_datapath(PACKET_FANOUT_HASH | PACKET_FANOUT_FLAG_ROLLOVER,
- port_off, expect_hash_rb[0], expect_hash_rb[1]);
- ret |= test_datapath(PACKET_FANOUT_LB,
- port_off, expect_lb[0], expect_lb[1]);
- ret |= test_datapath(PACKET_FANOUT_ROLLOVER,
- port_off, expect_rb[0], expect_rb[1]);
-
- set_cpuaffinity(0);
- ret |= test_datapath(PACKET_FANOUT_CPU, port_off,
- expect_cpu0[0], expect_cpu0[1]);
- if (!set_cpuaffinity(1))
- /* TODO: test that choice alternates with previous */
- ret |= test_datapath(PACKET_FANOUT_CPU, port_off,
- expect_cpu1[0], expect_cpu1[1]);
-
- if (ret)
- return 1;
-
- printf("OK. All tests passed\n");
- return 0;
-}
diff --git a/net/psock_lib.h b/net/psock_lib.h
deleted file mode 100644
index 37da54a..0000000
--- a/net/psock_lib.h
+++ /dev/null
@@ -1,127 +0,0 @@
-/*
- * Copyright 2013 Google Inc.
- * Author: Willem de Bruijn <willemb@google.com>
- * Daniel Borkmann <dborkman@redhat.com>
- *
- * License (GPLv2):
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms and conditions of the GNU General Public License,
- * version 2, as published by the Free Software Foundation.
- *
- * This program is distributed in the hope it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for
- * more details.
- *
- * You should have received a copy of the GNU General Public License along with
- * this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
- */
-
-#ifndef PSOCK_LIB_H
-#define PSOCK_LIB_H
-
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <string.h>
-#include <arpa/inet.h>
-#include <unistd.h>
-
-#define DATA_LEN 100
-#define DATA_CHAR 'a'
-
-#define PORT_BASE 8000
-
-#ifndef __maybe_unused
-# define __maybe_unused __attribute__ ((__unused__))
-#endif
-
-static __maybe_unused void pair_udp_setfilter(int fd)
-{
- struct sock_filter bpf_filter[] = {
- { 0x80, 0, 0, 0x00000000 }, /* LD pktlen */
- { 0x35, 0, 5, DATA_LEN }, /* JGE DATA_LEN [f goto nomatch]*/
- { 0x30, 0, 0, 0x00000050 }, /* LD ip[80] */
- { 0x15, 0, 3, DATA_CHAR }, /* JEQ DATA_CHAR [f goto nomatch]*/
- { 0x30, 0, 0, 0x00000051 }, /* LD ip[81] */
- { 0x15, 0, 1, DATA_CHAR }, /* JEQ DATA_CHAR [f goto nomatch]*/
- { 0x06, 0, 0, 0x00000060 }, /* RET match */
- { 0x06, 0, 0, 0x00000000 }, /* RET no match */
- };
- struct sock_fprog bpf_prog;
-
- bpf_prog.filter = bpf_filter;
- bpf_prog.len = sizeof(bpf_filter) / sizeof(struct sock_filter);
- if (setsockopt(fd, SOL_SOCKET, SO_ATTACH_FILTER, &bpf_prog,
- sizeof(bpf_prog))) {
- perror("setsockopt SO_ATTACH_FILTER");
- exit(1);
- }
-}
-
-static __maybe_unused void pair_udp_open(int fds[], uint16_t port)
-{
- struct sockaddr_in saddr, daddr;
-
- fds[0] = socket(PF_INET, SOCK_DGRAM, 0);
- fds[1] = socket(PF_INET, SOCK_DGRAM, 0);
- if (fds[0] == -1 || fds[1] == -1) {
- fprintf(stderr, "ERROR: socket dgram\n");
- exit(1);
- }
-
- memset(&saddr, 0, sizeof(saddr));
- saddr.sin_family = AF_INET;
- saddr.sin_port = htons(port);
- saddr.sin_addr.s_addr = htonl(INADDR_LOOPBACK);
-
- memset(&daddr, 0, sizeof(daddr));
- daddr.sin_family = AF_INET;
- daddr.sin_port = htons(port + 1);
- daddr.sin_addr.s_addr = htonl(INADDR_LOOPBACK);
-
- /* must bind both to get consistent hash result */
- if (bind(fds[1], (void *) &daddr, sizeof(daddr))) {
- perror("bind");
- exit(1);
- }
- if (bind(fds[0], (void *) &saddr, sizeof(saddr))) {
- perror("bind");
- exit(1);
- }
- if (connect(fds[0], (void *) &daddr, sizeof(daddr))) {
- perror("connect");
- exit(1);
- }
-}
-
-static __maybe_unused void pair_udp_send(int fds[], int num)
-{
- char buf[DATA_LEN], rbuf[DATA_LEN];
-
- memset(buf, DATA_CHAR, sizeof(buf));
- while (num--) {
- /* Should really handle EINTR and EAGAIN */
- if (write(fds[0], buf, sizeof(buf)) != sizeof(buf)) {
- fprintf(stderr, "ERROR: send failed left=%d\n", num);
- exit(1);
- }
- if (read(fds[1], rbuf, sizeof(rbuf)) != sizeof(rbuf)) {
- fprintf(stderr, "ERROR: recv failed left=%d\n", num);
- exit(1);
- }
- if (memcmp(buf, rbuf, sizeof(buf))) {
- fprintf(stderr, "ERROR: data failed left=%d\n", num);
- exit(1);
- }
- }
-}
-
-static __maybe_unused void pair_udp_close(int fds[])
-{
- close(fds[0]);
- close(fds[1]);
-}
-
-#endif /* PSOCK_LIB_H */
diff --git a/net/psock_tpacket.c b/net/psock_tpacket.c
deleted file mode 100644
index 24adf70..0000000
--- a/net/psock_tpacket.c
+++ /dev/null
@@ -1,805 +0,0 @@
-/*
- * Copyright 2013 Red Hat, Inc.
- * Author: Daniel Borkmann <dborkman@redhat.com>
- * Chetan Loke <loke.chetan@gmail.com> (TPACKET_V3 usage example)
- *
- * A basic test of packet socket's TPACKET_V1/TPACKET_V2/TPACKET_V3 behavior.
- *
- * Control:
- * Test the setup of the TPACKET socket with different patterns that are
- * known to fail (TODO) resp. succeed (OK).
- *
- * Datapath:
- * Open a pair of packet sockets and send resp. receive an a priori known
- * packet pattern accross the sockets and check if it was received resp.
- * sent correctly. Fanout in combination with RX_RING is currently not
- * tested here.
- *
- * The test currently runs for
- * - TPACKET_V1: RX_RING, TX_RING
- * - TPACKET_V2: RX_RING, TX_RING
- * - TPACKET_V3: RX_RING
- *
- * License (GPLv2):
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms and conditions of the GNU General Public License,
- * version 2, as published by the Free Software Foundation.
- *
- * This program is distributed in the hope it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for
- * more details.
- *
- * You should have received a copy of the GNU General Public License along with
- * this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <sys/socket.h>
-#include <sys/mman.h>
-#include <linux/if_packet.h>
-#include <linux/filter.h>
-#include <ctype.h>
-#include <fcntl.h>
-#include <unistd.h>
-#include <bits/wordsize.h>
-#include <net/ethernet.h>
-#include <netinet/ip.h>
-#include <arpa/inet.h>
-#include <stdint.h>
-#include <string.h>
-#include <assert.h>
-#include <net/if.h>
-#include <inttypes.h>
-#include <poll.h>
-
-#include "psock_lib.h"
-
-#ifndef bug_on
-# define bug_on(cond) assert(!(cond))
-#endif
-
-#ifndef __aligned_tpacket
-# define __aligned_tpacket __attribute__((aligned(TPACKET_ALIGNMENT)))
-#endif
-
-#ifndef __align_tpacket
-# define __align_tpacket(x) __attribute__((aligned(TPACKET_ALIGN(x))))
-#endif
-
-#define NUM_PACKETS 100
-#define ALIGN_8(x) (((x) + 8 - 1) & ~(8 - 1))
-
-struct ring {
- struct iovec *rd;
- uint8_t *mm_space;
- size_t mm_len, rd_len;
- struct sockaddr_ll ll;
- void (*walk)(int sock, struct ring *ring);
- int type, rd_num, flen, version;
- union {
- struct tpacket_req req;
- struct tpacket_req3 req3;
- };
-};
-
-struct block_desc {
- uint32_t version;
- uint32_t offset_to_priv;
- struct tpacket_hdr_v1 h1;
-};
-
-union frame_map {
- struct {
- struct tpacket_hdr tp_h __aligned_tpacket;
- struct sockaddr_ll s_ll __align_tpacket(sizeof(struct tpacket_hdr));
- } *v1;
- struct {
- struct tpacket2_hdr tp_h __aligned_tpacket;
- struct sockaddr_ll s_ll __align_tpacket(sizeof(struct tpacket2_hdr));
- } *v2;
- void *raw;
-};
-
-static unsigned int total_packets, total_bytes;
-
-static int pfsocket(int ver)
-{
- int ret, sock = socket(PF_PACKET, SOCK_RAW, htons(ETH_P_ALL));
- if (sock == -1) {
- perror("socket");
- exit(1);
- }
-
- ret = setsockopt(sock, SOL_PACKET, PACKET_VERSION, &ver, sizeof(ver));
- if (ret == -1) {
- perror("setsockopt");
- exit(1);
- }
-
- return sock;
-}
-
-static void status_bar_update(void)
-{
- if (total_packets % 10 == 0) {
- fprintf(stderr, ".");
- fflush(stderr);
- }
-}
-
-static void test_payload(void *pay, size_t len)
-{
- struct ethhdr *eth = pay;
-
- if (len < sizeof(struct ethhdr)) {
- fprintf(stderr, "test_payload: packet too "
- "small: %zu bytes!\n", len);
- exit(1);
- }
-
- if (eth->h_proto != htons(ETH_P_IP)) {
- fprintf(stderr, "test_payload: wrong ethernet "
- "type: 0x%x!\n", ntohs(eth->h_proto));
- exit(1);
- }
-}
-
-static void create_payload(void *pay, size_t *len)
-{
- int i;
- struct ethhdr *eth = pay;
- struct iphdr *ip = pay + sizeof(*eth);
-
- /* Lets create some broken crap, that still passes
- * our BPF filter.
- */
-
- *len = DATA_LEN + 42;
-
- memset(pay, 0xff, ETH_ALEN * 2);
- eth->h_proto = htons(ETH_P_IP);
-
- for (i = 0; i < sizeof(*ip); ++i)
- ((uint8_t *) pay)[i + sizeof(*eth)] = (uint8_t) rand();
-
- ip->ihl = 5;
- ip->version = 4;
- ip->protocol = 0x11;
- ip->frag_off = 0;
- ip->ttl = 64;
- ip->tot_len = htons((uint16_t) *len - sizeof(*eth));
-
- ip->saddr = htonl(INADDR_LOOPBACK);
- ip->daddr = htonl(INADDR_LOOPBACK);
-
- memset(pay + sizeof(*eth) + sizeof(*ip),
- DATA_CHAR, DATA_LEN);
-}
-
-static inline int __v1_rx_kernel_ready(struct tpacket_hdr *hdr)
-{
- return ((hdr->tp_status & TP_STATUS_USER) == TP_STATUS_USER);
-}
-
-static inline void __v1_rx_user_ready(struct tpacket_hdr *hdr)
-{
- hdr->tp_status = TP_STATUS_KERNEL;
- __sync_synchronize();
-}
-
-static inline int __v2_rx_kernel_ready(struct tpacket2_hdr *hdr)
-{
- return ((hdr->tp_status & TP_STATUS_USER) == TP_STATUS_USER);
-}
-
-static inline void __v2_rx_user_ready(struct tpacket2_hdr *hdr)
-{
- hdr->tp_status = TP_STATUS_KERNEL;
- __sync_synchronize();
-}
-
-static inline int __v1_v2_rx_kernel_ready(void *base, int version)
-{
- switch (version) {
- case TPACKET_V1:
- return __v1_rx_kernel_ready(base);
- case TPACKET_V2:
- return __v2_rx_kernel_ready(base);
- default:
- bug_on(1);
- return 0;
- }
-}
-
-static inline void __v1_v2_rx_user_ready(void *base, int version)
-{
- switch (version) {
- case TPACKET_V1:
- __v1_rx_user_ready(base);
- break;
- case TPACKET_V2:
- __v2_rx_user_ready(base);
- break;
- }
-}
-
-static void walk_v1_v2_rx(int sock, struct ring *ring)
-{
- struct pollfd pfd;
- int udp_sock[2];
- union frame_map ppd;
- unsigned int frame_num = 0;
-
- bug_on(ring->type != PACKET_RX_RING);
-
- pair_udp_open(udp_sock, PORT_BASE);
- pair_udp_setfilter(sock);
-
- memset(&pfd, 0, sizeof(pfd));
- pfd.fd = sock;
- pfd.events = POLLIN | POLLERR;
- pfd.revents = 0;
-
- pair_udp_send(udp_sock, NUM_PACKETS);
-
- while (total_packets < NUM_PACKETS * 2) {
- while (__v1_v2_rx_kernel_ready(ring->rd[frame_num].iov_base,
- ring->version)) {
- ppd.raw = ring->rd[frame_num].iov_base;
-
- switch (ring->version) {
- case TPACKET_V1:
- test_payload((uint8_t *) ppd.raw + ppd.v1->tp_h.tp_mac,
- ppd.v1->tp_h.tp_snaplen);
- total_bytes += ppd.v1->tp_h.tp_snaplen;
- break;
-
- case TPACKET_V2:
- test_payload((uint8_t *) ppd.raw + ppd.v2->tp_h.tp_mac,
- ppd.v2->tp_h.tp_snaplen);
- total_bytes += ppd.v2->tp_h.tp_snaplen;
- break;
- }
-
- status_bar_update();
- total_packets++;
-
- __v1_v2_rx_user_ready(ppd.raw, ring->version);
-
- frame_num = (frame_num + 1) % ring->rd_num;
- }
-
- poll(&pfd, 1, 1);
- }
-
- pair_udp_close(udp_sock);
-
- if (total_packets != 2 * NUM_PACKETS) {
- fprintf(stderr, "walk_v%d_rx: received %u out of %u pkts\n",
- ring->version, total_packets, NUM_PACKETS);
- exit(1);
- }
-
- fprintf(stderr, " %u pkts (%u bytes)", NUM_PACKETS, total_bytes >> 1);
-}
-
-static inline int __v1_tx_kernel_ready(struct tpacket_hdr *hdr)
-{
- return !(hdr->tp_status & (TP_STATUS_SEND_REQUEST | TP_STATUS_SENDING));
-}
-
-static inline void __v1_tx_user_ready(struct tpacket_hdr *hdr)
-{
- hdr->tp_status = TP_STATUS_SEND_REQUEST;
- __sync_synchronize();
-}
-
-static inline int __v2_tx_kernel_ready(struct tpacket2_hdr *hdr)
-{
- return !(hdr->tp_status & (TP_STATUS_SEND_REQUEST | TP_STATUS_SENDING));
-}
-
-static inline void __v2_tx_user_ready(struct tpacket2_hdr *hdr)
-{
- hdr->tp_status = TP_STATUS_SEND_REQUEST;
- __sync_synchronize();
-}
-
-static inline int __v1_v2_tx_kernel_ready(void *base, int version)
-{
- switch (version) {
- case TPACKET_V1:
- return __v1_tx_kernel_ready(base);
- case TPACKET_V2:
- return __v2_tx_kernel_ready(base);
- default:
- bug_on(1);
- return 0;
- }
-}
-
-static inline void __v1_v2_tx_user_ready(void *base, int version)
-{
- switch (version) {
- case TPACKET_V1:
- __v1_tx_user_ready(base);
- break;
- case TPACKET_V2:
- __v2_tx_user_ready(base);
- break;
- }
-}
-
-static void __v1_v2_set_packet_loss_discard(int sock)
-{
- int ret, discard = 1;
-
- ret = setsockopt(sock, SOL_PACKET, PACKET_LOSS, (void *) &discard,
- sizeof(discard));
- if (ret == -1) {
- perror("setsockopt");
- exit(1);
- }
-}
-
-static void walk_v1_v2_tx(int sock, struct ring *ring)
-{
- struct pollfd pfd;
- int rcv_sock, ret;
- size_t packet_len;
- union frame_map ppd;
- char packet[1024];
- unsigned int frame_num = 0, got = 0;
- struct sockaddr_ll ll = {
- .sll_family = PF_PACKET,
- .sll_halen = ETH_ALEN,
- };
-
- bug_on(ring->type != PACKET_TX_RING);
- bug_on(ring->rd_num < NUM_PACKETS);
-
- rcv_sock = socket(PF_PACKET, SOCK_RAW, htons(ETH_P_ALL));
- if (rcv_sock == -1) {
- perror("socket");
- exit(1);
- }
-
- pair_udp_setfilter(rcv_sock);
-
- ll.sll_ifindex = if_nametoindex("lo");
- ret = bind(rcv_sock, (struct sockaddr *) &ll, sizeof(ll));
- if (ret == -1) {
- perror("bind");
- exit(1);
- }
-
- memset(&pfd, 0, sizeof(pfd));
- pfd.fd = sock;
- pfd.events = POLLOUT | POLLERR;
- pfd.revents = 0;
-
- total_packets = NUM_PACKETS;
- create_payload(packet, &packet_len);
-
- while (total_packets > 0) {
- while (__v1_v2_tx_kernel_ready(ring->rd[frame_num].iov_base,
- ring->version) &&
- total_packets > 0) {
- ppd.raw = ring->rd[frame_num].iov_base;
-
- switch (ring->version) {
- case TPACKET_V1:
- ppd.v1->tp_h.tp_snaplen = packet_len;
- ppd.v1->tp_h.tp_len = packet_len;
-
- memcpy((uint8_t *) ppd.raw + TPACKET_HDRLEN -
- sizeof(struct sockaddr_ll), packet,
- packet_len);
- total_bytes += ppd.v1->tp_h.tp_snaplen;
- break;
-
- case TPACKET_V2:
- ppd.v2->tp_h.tp_snaplen = packet_len;
- ppd.v2->tp_h.tp_len = packet_len;
-
- memcpy((uint8_t *) ppd.raw + TPACKET2_HDRLEN -
- sizeof(struct sockaddr_ll), packet,
- packet_len);
- total_bytes += ppd.v2->tp_h.tp_snaplen;
- break;
- }
-
- status_bar_update();
- total_packets--;
-
- __v1_v2_tx_user_ready(ppd.raw, ring->version);
-
- frame_num = (frame_num + 1) % ring->rd_num;
- }
-
- poll(&pfd, 1, 1);
- }
-
- bug_on(total_packets != 0);
-
- ret = sendto(sock, NULL, 0, 0, NULL, 0);
- if (ret == -1) {
- perror("sendto");
- exit(1);
- }
-
- while ((ret = recvfrom(rcv_sock, packet, sizeof(packet),
- 0, NULL, NULL)) > 0 &&
- total_packets < NUM_PACKETS) {
- got += ret;
- test_payload(packet, ret);
-
- status_bar_update();
- total_packets++;
- }
-
- close(rcv_sock);
-
- if (total_packets != NUM_PACKETS) {
- fprintf(stderr, "walk_v%d_rx: received %u out of %u pkts\n",
- ring->version, total_packets, NUM_PACKETS);
- exit(1);
- }
-
- fprintf(stderr, " %u pkts (%u bytes)", NUM_PACKETS, got);
-}
-
-static void walk_v1_v2(int sock, struct ring *ring)
-{
- if (ring->type == PACKET_RX_RING)
- walk_v1_v2_rx(sock, ring);
- else
- walk_v1_v2_tx(sock, ring);
-}
-
-static uint64_t __v3_prev_block_seq_num = 0;
-
-void __v3_test_block_seq_num(struct block_desc *pbd)
-{
- if (__v3_prev_block_seq_num + 1 != pbd->h1.seq_num) {
- fprintf(stderr, "\nprev_block_seq_num:%"PRIu64", expected "
- "seq:%"PRIu64" != actual seq:%"PRIu64"\n",
- __v3_prev_block_seq_num, __v3_prev_block_seq_num + 1,
- (uint64_t) pbd->h1.seq_num);
- exit(1);
- }
-
- __v3_prev_block_seq_num = pbd->h1.seq_num;
-}
-
-static void __v3_test_block_len(struct block_desc *pbd, uint32_t bytes, int block_num)
-{
- if (pbd->h1.num_pkts && bytes != pbd->h1.blk_len) {
- fprintf(stderr, "\nblock:%u with %upackets, expected "
- "len:%u != actual len:%u\n", block_num,
- pbd->h1.num_pkts, bytes, pbd->h1.blk_len);
- exit(1);
- }
-}
-
-static void __v3_test_block_header(struct block_desc *pbd, const int block_num)
-{
- if ((pbd->h1.block_status & TP_STATUS_USER) == 0) {
- fprintf(stderr, "\nblock %u: not in TP_STATUS_USER\n", block_num);
- exit(1);
- }
-
- __v3_test_block_seq_num(pbd);
-}
-
-static void __v3_walk_block(struct block_desc *pbd, const int block_num)
-{
- int num_pkts = pbd->h1.num_pkts, i;
- unsigned long bytes = 0, bytes_with_padding = ALIGN_8(sizeof(*pbd));
- struct tpacket3_hdr *ppd;
-
- __v3_test_block_header(pbd, block_num);
-
- ppd = (struct tpacket3_hdr *) ((uint8_t *) pbd +
- pbd->h1.offset_to_first_pkt);
-
- for (i = 0; i < num_pkts; ++i) {
- bytes += ppd->tp_snaplen;
-
- if (ppd->tp_next_offset)
- bytes_with_padding += ppd->tp_next_offset;
- else
- bytes_with_padding += ALIGN_8(ppd->tp_snaplen + ppd->tp_mac);
-
- test_payload((uint8_t *) ppd + ppd->tp_mac, ppd->tp_snaplen);
-
- status_bar_update();
- total_packets++;
-
- ppd = (struct tpacket3_hdr *) ((uint8_t *) ppd + ppd->tp_next_offset);
- __sync_synchronize();
- }
-
- __v3_test_block_len(pbd, bytes_with_padding, block_num);
- total_bytes += bytes;
-}
-
-void __v3_flush_block(struct block_desc *pbd)
-{
- pbd->h1.block_status = TP_STATUS_KERNEL;
- __sync_synchronize();
-}
-
-static void walk_v3_rx(int sock, struct ring *ring)
-{
- unsigned int block_num = 0;
- struct pollfd pfd;
- struct block_desc *pbd;
- int udp_sock[2];
-
- bug_on(ring->type != PACKET_RX_RING);
-
- pair_udp_open(udp_sock, PORT_BASE);
- pair_udp_setfilter(sock);
-
- memset(&pfd, 0, sizeof(pfd));
- pfd.fd = sock;
- pfd.events = POLLIN | POLLERR;
- pfd.revents = 0;
-
- pair_udp_send(udp_sock, NUM_PACKETS);
-
- while (total_packets < NUM_PACKETS * 2) {
- pbd = (struct block_desc *) ring->rd[block_num].iov_base;
-
- while ((pbd->h1.block_status & TP_STATUS_USER) == 0)
- poll(&pfd, 1, 1);
-
- __v3_walk_block(pbd, block_num);
- __v3_flush_block(pbd);
-
- block_num = (block_num + 1) % ring->rd_num;
- }
-
- pair_udp_close(udp_sock);
-
- if (total_packets != 2 * NUM_PACKETS) {
- fprintf(stderr, "walk_v3_rx: received %u out of %u pkts\n",
- total_packets, NUM_PACKETS);
- exit(1);
- }
-
- fprintf(stderr, " %u pkts (%u bytes)", NUM_PACKETS, total_bytes >> 1);
-}
-
-static void walk_v3(int sock, struct ring *ring)
-{
- if (ring->type == PACKET_RX_RING)
- walk_v3_rx(sock, ring);
- else
- bug_on(1);
-}
-
-static void __v1_v2_fill(struct ring *ring, unsigned int blocks)
-{
- ring->req.tp_block_size = getpagesize() << 2;
- ring->req.tp_frame_size = TPACKET_ALIGNMENT << 7;
- ring->req.tp_block_nr = blocks;
-
- ring->req.tp_frame_nr = ring->req.tp_block_size /
- ring->req.tp_frame_size *
- ring->req.tp_block_nr;
-
- ring->mm_len = ring->req.tp_block_size * ring->req.tp_block_nr;
- ring->walk = walk_v1_v2;
- ring->rd_num = ring->req.tp_frame_nr;
- ring->flen = ring->req.tp_frame_size;
-}
-
-static void __v3_fill(struct ring *ring, unsigned int blocks)
-{
- ring->req3.tp_retire_blk_tov = 64;
- ring->req3.tp_sizeof_priv = 0;
- ring->req3.tp_feature_req_word = TP_FT_REQ_FILL_RXHASH;
-
- ring->req3.tp_block_size = getpagesize() << 2;
- ring->req3.tp_frame_size = TPACKET_ALIGNMENT << 7;
- ring->req3.tp_block_nr = blocks;
-
- ring->req3.tp_frame_nr = ring->req3.tp_block_size /
- ring->req3.tp_frame_size *
- ring->req3.tp_block_nr;
-
- ring->mm_len = ring->req3.tp_block_size * ring->req3.tp_block_nr;
- ring->walk = walk_v3;
- ring->rd_num = ring->req3.tp_block_nr;
- ring->flen = ring->req3.tp_block_size;
-}
-
-static void setup_ring(int sock, struct ring *ring, int version, int type)
-{
- int ret = 0;
- unsigned int blocks = 256;
-
- ring->type = type;
- ring->version = version;
-
- switch (version) {
- case TPACKET_V1:
- case TPACKET_V2:
- if (type == PACKET_TX_RING)
- __v1_v2_set_packet_loss_discard(sock);
- __v1_v2_fill(ring, blocks);
- ret = setsockopt(sock, SOL_PACKET, type, &ring->req,
- sizeof(ring->req));
- break;
-
- case TPACKET_V3:
- __v3_fill(ring, blocks);
- ret = setsockopt(sock, SOL_PACKET, type, &ring->req3,
- sizeof(ring->req3));
- break;
- }
-
- if (ret == -1) {
- perror("setsockopt");
- exit(1);
- }
-
- ring->rd_len = ring->rd_num * sizeof(*ring->rd);
- ring->rd = malloc(ring->rd_len);
- if (ring->rd == NULL) {
- perror("malloc");
- exit(1);
- }
-
- total_packets = 0;
- total_bytes = 0;
-}
-
-static void mmap_ring(int sock, struct ring *ring)
-{
- int i;
-
- ring->mm_space = mmap(0, ring->mm_len, PROT_READ | PROT_WRITE,
- MAP_SHARED | MAP_LOCKED | MAP_POPULATE, sock, 0);
- if (ring->mm_space == MAP_FAILED) {
- perror("mmap");
- exit(1);
- }
-
- memset(ring->rd, 0, ring->rd_len);
- for (i = 0; i < ring->rd_num; ++i) {
- ring->rd[i].iov_base = ring->mm_space + (i * ring->flen);
- ring->rd[i].iov_len = ring->flen;
- }
-}
-
-static void bind_ring(int sock, struct ring *ring)
-{
- int ret;
-
- ring->ll.sll_family = PF_PACKET;
- ring->ll.sll_protocol = htons(ETH_P_ALL);
- ring->ll.sll_ifindex = if_nametoindex("lo");
- ring->ll.sll_hatype = 0;
- ring->ll.sll_pkttype = 0;
- ring->ll.sll_halen = 0;
-
- ret = bind(sock, (struct sockaddr *) &ring->ll, sizeof(ring->ll));
- if (ret == -1) {
- perror("bind");
- exit(1);
- }
-}
-
-static void walk_ring(int sock, struct ring *ring)
-{
- ring->walk(sock, ring);
-}
-
-static void unmap_ring(int sock, struct ring *ring)
-{
- munmap(ring->mm_space, ring->mm_len);
- free(ring->rd);
-}
-
-static int test_kernel_bit_width(void)
-{
- char in[512], *ptr;
- int num = 0, fd;
- ssize_t ret;
-
- fd = open("/proc/kallsyms", O_RDONLY);
- if (fd == -1) {
- perror("open");
- exit(1);
- }
-
- ret = read(fd, in, sizeof(in));
- if (ret <= 0) {
- perror("read");
- exit(1);
- }
-
- close(fd);
-
- ptr = in;
- while(!isspace(*ptr)) {
- num++;
- ptr++;
- }
-
- return num * 4;
-}
-
-static int test_user_bit_width(void)
-{
- return __WORDSIZE;
-}
-
-static const char *tpacket_str[] = {
- [TPACKET_V1] = "TPACKET_V1",
- [TPACKET_V2] = "TPACKET_V2",
- [TPACKET_V3] = "TPACKET_V3",
-};
-
-static const char *type_str[] = {
- [PACKET_RX_RING] = "PACKET_RX_RING",
- [PACKET_TX_RING] = "PACKET_TX_RING",
-};
-
-static int test_tpacket(int version, int type)
-{
- int sock;
- struct ring ring;
-
- fprintf(stderr, "test: %s with %s ", tpacket_str[version],
- type_str[type]);
- fflush(stderr);
-
- if (version == TPACKET_V1 &&
- test_kernel_bit_width() != test_user_bit_width()) {
- fprintf(stderr, "test: skip %s %s since user and kernel "
- "space have different bit width\n",
- tpacket_str[version], type_str[type]);
- return 0;
- }
-
- sock = pfsocket(version);
- memset(&ring, 0, sizeof(ring));
- setup_ring(sock, &ring, version, type);
- mmap_ring(sock, &ring);
- bind_ring(sock, &ring);
- walk_ring(sock, &ring);
- unmap_ring(sock, &ring);
- close(sock);
-
- fprintf(stderr, "\n");
- return 0;
-}
-
-int main(void)
-{
- int ret = 0;
-
- ret |= test_tpacket(TPACKET_V1, PACKET_RX_RING);
- ret |= test_tpacket(TPACKET_V1, PACKET_TX_RING);
-
- ret |= test_tpacket(TPACKET_V2, PACKET_RX_RING);
- ret |= test_tpacket(TPACKET_V2, PACKET_TX_RING);
-
- ret |= test_tpacket(TPACKET_V3, PACKET_RX_RING);
-
- if (ret)
- return 1;
-
- printf("OK. All tests passed\n");
- return 0;
-}
diff --git a/net/run_afpackettests b/net/run_afpackettests
deleted file mode 100644
index 5246e78..0000000
--- a/net/run_afpackettests
+++ /dev/null
@@ -1,26 +0,0 @@
-#!/bin/sh
-
-if [ $(id -u) != 0 ]; then
- echo $msg must be run as root >&2
- exit 0
-fi
-
-echo "--------------------"
-echo "running psock_fanout test"
-echo "--------------------"
-./psock_fanout
-if [ $? -ne 0 ]; then
- echo "[FAIL]"
-else
- echo "[PASS]"
-fi
-
-echo "--------------------"
-echo "running psock_tpacket test"
-echo "--------------------"
-./psock_tpacket
-if [ $? -ne 0 ]; then
- echo "[FAIL]"
-else
- echo "[PASS]"
-fi
diff --git a/net/run_netsocktests b/net/run_netsocktests
deleted file mode 100644
index c09a682..0000000
--- a/net/run_netsocktests
+++ /dev/null
@@ -1,12 +0,0 @@
-#!/bin/bash
-
-echo "--------------------"
-echo "running socket test"
-echo "--------------------"
-./socket
-if [ $? -ne 0 ]; then
- echo "[FAIL]"
-else
- echo "[PASS]"
-fi
-
diff --git a/net/socket.c b/net/socket.c
deleted file mode 100644
index 0f227f2..0000000
--- a/net/socket.c
+++ /dev/null
@@ -1,92 +0,0 @@
-#include <stdio.h>
-#include <errno.h>
-#include <unistd.h>
-#include <string.h>
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <netinet/in.h>
-
-struct socket_testcase {
- int domain;
- int type;
- int protocol;
-
- /* 0 = valid file descriptor
- * -foo = error foo
- */
- int expect;
-
- /* If non-zero, accept EAFNOSUPPORT to handle the case
- * of the protocol not being configured into the kernel.
- */
- int nosupport_ok;
-};
-
-static struct socket_testcase tests[] = {
- { AF_MAX, 0, 0, -EAFNOSUPPORT, 0 },
- { AF_INET, SOCK_STREAM, IPPROTO_TCP, 0, 1 },
- { AF_INET, SOCK_DGRAM, IPPROTO_TCP, -EPROTONOSUPPORT, 1 },
- { AF_INET, SOCK_DGRAM, IPPROTO_UDP, 0, 1 },
- { AF_INET, SOCK_STREAM, IPPROTO_UDP, -EPROTONOSUPPORT, 1 },
-};
-
-#define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0]))
-#define ERR_STRING_SZ 64
-
-static int run_tests(void)
-{
- char err_string1[ERR_STRING_SZ];
- char err_string2[ERR_STRING_SZ];
- int i, err;
-
- err = 0;
- for (i = 0; i < ARRAY_SIZE(tests); i++) {
- struct socket_testcase *s = &tests[i];
- int fd;
-
- fd = socket(s->domain, s->type, s->protocol);
- if (fd < 0) {
- if (s->nosupport_ok &&
- errno == EAFNOSUPPORT)
- continue;
-
- if (s->expect < 0 &&
- errno == -s->expect)
- continue;
-
- strerror_r(-s->expect, err_string1, ERR_STRING_SZ);
- strerror_r(errno, err_string2, ERR_STRING_SZ);
-
- fprintf(stderr, "socket(%d, %d, %d) expected "
- "err (%s) got (%s)\n",
- s->domain, s->type, s->protocol,
- err_string1, err_string2);
-
- err = -1;
- break;
- } else {
- close(fd);
-
- if (s->expect < 0) {
- strerror_r(errno, err_string1, ERR_STRING_SZ);
-
- fprintf(stderr, "socket(%d, %d, %d) expected "
- "success got err (%s)\n",
- s->domain, s->type, s->protocol,
- err_string1);
-
- err = -1;
- break;
- }
- }
- }
-
- return err;
-}
-
-int main(void)
-{
- int err = run_tests();
-
- return err;
-}
diff --git a/powerpc/Makefile b/powerpc/Makefile
deleted file mode 100644
index 54833a7..0000000
--- a/powerpc/Makefile
+++ /dev/null
@@ -1,39 +0,0 @@
-# Makefile for powerpc selftests
-
-# ARCH can be overridden by the user for cross compiling
-ARCH ?= $(shell uname -m)
-ARCH := $(shell echo $(ARCH) | sed -e s/ppc.*/powerpc/)
-
-ifeq ($(ARCH),powerpc)
-
-GIT_VERSION = $(shell git describe --always --long --dirty || echo "unknown")
-
-CC := $(CROSS_COMPILE)$(CC)
-CFLAGS := -Wall -O2 -flto -Wall -Werror -DGIT_VERSION='"$(GIT_VERSION)"' -I$(CURDIR) $(CFLAGS)
-
-export CC CFLAGS
-
-TARGETS = pmu copyloops mm tm
-
-endif
-
-all:
- @for TARGET in $(TARGETS); do \
- $(MAKE) -C $$TARGET all; \
- done;
-
-run_tests: all
- @for TARGET in $(TARGETS); do \
- $(MAKE) -C $$TARGET run_tests; \
- done;
-
-clean:
- @for TARGET in $(TARGETS); do \
- $(MAKE) -C $$TARGET clean; \
- done;
- rm -f tags
-
-tags:
- find . -name '*.c' -o -name '*.h' | xargs ctags
-
-.PHONY: all run_tests clean tags
diff --git a/powerpc/copyloops/Makefile b/powerpc/copyloops/Makefile
deleted file mode 100644
index 6f2d3be..0000000
--- a/powerpc/copyloops/Makefile
+++ /dev/null
@@ -1,29 +0,0 @@
-# The loops are all 64-bit code
-CFLAGS += -m64
-CFLAGS += -I$(CURDIR)
-CFLAGS += -D SELFTEST
-
-# Use our CFLAGS for the implicit .S rule
-ASFLAGS = $(CFLAGS)
-
-PROGS := copyuser_64 copyuser_power7 memcpy_64 memcpy_power7
-EXTRA_SOURCES := validate.c ../harness.c
-
-all: $(PROGS)
-
-copyuser_64: CPPFLAGS += -D COPY_LOOP=test___copy_tofrom_user_base
-copyuser_power7: CPPFLAGS += -D COPY_LOOP=test___copy_tofrom_user_power7
-memcpy_64: CPPFLAGS += -D COPY_LOOP=test_memcpy
-memcpy_power7: CPPFLAGS += -D COPY_LOOP=test_memcpy_power7
-
-$(PROGS): $(EXTRA_SOURCES)
-
-run_tests: all
- @-for PROG in $(PROGS); do \
- ./$$PROG; \
- done;
-
-clean:
- rm -f $(PROGS) *.o
-
-.PHONY: all run_tests clean
diff --git a/powerpc/copyloops/asm/ppc_asm.h b/powerpc/copyloops/asm/ppc_asm.h
deleted file mode 100644
index d1dc374..0000000
--- a/powerpc/copyloops/asm/ppc_asm.h
+++ /dev/null
@@ -1,89 +0,0 @@
-#include <ppc-asm.h>
-
-#define CONFIG_ALTIVEC
-
-#define r1 1
-
-#define vr0 0
-#define vr1 1
-#define vr2 2
-#define vr3 3
-#define vr4 4
-#define vr5 5
-#define vr6 6
-#define vr7 7
-#define vr8 8
-#define vr9 9
-#define vr10 10
-#define vr11 11
-#define vr12 12
-#define vr13 13
-#define vr14 14
-#define vr15 15
-#define vr16 16
-#define vr17 17
-#define vr18 18
-#define vr19 19
-#define vr20 20
-#define vr21 21
-#define vr22 22
-#define vr23 23
-#define vr24 24
-#define vr25 25
-#define vr26 26
-#define vr27 27
-#define vr28 28
-#define vr29 29
-#define vr30 30
-#define vr31 31
-
-#define R14 r14
-#define R15 r15
-#define R16 r16
-#define R17 r17
-#define R18 r18
-#define R19 r19
-#define R20 r20
-#define R21 r21
-#define R22 r22
-#define R29 r29
-#define R30 r30
-#define R31 r31
-
-#define STACKFRAMESIZE 256
-#define STK_REG(i) (112 + ((i)-14)*8)
-
-#define _GLOBAL(A) FUNC_START(test_ ## A)
-#define _GLOBAL_TOC(A) _GLOBAL(A)
-
-#define PPC_MTOCRF(A, B) mtocrf A, B
-
-FUNC_START(enter_vmx_usercopy)
- li r3,1
- blr
-
-FUNC_START(exit_vmx_usercopy)
- li r3,0
- blr
-
-FUNC_START(enter_vmx_copy)
- li r3,1
- blr
-
-FUNC_START(exit_vmx_copy)
- blr
-
-FUNC_START(memcpy_power7)
- blr
-
-FUNC_START(__copy_tofrom_user_power7)
- blr
-
-FUNC_START(__copy_tofrom_user_base)
- blr
-
-#define BEGIN_FTR_SECTION
-#define FTR_SECTION_ELSE
-#define ALT_FTR_SECTION_END_IFCLR(x)
-#define ALT_FTR_SECTION_END(x, y)
-#define END_FTR_SECTION_IFCLR(x)
diff --git a/powerpc/copyloops/asm/processor.h b/powerpc/copyloops/asm/processor.h
deleted file mode 100644
index e69de29..0000000
--- a/powerpc/copyloops/asm/processor.h
+++ /dev/null
diff --git a/powerpc/copyloops/copyuser_64.S b/powerpc/copyloops/copyuser_64.S
deleted file mode 120000
index f1c418a..0000000
--- a/powerpc/copyloops/copyuser_64.S
+++ /dev/null
@@ -1 +0,0 @@
-../../../../../arch/powerpc/lib/copyuser_64.S \ No newline at end of file
diff --git a/powerpc/copyloops/copyuser_power7.S b/powerpc/copyloops/copyuser_power7.S
deleted file mode 120000
index 4786895..0000000
--- a/powerpc/copyloops/copyuser_power7.S
+++ /dev/null
@@ -1 +0,0 @@
-../../../../../arch/powerpc/lib/copyuser_power7.S \ No newline at end of file
diff --git a/powerpc/copyloops/memcpy_64.S b/powerpc/copyloops/memcpy_64.S
deleted file mode 120000
index cce33fb..0000000
--- a/powerpc/copyloops/memcpy_64.S
+++ /dev/null
@@ -1 +0,0 @@
-../../../../../arch/powerpc/lib/memcpy_64.S \ No newline at end of file
diff --git a/powerpc/copyloops/memcpy_power7.S b/powerpc/copyloops/memcpy_power7.S
deleted file mode 120000
index 0d6fbfa..0000000
--- a/powerpc/copyloops/memcpy_power7.S
+++ /dev/null
@@ -1 +0,0 @@
-../../../../../arch/powerpc/lib/memcpy_power7.S \ No newline at end of file
diff --git a/powerpc/copyloops/validate.c b/powerpc/copyloops/validate.c
deleted file mode 100644
index 1750ff5..0000000
--- a/powerpc/copyloops/validate.c
+++ /dev/null
@@ -1,99 +0,0 @@
-#include <malloc.h>
-#include <string.h>
-#include <stdlib.h>
-#include <stdbool.h>
-
-#include "../utils.h"
-
-#define MAX_LEN 8192
-#define MAX_OFFSET 16
-#define MIN_REDZONE 128
-#define BUFLEN (MAX_LEN+MAX_OFFSET+2*MIN_REDZONE)
-#define POISON 0xa5
-
-unsigned long COPY_LOOP(void *to, const void *from, unsigned long size);
-
-static void do_one(char *src, char *dst, unsigned long src_off,
- unsigned long dst_off, unsigned long len, void *redzone,
- void *fill)
-{
- char *srcp, *dstp;
- unsigned long ret;
- unsigned long i;
-
- srcp = src + MIN_REDZONE + src_off;
- dstp = dst + MIN_REDZONE + dst_off;
-
- memset(src, POISON, BUFLEN);
- memset(dst, POISON, BUFLEN);
- memcpy(srcp, fill, len);
-
- ret = COPY_LOOP(dstp, srcp, len);
- if (ret && ret != (unsigned long)dstp) {
- printf("(%p,%p,%ld) returned %ld\n", dstp, srcp, len, ret);
- abort();
- }
-
- if (memcmp(dstp, srcp, len)) {
- printf("(%p,%p,%ld) miscompare\n", dstp, srcp, len);
- printf("src: ");
- for (i = 0; i < len; i++)
- printf("%02x ", srcp[i]);
- printf("\ndst: ");
- for (i = 0; i < len; i++)
- printf("%02x ", dstp[i]);
- printf("\n");
- abort();
- }
-
- if (memcmp(dst, redzone, dstp - dst)) {
- printf("(%p,%p,%ld) redzone before corrupted\n",
- dstp, srcp, len);
- abort();
- }
-
- if (memcmp(dstp+len, redzone, dst+BUFLEN-(dstp+len))) {
- printf("(%p,%p,%ld) redzone after corrupted\n",
- dstp, srcp, len);
- abort();
- }
-}
-
-int test_copy_loop(void)
-{
- char *src, *dst, *redzone, *fill;
- unsigned long len, src_off, dst_off;
- unsigned long i;
-
- src = memalign(BUFLEN, BUFLEN);
- dst = memalign(BUFLEN, BUFLEN);
- redzone = malloc(BUFLEN);
- fill = malloc(BUFLEN);
-
- if (!src || !dst || !redzone || !fill) {
- fprintf(stderr, "malloc failed\n");
- exit(1);
- }
-
- memset(redzone, POISON, BUFLEN);
-
- /* Fill with sequential bytes */
- for (i = 0; i < BUFLEN; i++)
- fill[i] = i & 0xff;
-
- for (len = 1; len < MAX_LEN; len++) {
- for (src_off = 0; src_off < MAX_OFFSET; src_off++) {
- for (dst_off = 0; dst_off < MAX_OFFSET; dst_off++) {
- do_one(src, dst, src_off, dst_off, len,
- redzone, fill);
- }
- }
- }
-
- return 0;
-}
-
-int main(void)
-{
- return test_harness(test_copy_loop, str(COPY_LOOP));
-}
diff --git a/powerpc/harness.c b/powerpc/harness.c
deleted file mode 100644
index 8ebc58a..0000000
--- a/powerpc/harness.c
+++ /dev/null
@@ -1,114 +0,0 @@
-/*
- * Copyright 2013, Michael Ellerman, IBM Corp.
- * Licensed under GPLv2.
- */
-
-#include <errno.h>
-#include <signal.h>
-#include <stdbool.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <sys/types.h>
-#include <sys/wait.h>
-#include <unistd.h>
-
-#include "subunit.h"
-#include "utils.h"
-
-#define TIMEOUT 120
-#define KILL_TIMEOUT 5
-
-
-int run_test(int (test_function)(void), char *name)
-{
- bool terminated;
- int rc, status;
- pid_t pid;
-
- /* Make sure output is flushed before forking */
- fflush(stdout);
-
- pid = fork();
- if (pid == 0) {
- setpgid(0, 0);
- exit(test_function());
- } else if (pid == -1) {
- perror("fork");
- return 1;
- }
-
- setpgid(pid, pid);
-
- /* Wake us up in timeout seconds */
- alarm(TIMEOUT);
- terminated = false;
-
-wait:
- rc = waitpid(pid, &status, 0);
- if (rc == -1) {
- if (errno != EINTR) {
- printf("unknown error from waitpid\n");
- return 1;
- }
-
- if (terminated) {
- printf("!! force killing %s\n", name);
- kill(-pid, SIGKILL);
- return 1;
- } else {
- printf("!! killing %s\n", name);
- kill(-pid, SIGTERM);
- terminated = true;
- alarm(KILL_TIMEOUT);
- goto wait;
- }
- }
-
- /* Kill anything else in the process group that is still running */
- kill(-pid, SIGTERM);
-
- if (WIFEXITED(status))
- status = WEXITSTATUS(status);
- else {
- if (WIFSIGNALED(status))
- printf("!! child died by signal %d\n", WTERMSIG(status));
- else
- printf("!! child died by unknown cause\n");
-
- status = 1; /* Signal or other */
- }
-
- return status;
-}
-
-static void alarm_handler(int signum)
-{
- /* Jut wake us up from waitpid */
-}
-
-static struct sigaction alarm_action = {
- .sa_handler = alarm_handler,
-};
-
-int test_harness(int (test_function)(void), char *name)
-{
- int rc;
-
- test_start(name);
- test_set_git_version(GIT_VERSION);
-
- if (sigaction(SIGALRM, &alarm_action, NULL)) {
- perror("sigaction");
- test_error(name);
- return 1;
- }
-
- rc = run_test(test_function, name);
-
- if (rc == MAGIC_SKIP_RETURN_VALUE)
- test_skip(name);
- else
- test_finish(name, rc);
-
- return rc;
-}
diff --git a/powerpc/mm/Makefile b/powerpc/mm/Makefile
deleted file mode 100644
index 357ccbd..0000000
--- a/powerpc/mm/Makefile
+++ /dev/null
@@ -1,18 +0,0 @@
-noarg:
- $(MAKE) -C ../
-
-PROGS := hugetlb_vs_thp_test
-
-all: $(PROGS)
-
-$(PROGS): ../harness.c
-
-run_tests: all
- @-for PROG in $(PROGS); do \
- ./$$PROG; \
- done;
-
-clean:
- rm -f $(PROGS)
-
-.PHONY: all run_tests clean
diff --git a/powerpc/mm/hugetlb_vs_thp_test.c b/powerpc/mm/hugetlb_vs_thp_test.c
deleted file mode 100644
index 3d8e5b0..0000000
--- a/powerpc/mm/hugetlb_vs_thp_test.c
+++ /dev/null
@@ -1,72 +0,0 @@
-#include <stdio.h>
-#include <sys/mman.h>
-#include <unistd.h>
-
-#include "utils.h"
-
-/* This must match the huge page & THP size */
-#define SIZE (16 * 1024 * 1024)
-
-static int test_body(void)
-{
- void *addr;
- char *p;
-
- addr = (void *)0xa0000000;
-
- p = mmap(addr, SIZE, PROT_READ | PROT_WRITE,
- MAP_HUGETLB | MAP_ANONYMOUS | MAP_PRIVATE, -1, 0);
- if (p != MAP_FAILED) {
- /*
- * Typically the mmap will fail because no huge pages are
- * allocated on the system. But if there are huge pages
- * allocated the mmap will succeed. That's fine too, we just
- * munmap here before continuing.
- */
- munmap(addr, SIZE);
- }
-
- p = mmap(addr, SIZE, PROT_READ | PROT_WRITE,
- MAP_ANONYMOUS | MAP_PRIVATE, -1, 0);
- if (p == MAP_FAILED) {
- printf("Mapping failed @ %p\n", addr);
- perror("mmap");
- return 1;
- }
-
- /*
- * Either a user or kernel access is sufficient to trigger the bug.
- * A kernel access is easier to spot & debug, as it will trigger the
- * softlockup or RCU stall detectors, and when the system is kicked
- * into xmon we get a backtrace in the kernel.
- *
- * A good option is:
- * getcwd(p, SIZE);
- *
- * For the purposes of this testcase it's preferable to spin in
- * userspace, so the harness can kill us if we get stuck. That way we
- * see a test failure rather than a dead system.
- */
- *p = 0xf;
-
- munmap(addr, SIZE);
-
- return 0;
-}
-
-static int test_main(void)
-{
- int i;
-
- /* 10,000 because it's a "bunch", and completes reasonably quickly */
- for (i = 0; i < 10000; i++)
- if (test_body())
- return 1;
-
- return 0;
-}
-
-int main(void)
-{
- return test_harness(test_main, "hugetlb_vs_thp");
-}
diff --git a/powerpc/pmu/Makefile b/powerpc/pmu/Makefile
deleted file mode 100644
index b9ff0db..0000000
--- a/powerpc/pmu/Makefile
+++ /dev/null
@@ -1,41 +0,0 @@
-noarg:
- $(MAKE) -C ../
-
-PROGS := count_instructions
-EXTRA_SOURCES := ../harness.c event.c
-
-all: $(PROGS) sub_all
-
-$(PROGS): $(EXTRA_SOURCES)
-
-# loop.S can only be built 64-bit
-count_instructions: loop.S count_instructions.c $(EXTRA_SOURCES)
- $(CC) $(CFLAGS) -m64 -o $@ $^
-
-run_tests: all sub_run_tests
- @-for PROG in $(PROGS); do \
- ./$$PROG; \
- done;
-
-clean: sub_clean
- rm -f $(PROGS) loop.o
-
-
-SUB_TARGETS = ebb
-
-sub_all:
- @for TARGET in $(SUB_TARGETS); do \
- $(MAKE) -C $$TARGET all; \
- done;
-
-sub_run_tests: all
- @for TARGET in $(SUB_TARGETS); do \
- $(MAKE) -C $$TARGET run_tests; \
- done;
-
-sub_clean:
- @for TARGET in $(SUB_TARGETS); do \
- $(MAKE) -C $$TARGET clean; \
- done;
-
-.PHONY: all run_tests clean sub_all sub_run_tests sub_clean
diff --git a/powerpc/pmu/count_instructions.c b/powerpc/pmu/count_instructions.c
deleted file mode 100644
index 312b4f0..0000000
--- a/powerpc/pmu/count_instructions.c
+++ /dev/null
@@ -1,135 +0,0 @@
-/*
- * Copyright 2013, Michael Ellerman, IBM Corp.
- * Licensed under GPLv2.
- */
-
-#define _GNU_SOURCE
-
-#include <stdio.h>
-#include <stdbool.h>
-#include <string.h>
-#include <sys/prctl.h>
-
-#include "event.h"
-#include "utils.h"
-
-extern void thirty_two_instruction_loop(u64 loops);
-
-static void setup_event(struct event *e, u64 config, char *name)
-{
- event_init_opts(e, config, PERF_TYPE_HARDWARE, name);
-
- e->attr.disabled = 1;
- e->attr.exclude_kernel = 1;
- e->attr.exclude_hv = 1;
- e->attr.exclude_idle = 1;
-}
-
-static int do_count_loop(struct event *events, u64 instructions,
- u64 overhead, bool report)
-{
- s64 difference, expected;
- double percentage;
-
- prctl(PR_TASK_PERF_EVENTS_ENABLE);
-
- /* Run for 1M instructions */
- thirty_two_instruction_loop(instructions >> 5);
-
- prctl(PR_TASK_PERF_EVENTS_DISABLE);
-
- event_read(&events[0]);
- event_read(&events[1]);
-
- expected = instructions + overhead;
- difference = events[0].result.value - expected;
- percentage = (double)difference / events[0].result.value * 100;
-
- if (report) {
- event_report(&events[0]);
- event_report(&events[1]);
-
- printf("Looped for %llu instructions, overhead %llu\n", instructions, overhead);
- printf("Expected %llu\n", expected);
- printf("Actual %llu\n", events[0].result.value);
- printf("Delta %lld, %f%%\n", difference, percentage);
- }
-
- event_reset(&events[0]);
- event_reset(&events[1]);
-
- if (difference < 0)
- difference = -difference;
-
- /* Tolerate a difference below 0.0001 % */
- difference *= 10000 * 100;
- if (difference / events[0].result.value)
- return -1;
-
- return 0;
-}
-
-/* Count how many instructions it takes to do a null loop */
-static u64 determine_overhead(struct event *events)
-{
- u64 current, overhead;
- int i;
-
- do_count_loop(events, 0, 0, false);
- overhead = events[0].result.value;
-
- for (i = 0; i < 100; i++) {
- do_count_loop(events, 0, 0, false);
- current = events[0].result.value;
- if (current < overhead) {
- printf("Replacing overhead %llu with %llu\n", overhead, current);
- overhead = current;
- }
- }
-
- return overhead;
-}
-
-static int count_instructions(void)
-{
- struct event events[2];
- u64 overhead;
-
- setup_event(&events[0], PERF_COUNT_HW_INSTRUCTIONS, "instructions");
- setup_event(&events[1], PERF_COUNT_HW_CPU_CYCLES, "cycles");
-
- if (event_open(&events[0])) {
- perror("perf_event_open");
- return -1;
- }
-
- if (event_open_with_group(&events[1], events[0].fd)) {
- perror("perf_event_open");
- return -1;
- }
-
- overhead = determine_overhead(events);
- printf("Overhead of null loop: %llu instructions\n", overhead);
-
- /* Run for 1M instructions */
- FAIL_IF(do_count_loop(events, 0x100000, overhead, true));
-
- /* Run for 10M instructions */
- FAIL_IF(do_count_loop(events, 0xa00000, overhead, true));
-
- /* Run for 100M instructions */
- FAIL_IF(do_count_loop(events, 0x6400000, overhead, true));
-
- /* Run for 1G instructions */
- FAIL_IF(do_count_loop(events, 0x40000000, overhead, true));
-
- event_close(&events[0]);
- event_close(&events[1]);
-
- return 0;
-}
-
-int main(void)
-{
- return test_harness(count_instructions, "count_instructions");
-}
diff --git a/powerpc/pmu/ebb/Makefile b/powerpc/pmu/ebb/Makefile
deleted file mode 100644
index edbba2a..0000000
--- a/powerpc/pmu/ebb/Makefile
+++ /dev/null
@@ -1,32 +0,0 @@
-noarg:
- $(MAKE) -C ../../
-
-# The EBB handler is 64-bit code and everything links against it
-CFLAGS += -m64
-
-PROGS := reg_access_test event_attributes_test cycles_test \
- cycles_with_freeze_test pmc56_overflow_test \
- ebb_vs_cpu_event_test cpu_event_vs_ebb_test \
- cpu_event_pinned_vs_ebb_test task_event_vs_ebb_test \
- task_event_pinned_vs_ebb_test multi_ebb_procs_test \
- multi_counter_test pmae_handling_test \
- close_clears_pmcc_test instruction_count_test \
- fork_cleanup_test ebb_on_child_test \
- ebb_on_willing_child_test back_to_back_ebbs_test \
- lost_exception_test no_handler_test
-
-all: $(PROGS)
-
-$(PROGS): ../../harness.c ../event.c ../lib.c ebb.c ebb_handler.S trace.c
-
-instruction_count_test: ../loop.S
-
-lost_exception_test: ../lib.c
-
-run_tests: all
- @-for PROG in $(PROGS); do \
- ./$$PROG; \
- done;
-
-clean:
- rm -f $(PROGS)
diff --git a/powerpc/pmu/ebb/back_to_back_ebbs_test.c b/powerpc/pmu/ebb/back_to_back_ebbs_test.c
deleted file mode 100644
index 66ea765..0000000
--- a/powerpc/pmu/ebb/back_to_back_ebbs_test.c
+++ /dev/null
@@ -1,106 +0,0 @@
-/*
- * Copyright 2014, Michael Ellerman, IBM Corp.
- * Licensed under GPLv2.
- */
-
-#include <stdbool.h>
-#include <stdio.h>
-#include <stdlib.h>
-
-#include "ebb.h"
-
-
-#define NUMBER_OF_EBBS 50
-
-/*
- * Test that if we overflow the counter while in the EBB handler, we take
- * another EBB on exiting from the handler.
- *
- * We do this by counting with a stupidly low sample period, causing us to
- * overflow the PMU while we're still in the EBB handler, leading to another
- * EBB.
- *
- * We get out of what would otherwise be an infinite loop by leaving the
- * counter frozen once we've taken enough EBBs.
- */
-
-static void ebb_callee(void)
-{
- uint64_t siar, val;
-
- val = mfspr(SPRN_BESCR);
- if (!(val & BESCR_PMEO)) {
- ebb_state.stats.spurious++;
- goto out;
- }
-
- ebb_state.stats.ebb_count++;
- trace_log_counter(ebb_state.trace, ebb_state.stats.ebb_count);
-
- /* Resets the PMC */
- count_pmc(1, sample_period);
-
-out:
- if (ebb_state.stats.ebb_count == NUMBER_OF_EBBS)
- /* Reset but leave counters frozen */
- reset_ebb_with_clear_mask(MMCR0_PMAO);
- else
- /* Unfreezes */
- reset_ebb();
-
- /* Do some stuff to chew some cycles and pop the counter */
- siar = mfspr(SPRN_SIAR);
- trace_log_reg(ebb_state.trace, SPRN_SIAR, siar);
-
- val = mfspr(SPRN_PMC1);
- trace_log_reg(ebb_state.trace, SPRN_PMC1, val);
-
- val = mfspr(SPRN_MMCR0);
- trace_log_reg(ebb_state.trace, SPRN_MMCR0, val);
-}
-
-int back_to_back_ebbs(void)
-{
- struct event event;
-
- event_init_named(&event, 0x1001e, "cycles");
- event_leader_ebb_init(&event);
-
- event.attr.exclude_kernel = 1;
- event.attr.exclude_hv = 1;
- event.attr.exclude_idle = 1;
-
- FAIL_IF(event_open(&event));
-
- setup_ebb_handler(ebb_callee);
-
- FAIL_IF(ebb_event_enable(&event));
-
- sample_period = 5;
-
- ebb_freeze_pmcs();
- mtspr(SPRN_PMC1, pmc_sample_period(sample_period));
- ebb_global_enable();
- ebb_unfreeze_pmcs();
-
- while (ebb_state.stats.ebb_count < NUMBER_OF_EBBS)
- FAIL_IF(core_busy_loop());
-
- ebb_global_disable();
- ebb_freeze_pmcs();
-
- count_pmc(1, sample_period);
-
- dump_ebb_state();
-
- event_close(&event);
-
- FAIL_IF(ebb_state.stats.ebb_count != NUMBER_OF_EBBS);
-
- return 0;
-}
-
-int main(void)
-{
- return test_harness(back_to_back_ebbs, "back_to_back_ebbs");
-}
diff --git a/powerpc/pmu/ebb/close_clears_pmcc_test.c b/powerpc/pmu/ebb/close_clears_pmcc_test.c
deleted file mode 100644
index 0f0423d..0000000
--- a/powerpc/pmu/ebb/close_clears_pmcc_test.c
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * Copyright 2014, Michael Ellerman, IBM Corp.
- * Licensed under GPLv2.
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <setjmp.h>
-#include <signal.h>
-
-#include "ebb.h"
-
-
-/*
- * Test that closing the EBB event clears MMCR0_PMCC, preventing further access
- * by userspace to the PMU hardware.
- */
-
-int close_clears_pmcc(void)
-{
- struct event event;
-
- event_init_named(&event, 0x1001e, "cycles");
- event_leader_ebb_init(&event);
-
- FAIL_IF(event_open(&event));
-
- ebb_enable_pmc_counting(1);
- setup_ebb_handler(standard_ebb_callee);
- ebb_global_enable();
- FAIL_IF(ebb_event_enable(&event));
-
- mtspr(SPRN_PMC1, pmc_sample_period(sample_period));
-
- while (ebb_state.stats.ebb_count < 1)
- FAIL_IF(core_busy_loop());
-
- ebb_global_disable();
- event_close(&event);
-
- FAIL_IF(ebb_state.stats.ebb_count == 0);
-
- /* The real test is here, do we take a SIGILL when writing PMU regs now
- * that we have closed the event. We expect that we will. */
-
- FAIL_IF(catch_sigill(write_pmc1));
-
- /* We should still be able to read EBB regs though */
- mfspr(SPRN_EBBHR);
- mfspr(SPRN_EBBRR);
- mfspr(SPRN_BESCR);
-
- return 0;
-}
-
-int main(void)
-{
- return test_harness(close_clears_pmcc, "close_clears_pmcc");
-}
diff --git a/powerpc/pmu/ebb/cpu_event_pinned_vs_ebb_test.c b/powerpc/pmu/ebb/cpu_event_pinned_vs_ebb_test.c
deleted file mode 100644
index d3ed64d..0000000
--- a/powerpc/pmu/ebb/cpu_event_pinned_vs_ebb_test.c
+++ /dev/null
@@ -1,93 +0,0 @@
-/*
- * Copyright 2014, Michael Ellerman, IBM Corp.
- * Licensed under GPLv2.
- */
-
-#include <signal.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <stdbool.h>
-#include <sys/types.h>
-#include <sys/wait.h>
-#include <unistd.h>
-
-#include "ebb.h"
-
-
-/*
- * Tests a pinned cpu event vs an EBB - in that order. The pinned cpu event
- * should remain and the EBB event should fail to enable.
- */
-
-static int setup_cpu_event(struct event *event, int cpu)
-{
- event_init_named(event, 0x400FA, "PM_RUN_INST_CMPL");
-
- event->attr.pinned = 1;
-
- event->attr.exclude_kernel = 1;
- event->attr.exclude_hv = 1;
- event->attr.exclude_idle = 1;
-
- SKIP_IF(require_paranoia_below(1));
- FAIL_IF(event_open_with_cpu(event, cpu));
- FAIL_IF(event_enable(event));
-
- return 0;
-}
-
-int cpu_event_pinned_vs_ebb(void)
-{
- union pipe read_pipe, write_pipe;
- struct event event;
- int cpu, rc;
- pid_t pid;
-
- cpu = pick_online_cpu();
- FAIL_IF(cpu < 0);
- FAIL_IF(bind_to_cpu(cpu));
-
- FAIL_IF(pipe(read_pipe.fds) == -1);
- FAIL_IF(pipe(write_pipe.fds) == -1);
-
- pid = fork();
- if (pid == 0) {
- /* NB order of pipes looks reversed */
- exit(ebb_child(write_pipe, read_pipe));
- }
-
- /* We setup the cpu event first */
- rc = setup_cpu_event(&event, cpu);
- if (rc) {
- kill_child_and_wait(pid);
- return rc;
- }
-
- /* Signal the child to install its EBB event and wait */
- if (sync_with_child(read_pipe, write_pipe))
- /* If it fails, wait for it to exit */
- goto wait;
-
- /* Signal the child to run */
- FAIL_IF(sync_with_child(read_pipe, write_pipe));
-
-wait:
- /* We expect it to fail to read the event */
- FAIL_IF(wait_for_child(pid) != 2);
-
- FAIL_IF(event_disable(&event));
- FAIL_IF(event_read(&event));
-
- event_report(&event);
-
- /* The cpu event should have run */
- FAIL_IF(event.result.value == 0);
- FAIL_IF(event.result.enabled != event.result.running);
-
- return 0;
-}
-
-int main(void)
-{
- return test_harness(cpu_event_pinned_vs_ebb, "cpu_event_pinned_vs_ebb");
-}
diff --git a/powerpc/pmu/ebb/cpu_event_vs_ebb_test.c b/powerpc/pmu/ebb/cpu_event_vs_ebb_test.c
deleted file mode 100644
index 8b972c2..0000000
--- a/powerpc/pmu/ebb/cpu_event_vs_ebb_test.c
+++ /dev/null
@@ -1,89 +0,0 @@
-/*
- * Copyright 2014, Michael Ellerman, IBM Corp.
- * Licensed under GPLv2.
- */
-
-#include <signal.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <stdbool.h>
-#include <sys/types.h>
-#include <sys/wait.h>
-#include <unistd.h>
-
-#include "ebb.h"
-
-
-/*
- * Tests a cpu event vs an EBB - in that order. The EBB should force the cpu
- * event off the PMU.
- */
-
-static int setup_cpu_event(struct event *event, int cpu)
-{
- event_init_named(event, 0x400FA, "PM_RUN_INST_CMPL");
-
- event->attr.exclude_kernel = 1;
- event->attr.exclude_hv = 1;
- event->attr.exclude_idle = 1;
-
- SKIP_IF(require_paranoia_below(1));
- FAIL_IF(event_open_with_cpu(event, cpu));
- FAIL_IF(event_enable(event));
-
- return 0;
-}
-
-int cpu_event_vs_ebb(void)
-{
- union pipe read_pipe, write_pipe;
- struct event event;
- int cpu, rc;
- pid_t pid;
-
- cpu = pick_online_cpu();
- FAIL_IF(cpu < 0);
- FAIL_IF(bind_to_cpu(cpu));
-
- FAIL_IF(pipe(read_pipe.fds) == -1);
- FAIL_IF(pipe(write_pipe.fds) == -1);
-
- pid = fork();
- if (pid == 0) {
- /* NB order of pipes looks reversed */
- exit(ebb_child(write_pipe, read_pipe));
- }
-
- /* We setup the cpu event first */
- rc = setup_cpu_event(&event, cpu);
- if (rc) {
- kill_child_and_wait(pid);
- return rc;
- }
-
- /* Signal the child to install its EBB event and wait */
- if (sync_with_child(read_pipe, write_pipe))
- /* If it fails, wait for it to exit */
- goto wait;
-
- /* Signal the child to run */
- FAIL_IF(sync_with_child(read_pipe, write_pipe));
-
-wait:
- /* We expect the child to succeed */
- FAIL_IF(wait_for_child(pid));
-
- FAIL_IF(event_disable(&event));
- FAIL_IF(event_read(&event));
-
- event_report(&event);
-
- /* The cpu event may have run */
-
- return 0;
-}
-
-int main(void)
-{
- return test_harness(cpu_event_vs_ebb, "cpu_event_vs_ebb");
-}
diff --git a/powerpc/pmu/ebb/cycles_test.c b/powerpc/pmu/ebb/cycles_test.c
deleted file mode 100644
index 8590fc1..0000000
--- a/powerpc/pmu/ebb/cycles_test.c
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * Copyright 2014, Michael Ellerman, IBM Corp.
- * Licensed under GPLv2.
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-
-#include "ebb.h"
-
-
-/*
- * Basic test that counts user cycles and takes EBBs.
- */
-int cycles(void)
-{
- struct event event;
-
- event_init_named(&event, 0x1001e, "cycles");
- event_leader_ebb_init(&event);
-
- event.attr.exclude_kernel = 1;
- event.attr.exclude_hv = 1;
- event.attr.exclude_idle = 1;
-
- FAIL_IF(event_open(&event));
-
- ebb_enable_pmc_counting(1);
- setup_ebb_handler(standard_ebb_callee);
- ebb_global_enable();
- FAIL_IF(ebb_event_enable(&event));
-
- mtspr(SPRN_PMC1, pmc_sample_period(sample_period));
-
- while (ebb_state.stats.ebb_count < 10) {
- FAIL_IF(core_busy_loop());
- FAIL_IF(ebb_check_mmcr0());
- }
-
- ebb_global_disable();
- ebb_freeze_pmcs();
-
- count_pmc(1, sample_period);
-
- dump_ebb_state();
-
- event_close(&event);
-
- FAIL_IF(ebb_state.stats.ebb_count == 0);
- FAIL_IF(!ebb_check_count(1, sample_period, 100));
-
- return 0;
-}
-
-int main(void)
-{
- return test_harness(cycles, "cycles");
-}
diff --git a/powerpc/pmu/ebb/cycles_with_freeze_test.c b/powerpc/pmu/ebb/cycles_with_freeze_test.c
deleted file mode 100644
index 754b3f2..0000000
--- a/powerpc/pmu/ebb/cycles_with_freeze_test.c
+++ /dev/null
@@ -1,117 +0,0 @@
-/*
- * Copyright 2014, Michael Ellerman, IBM Corp.
- * Licensed under GPLv2.
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <stdbool.h>
-
-#include "ebb.h"
-
-
-/*
- * Test of counting cycles while using MMCR0_FC (freeze counters) to only count
- * parts of the code. This is complicated by the fact that FC is set by the
- * hardware when the event overflows. We may take the EBB after we have set FC,
- * so we have to be careful about whether we clear FC at the end of the EBB
- * handler or not.
- */
-
-static bool counters_frozen = false;
-static int ebbs_while_frozen = 0;
-
-static void ebb_callee(void)
-{
- uint64_t mask, val;
-
- mask = MMCR0_PMAO | MMCR0_FC;
-
- val = mfspr(SPRN_BESCR);
- if (!(val & BESCR_PMEO)) {
- ebb_state.stats.spurious++;
- goto out;
- }
-
- ebb_state.stats.ebb_count++;
- trace_log_counter(ebb_state.trace, ebb_state.stats.ebb_count);
-
- val = mfspr(SPRN_MMCR0);
- trace_log_reg(ebb_state.trace, SPRN_MMCR0, val);
-
- if (counters_frozen) {
- trace_log_string(ebb_state.trace, "frozen");
- ebbs_while_frozen++;
- mask &= ~MMCR0_FC;
- }
-
- count_pmc(1, sample_period);
-out:
- reset_ebb_with_clear_mask(mask);
-}
-
-int cycles_with_freeze(void)
-{
- struct event event;
- uint64_t val;
- bool fc_cleared;
-
- event_init_named(&event, 0x1001e, "cycles");
- event_leader_ebb_init(&event);
-
- event.attr.exclude_kernel = 1;
- event.attr.exclude_hv = 1;
- event.attr.exclude_idle = 1;
-
- FAIL_IF(event_open(&event));
-
- setup_ebb_handler(ebb_callee);
- ebb_global_enable();
- FAIL_IF(ebb_event_enable(&event));
-
- mtspr(SPRN_PMC1, pmc_sample_period(sample_period));
-
- fc_cleared = false;
-
- /* Make sure we loop until we take at least one EBB */
- while ((ebb_state.stats.ebb_count < 20 && !fc_cleared) ||
- ebb_state.stats.ebb_count < 1)
- {
- counters_frozen = false;
- mb();
- mtspr(SPRN_MMCR0, mfspr(SPRN_MMCR0) & ~MMCR0_FC);
-
- FAIL_IF(core_busy_loop());
-
- counters_frozen = true;
- mb();
- mtspr(SPRN_MMCR0, mfspr(SPRN_MMCR0) | MMCR0_FC);
-
- val = mfspr(SPRN_MMCR0);
- if (! (val & MMCR0_FC)) {
- printf("Outside of loop, FC NOT set MMCR0 0x%lx\n", val);
- fc_cleared = true;
- }
- }
-
- ebb_global_disable();
- ebb_freeze_pmcs();
-
- count_pmc(1, sample_period);
-
- dump_ebb_state();
-
- printf("EBBs while frozen %d\n", ebbs_while_frozen);
-
- event_close(&event);
-
- FAIL_IF(ebb_state.stats.ebb_count == 0);
- FAIL_IF(fc_cleared);
-
- return 0;
-}
-
-int main(void)
-{
- return test_harness(cycles_with_freeze, "cycles_with_freeze");
-}
diff --git a/powerpc/pmu/ebb/ebb.c b/powerpc/pmu/ebb/ebb.c
deleted file mode 100644
index 1b46be9..0000000
--- a/powerpc/pmu/ebb/ebb.c
+++ /dev/null
@@ -1,727 +0,0 @@
-/*
- * Copyright 2014, Michael Ellerman, IBM Corp.
- * Licensed under GPLv2.
- */
-
-#define _GNU_SOURCE /* For CPU_ZERO etc. */
-
-#include <sched.h>
-#include <sys/wait.h>
-#include <setjmp.h>
-#include <signal.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <sys/ioctl.h>
-
-#include "trace.h"
-#include "reg.h"
-#include "ebb.h"
-
-
-void (*ebb_user_func)(void);
-
-void ebb_hook(void)
-{
- if (ebb_user_func)
- ebb_user_func();
-}
-
-struct ebb_state ebb_state;
-
-u64 sample_period = 0x40000000ull;
-
-void reset_ebb_with_clear_mask(unsigned long mmcr0_clear_mask)
-{
- u64 val;
-
- /* 2) clear MMCR0[PMAO] - docs say BESCR[PMEO] should do this */
- /* 3) set MMCR0[PMAE] - docs say BESCR[PME] should do this */
- val = mfspr(SPRN_MMCR0);
- mtspr(SPRN_MMCR0, (val & ~mmcr0_clear_mask) | MMCR0_PMAE);
-
- /* 4) clear BESCR[PMEO] */
- mtspr(SPRN_BESCRR, BESCR_PMEO);
-
- /* 5) set BESCR[PME] */
- mtspr(SPRN_BESCRS, BESCR_PME);
-
- /* 6) rfebb 1 - done in our caller */
-}
-
-void reset_ebb(void)
-{
- reset_ebb_with_clear_mask(MMCR0_PMAO | MMCR0_FC);
-}
-
-/* Called outside of the EBB handler to check MMCR0 is sane */
-int ebb_check_mmcr0(void)
-{
- u64 val;
-
- val = mfspr(SPRN_MMCR0);
- if ((val & (MMCR0_FC | MMCR0_PMAO)) == MMCR0_FC) {
- /* It's OK if we see FC & PMAO, but not FC by itself */
- printf("Outside of loop, only FC set 0x%llx\n", val);
- return 1;
- }
-
- return 0;
-}
-
-bool ebb_check_count(int pmc, u64 sample_period, int fudge)
-{
- u64 count, upper, lower;
-
- count = ebb_state.stats.pmc_count[PMC_INDEX(pmc)];
-
- lower = ebb_state.stats.ebb_count * (sample_period - fudge);
-
- if (count < lower) {
- printf("PMC%d count (0x%llx) below lower limit 0x%llx (-0x%llx)\n",
- pmc, count, lower, lower - count);
- return false;
- }
-
- upper = ebb_state.stats.ebb_count * (sample_period + fudge);
-
- if (count > upper) {
- printf("PMC%d count (0x%llx) above upper limit 0x%llx (+0x%llx)\n",
- pmc, count, upper, count - upper);
- return false;
- }
-
- printf("PMC%d count (0x%llx) is between 0x%llx and 0x%llx delta +0x%llx/-0x%llx\n",
- pmc, count, lower, upper, count - lower, upper - count);
-
- return true;
-}
-
-void standard_ebb_callee(void)
-{
- int found, i;
- u64 val;
-
- val = mfspr(SPRN_BESCR);
- if (!(val & BESCR_PMEO)) {
- ebb_state.stats.spurious++;
- goto out;
- }
-
- ebb_state.stats.ebb_count++;
- trace_log_counter(ebb_state.trace, ebb_state.stats.ebb_count);
-
- val = mfspr(SPRN_MMCR0);
- trace_log_reg(ebb_state.trace, SPRN_MMCR0, val);
-
- found = 0;
- for (i = 1; i <= 6; i++) {
- if (ebb_state.pmc_enable[PMC_INDEX(i)])
- found += count_pmc(i, sample_period);
- }
-
- if (!found)
- ebb_state.stats.no_overflow++;
-
-out:
- reset_ebb();
-}
-
-extern void ebb_handler(void);
-
-void setup_ebb_handler(void (*callee)(void))
-{
- u64 entry;
-
-#if defined(_CALL_ELF) && _CALL_ELF == 2
- entry = (u64)ebb_handler;
-#else
- struct opd
- {
- u64 entry;
- u64 toc;
- } *opd;
-
- opd = (struct opd *)ebb_handler;
- entry = opd->entry;
-#endif
- printf("EBB Handler is at %#llx\n", entry);
-
- ebb_user_func = callee;
-
- /* Ensure ebb_user_func is set before we set the handler */
- mb();
- mtspr(SPRN_EBBHR, entry);
-
- /* Make sure the handler is set before we return */
- mb();
-}
-
-void clear_ebb_stats(void)
-{
- memset(&ebb_state.stats, 0, sizeof(ebb_state.stats));
-}
-
-void dump_summary_ebb_state(void)
-{
- printf("ebb_state:\n" \
- " ebb_count = %d\n" \
- " spurious = %d\n" \
- " negative = %d\n" \
- " no_overflow = %d\n" \
- " pmc[1] count = 0x%llx\n" \
- " pmc[2] count = 0x%llx\n" \
- " pmc[3] count = 0x%llx\n" \
- " pmc[4] count = 0x%llx\n" \
- " pmc[5] count = 0x%llx\n" \
- " pmc[6] count = 0x%llx\n",
- ebb_state.stats.ebb_count, ebb_state.stats.spurious,
- ebb_state.stats.negative, ebb_state.stats.no_overflow,
- ebb_state.stats.pmc_count[0], ebb_state.stats.pmc_count[1],
- ebb_state.stats.pmc_count[2], ebb_state.stats.pmc_count[3],
- ebb_state.stats.pmc_count[4], ebb_state.stats.pmc_count[5]);
-}
-
-static char *decode_mmcr0(u32 value)
-{
- static char buf[16];
-
- buf[0] = '\0';
-
- if (value & (1 << 31))
- strcat(buf, "FC ");
- if (value & (1 << 26))
- strcat(buf, "PMAE ");
- if (value & (1 << 7))
- strcat(buf, "PMAO ");
-
- return buf;
-}
-
-static char *decode_bescr(u64 value)
-{
- static char buf[16];
-
- buf[0] = '\0';
-
- if (value & (1ull << 63))
- strcat(buf, "GE ");
- if (value & (1ull << 32))
- strcat(buf, "PMAE ");
- if (value & 1)
- strcat(buf, "PMAO ");
-
- return buf;
-}
-
-void dump_ebb_hw_state(void)
-{
- u64 bescr;
- u32 mmcr0;
-
- mmcr0 = mfspr(SPRN_MMCR0);
- bescr = mfspr(SPRN_BESCR);
-
- printf("HW state:\n" \
- "MMCR0 0x%016x %s\n" \
- "EBBHR 0x%016lx\n" \
- "BESCR 0x%016llx %s\n" \
- "PMC1 0x%016lx\n" \
- "PMC2 0x%016lx\n" \
- "PMC3 0x%016lx\n" \
- "PMC4 0x%016lx\n" \
- "PMC5 0x%016lx\n" \
- "PMC6 0x%016lx\n" \
- "SIAR 0x%016lx\n",
- mmcr0, decode_mmcr0(mmcr0), mfspr(SPRN_EBBHR), bescr,
- decode_bescr(bescr), mfspr(SPRN_PMC1), mfspr(SPRN_PMC2),
- mfspr(SPRN_PMC3), mfspr(SPRN_PMC4), mfspr(SPRN_PMC5),
- mfspr(SPRN_PMC6), mfspr(SPRN_SIAR));
-}
-
-void dump_ebb_state(void)
-{
- dump_summary_ebb_state();
-
- dump_ebb_hw_state();
-
- trace_buffer_print(ebb_state.trace);
-}
-
-int count_pmc(int pmc, uint32_t sample_period)
-{
- uint32_t start_value;
- u64 val;
-
- /* 0) Read PMC */
- start_value = pmc_sample_period(sample_period);
-
- val = read_pmc(pmc);
- if (val < start_value)
- ebb_state.stats.negative++;
- else
- ebb_state.stats.pmc_count[PMC_INDEX(pmc)] += val - start_value;
-
- trace_log_reg(ebb_state.trace, SPRN_PMC1 + pmc - 1, val);
-
- /* 1) Reset PMC */
- write_pmc(pmc, start_value);
-
- /* Report if we overflowed */
- return val >= COUNTER_OVERFLOW;
-}
-
-int ebb_event_enable(struct event *e)
-{
- int rc;
-
- /* Ensure any SPR writes are ordered vs us */
- mb();
-
- rc = ioctl(e->fd, PERF_EVENT_IOC_ENABLE);
- if (rc)
- return rc;
-
- rc = event_read(e);
-
- /* Ditto */
- mb();
-
- return rc;
-}
-
-void ebb_freeze_pmcs(void)
-{
- mtspr(SPRN_MMCR0, mfspr(SPRN_MMCR0) | MMCR0_FC);
- mb();
-}
-
-void ebb_unfreeze_pmcs(void)
-{
- /* Unfreeze counters */
- mtspr(SPRN_MMCR0, mfspr(SPRN_MMCR0) & ~MMCR0_FC);
- mb();
-}
-
-void ebb_global_enable(void)
-{
- /* Enable EBBs globally and PMU EBBs */
- mtspr(SPRN_BESCR, 0x8000000100000000ull);
- mb();
-}
-
-void ebb_global_disable(void)
-{
- /* Disable EBBs & freeze counters, events are still scheduled */
- mtspr(SPRN_BESCRR, BESCR_PME);
- mb();
-}
-
-void event_ebb_init(struct event *e)
-{
- e->attr.config |= (1ull << 63);
-}
-
-void event_bhrb_init(struct event *e, unsigned ifm)
-{
- e->attr.config |= (1ull << 62) | ((u64)ifm << 60);
-}
-
-void event_leader_ebb_init(struct event *e)
-{
- event_ebb_init(e);
-
- e->attr.exclusive = 1;
- e->attr.pinned = 1;
-}
-
-int core_busy_loop(void)
-{
- int rc;
-
- asm volatile (
- "li 3, 0x3030\n"
- "std 3, -96(1)\n"
- "li 4, 0x4040\n"
- "std 4, -104(1)\n"
- "li 5, 0x5050\n"
- "std 5, -112(1)\n"
- "li 6, 0x6060\n"
- "std 6, -120(1)\n"
- "li 7, 0x7070\n"
- "std 7, -128(1)\n"
- "li 8, 0x0808\n"
- "std 8, -136(1)\n"
- "li 9, 0x0909\n"
- "std 9, -144(1)\n"
- "li 10, 0x1010\n"
- "std 10, -152(1)\n"
- "li 11, 0x1111\n"
- "std 11, -160(1)\n"
- "li 14, 0x1414\n"
- "std 14, -168(1)\n"
- "li 15, 0x1515\n"
- "std 15, -176(1)\n"
- "li 16, 0x1616\n"
- "std 16, -184(1)\n"
- "li 17, 0x1717\n"
- "std 17, -192(1)\n"
- "li 18, 0x1818\n"
- "std 18, -200(1)\n"
- "li 19, 0x1919\n"
- "std 19, -208(1)\n"
- "li 20, 0x2020\n"
- "std 20, -216(1)\n"
- "li 21, 0x2121\n"
- "std 21, -224(1)\n"
- "li 22, 0x2222\n"
- "std 22, -232(1)\n"
- "li 23, 0x2323\n"
- "std 23, -240(1)\n"
- "li 24, 0x2424\n"
- "std 24, -248(1)\n"
- "li 25, 0x2525\n"
- "std 25, -256(1)\n"
- "li 26, 0x2626\n"
- "std 26, -264(1)\n"
- "li 27, 0x2727\n"
- "std 27, -272(1)\n"
- "li 28, 0x2828\n"
- "std 28, -280(1)\n"
- "li 29, 0x2929\n"
- "std 29, -288(1)\n"
- "li 30, 0x3030\n"
- "li 31, 0x3131\n"
-
- "li 3, 0\n"
- "0: "
- "addi 3, 3, 1\n"
- "cmpwi 3, 100\n"
- "blt 0b\n"
-
- /* Return 1 (fail) unless we get through all the checks */
- "li 0, 1\n"
-
- /* Check none of our registers have been corrupted */
- "cmpwi 4, 0x4040\n"
- "bne 1f\n"
- "cmpwi 5, 0x5050\n"
- "bne 1f\n"
- "cmpwi 6, 0x6060\n"
- "bne 1f\n"
- "cmpwi 7, 0x7070\n"
- "bne 1f\n"
- "cmpwi 8, 0x0808\n"
- "bne 1f\n"
- "cmpwi 9, 0x0909\n"
- "bne 1f\n"
- "cmpwi 10, 0x1010\n"
- "bne 1f\n"
- "cmpwi 11, 0x1111\n"
- "bne 1f\n"
- "cmpwi 14, 0x1414\n"
- "bne 1f\n"
- "cmpwi 15, 0x1515\n"
- "bne 1f\n"
- "cmpwi 16, 0x1616\n"
- "bne 1f\n"
- "cmpwi 17, 0x1717\n"
- "bne 1f\n"
- "cmpwi 18, 0x1818\n"
- "bne 1f\n"
- "cmpwi 19, 0x1919\n"
- "bne 1f\n"
- "cmpwi 20, 0x2020\n"
- "bne 1f\n"
- "cmpwi 21, 0x2121\n"
- "bne 1f\n"
- "cmpwi 22, 0x2222\n"
- "bne 1f\n"
- "cmpwi 23, 0x2323\n"
- "bne 1f\n"
- "cmpwi 24, 0x2424\n"
- "bne 1f\n"
- "cmpwi 25, 0x2525\n"
- "bne 1f\n"
- "cmpwi 26, 0x2626\n"
- "bne 1f\n"
- "cmpwi 27, 0x2727\n"
- "bne 1f\n"
- "cmpwi 28, 0x2828\n"
- "bne 1f\n"
- "cmpwi 29, 0x2929\n"
- "bne 1f\n"
- "cmpwi 30, 0x3030\n"
- "bne 1f\n"
- "cmpwi 31, 0x3131\n"
- "bne 1f\n"
-
- /* Load junk into all our registers before we reload them from the stack. */
- "li 3, 0xde\n"
- "li 4, 0xad\n"
- "li 5, 0xbe\n"
- "li 6, 0xef\n"
- "li 7, 0xde\n"
- "li 8, 0xad\n"
- "li 9, 0xbe\n"
- "li 10, 0xef\n"
- "li 11, 0xde\n"
- "li 14, 0xad\n"
- "li 15, 0xbe\n"
- "li 16, 0xef\n"
- "li 17, 0xde\n"
- "li 18, 0xad\n"
- "li 19, 0xbe\n"
- "li 20, 0xef\n"
- "li 21, 0xde\n"
- "li 22, 0xad\n"
- "li 23, 0xbe\n"
- "li 24, 0xef\n"
- "li 25, 0xde\n"
- "li 26, 0xad\n"
- "li 27, 0xbe\n"
- "li 28, 0xef\n"
- "li 29, 0xdd\n"
-
- "ld 3, -96(1)\n"
- "cmpwi 3, 0x3030\n"
- "bne 1f\n"
- "ld 4, -104(1)\n"
- "cmpwi 4, 0x4040\n"
- "bne 1f\n"
- "ld 5, -112(1)\n"
- "cmpwi 5, 0x5050\n"
- "bne 1f\n"
- "ld 6, -120(1)\n"
- "cmpwi 6, 0x6060\n"
- "bne 1f\n"
- "ld 7, -128(1)\n"
- "cmpwi 7, 0x7070\n"
- "bne 1f\n"
- "ld 8, -136(1)\n"
- "cmpwi 8, 0x0808\n"
- "bne 1f\n"
- "ld 9, -144(1)\n"
- "cmpwi 9, 0x0909\n"
- "bne 1f\n"
- "ld 10, -152(1)\n"
- "cmpwi 10, 0x1010\n"
- "bne 1f\n"
- "ld 11, -160(1)\n"
- "cmpwi 11, 0x1111\n"
- "bne 1f\n"
- "ld 14, -168(1)\n"
- "cmpwi 14, 0x1414\n"
- "bne 1f\n"
- "ld 15, -176(1)\n"
- "cmpwi 15, 0x1515\n"
- "bne 1f\n"
- "ld 16, -184(1)\n"
- "cmpwi 16, 0x1616\n"
- "bne 1f\n"
- "ld 17, -192(1)\n"
- "cmpwi 17, 0x1717\n"
- "bne 1f\n"
- "ld 18, -200(1)\n"
- "cmpwi 18, 0x1818\n"
- "bne 1f\n"
- "ld 19, -208(1)\n"
- "cmpwi 19, 0x1919\n"
- "bne 1f\n"
- "ld 20, -216(1)\n"
- "cmpwi 20, 0x2020\n"
- "bne 1f\n"
- "ld 21, -224(1)\n"
- "cmpwi 21, 0x2121\n"
- "bne 1f\n"
- "ld 22, -232(1)\n"
- "cmpwi 22, 0x2222\n"
- "bne 1f\n"
- "ld 23, -240(1)\n"
- "cmpwi 23, 0x2323\n"
- "bne 1f\n"
- "ld 24, -248(1)\n"
- "cmpwi 24, 0x2424\n"
- "bne 1f\n"
- "ld 25, -256(1)\n"
- "cmpwi 25, 0x2525\n"
- "bne 1f\n"
- "ld 26, -264(1)\n"
- "cmpwi 26, 0x2626\n"
- "bne 1f\n"
- "ld 27, -272(1)\n"
- "cmpwi 27, 0x2727\n"
- "bne 1f\n"
- "ld 28, -280(1)\n"
- "cmpwi 28, 0x2828\n"
- "bne 1f\n"
- "ld 29, -288(1)\n"
- "cmpwi 29, 0x2929\n"
- "bne 1f\n"
-
- /* Load 0 (success) to return */
- "li 0, 0\n"
-
- "1: mr %0, 0\n"
-
- : "=r" (rc)
- : /* no inputs */
- : "3", "4", "5", "6", "7", "8", "9", "10", "11", "14",
- "15", "16", "17", "18", "19", "20", "21", "22", "23",
- "24", "25", "26", "27", "28", "29", "30", "31",
- "memory"
- );
-
- return rc;
-}
-
-int core_busy_loop_with_freeze(void)
-{
- int rc;
-
- mtspr(SPRN_MMCR0, mfspr(SPRN_MMCR0) & ~MMCR0_FC);
- rc = core_busy_loop();
- mtspr(SPRN_MMCR0, mfspr(SPRN_MMCR0) | MMCR0_FC);
-
- return rc;
-}
-
-int ebb_child(union pipe read_pipe, union pipe write_pipe)
-{
- struct event event;
- uint64_t val;
-
- FAIL_IF(wait_for_parent(read_pipe));
-
- event_init_named(&event, 0x1001e, "cycles");
- event_leader_ebb_init(&event);
-
- event.attr.exclude_kernel = 1;
- event.attr.exclude_hv = 1;
- event.attr.exclude_idle = 1;
-
- FAIL_IF(event_open(&event));
-
- ebb_enable_pmc_counting(1);
- setup_ebb_handler(standard_ebb_callee);
- ebb_global_enable();
-
- FAIL_IF(event_enable(&event));
-
- if (event_read(&event)) {
- /*
- * Some tests expect to fail here, so don't report an error on
- * this line, and return a distinguisable error code. Tell the
- * parent an error happened.
- */
- notify_parent_of_error(write_pipe);
- return 2;
- }
-
- mtspr(SPRN_PMC1, pmc_sample_period(sample_period));
-
- FAIL_IF(notify_parent(write_pipe));
- FAIL_IF(wait_for_parent(read_pipe));
- FAIL_IF(notify_parent(write_pipe));
-
- while (ebb_state.stats.ebb_count < 20) {
- FAIL_IF(core_busy_loop());
-
- /* To try and hit SIGILL case */
- val = mfspr(SPRN_MMCRA);
- val |= mfspr(SPRN_MMCR2);
- val |= mfspr(SPRN_MMCR0);
- }
-
- ebb_global_disable();
- ebb_freeze_pmcs();
-
- count_pmc(1, sample_period);
-
- dump_ebb_state();
-
- event_close(&event);
-
- FAIL_IF(ebb_state.stats.ebb_count == 0);
-
- return 0;
-}
-
-static jmp_buf setjmp_env;
-
-static void sigill_handler(int signal)
-{
- printf("Took sigill\n");
- longjmp(setjmp_env, 1);
-}
-
-static struct sigaction sigill_action = {
- .sa_handler = sigill_handler,
-};
-
-int catch_sigill(void (*func)(void))
-{
- if (sigaction(SIGILL, &sigill_action, NULL)) {
- perror("sigaction");
- return 1;
- }
-
- if (setjmp(setjmp_env) == 0) {
- func();
- return 1;
- }
-
- return 0;
-}
-
-void write_pmc1(void)
-{
- mtspr(SPRN_PMC1, 0);
-}
-
-void write_pmc(int pmc, u64 value)
-{
- switch (pmc) {
- case 1: mtspr(SPRN_PMC1, value); break;
- case 2: mtspr(SPRN_PMC2, value); break;
- case 3: mtspr(SPRN_PMC3, value); break;
- case 4: mtspr(SPRN_PMC4, value); break;
- case 5: mtspr(SPRN_PMC5, value); break;
- case 6: mtspr(SPRN_PMC6, value); break;
- }
-}
-
-u64 read_pmc(int pmc)
-{
- switch (pmc) {
- case 1: return mfspr(SPRN_PMC1);
- case 2: return mfspr(SPRN_PMC2);
- case 3: return mfspr(SPRN_PMC3);
- case 4: return mfspr(SPRN_PMC4);
- case 5: return mfspr(SPRN_PMC5);
- case 6: return mfspr(SPRN_PMC6);
- }
-
- return 0;
-}
-
-static void term_handler(int signal)
-{
- dump_summary_ebb_state();
- dump_ebb_hw_state();
- abort();
-}
-
-struct sigaction term_action = {
- .sa_handler = term_handler,
-};
-
-static void __attribute__((constructor)) ebb_init(void)
-{
- clear_ebb_stats();
-
- if (sigaction(SIGTERM, &term_action, NULL))
- perror("sigaction");
-
- ebb_state.trace = trace_buffer_allocate(1 * 1024 * 1024);
-}
diff --git a/powerpc/pmu/ebb/ebb.h b/powerpc/pmu/ebb/ebb.h
deleted file mode 100644
index e62bde0..0000000
--- a/powerpc/pmu/ebb/ebb.h
+++ /dev/null
@@ -1,78 +0,0 @@
-/*
- * Copyright 2014, Michael Ellerman, IBM Corp.
- * Licensed under GPLv2.
- */
-
-#ifndef _SELFTESTS_POWERPC_PMU_EBB_EBB_H
-#define _SELFTESTS_POWERPC_PMU_EBB_EBB_H
-
-#include "../event.h"
-#include "../lib.h"
-#include "trace.h"
-#include "reg.h"
-
-#define PMC_INDEX(pmc) ((pmc)-1)
-
-#define NUM_PMC_VALUES 128
-
-struct ebb_state
-{
- struct {
- u64 pmc_count[6];
- volatile int ebb_count;
- int spurious;
- int negative;
- int no_overflow;
- } stats;
-
- bool pmc_enable[6];
- struct trace_buffer *trace;
-};
-
-extern struct ebb_state ebb_state;
-
-#define COUNTER_OVERFLOW 0x80000000ull
-
-static inline uint32_t pmc_sample_period(uint32_t value)
-{
- return COUNTER_OVERFLOW - value;
-}
-
-static inline void ebb_enable_pmc_counting(int pmc)
-{
- ebb_state.pmc_enable[PMC_INDEX(pmc)] = true;
-}
-
-bool ebb_check_count(int pmc, u64 sample_period, int fudge);
-void event_leader_ebb_init(struct event *e);
-void event_ebb_init(struct event *e);
-void event_bhrb_init(struct event *e, unsigned ifm);
-void setup_ebb_handler(void (*callee)(void));
-void standard_ebb_callee(void);
-int ebb_event_enable(struct event *e);
-void ebb_global_enable(void);
-void ebb_global_disable(void);
-void ebb_freeze_pmcs(void);
-void ebb_unfreeze_pmcs(void);
-void event_ebb_init(struct event *e);
-void event_leader_ebb_init(struct event *e);
-int count_pmc(int pmc, uint32_t sample_period);
-void dump_ebb_state(void);
-void dump_summary_ebb_state(void);
-void dump_ebb_hw_state(void);
-void clear_ebb_stats(void);
-void write_pmc(int pmc, u64 value);
-u64 read_pmc(int pmc);
-void reset_ebb_with_clear_mask(unsigned long mmcr0_clear_mask);
-void reset_ebb(void);
-int ebb_check_mmcr0(void);
-
-extern u64 sample_period;
-
-int core_busy_loop(void);
-int core_busy_loop_with_freeze(void);
-int ebb_child(union pipe read_pipe, union pipe write_pipe);
-int catch_sigill(void (*func)(void));
-void write_pmc1(void);
-
-#endif /* _SELFTESTS_POWERPC_PMU_EBB_EBB_H */
diff --git a/powerpc/pmu/ebb/ebb_handler.S b/powerpc/pmu/ebb/ebb_handler.S
deleted file mode 100644
index 14274ea..0000000
--- a/powerpc/pmu/ebb/ebb_handler.S
+++ /dev/null
@@ -1,365 +0,0 @@
-/*
- * Copyright 2014, Michael Ellerman, IBM Corp.
- * Licensed under GPLv2.
- */
-
-#include <ppc-asm.h>
-#include "reg.h"
-
-
-/* ppc-asm.h defines most of the reg aliases, but not r1/r2. */
-#define r1 1
-#define r2 2
-
-#define RFEBB .long 0x4c000924
-
-/* Stack layout:
- *
- * ^
- * User stack |
- * Back chain ------+ <- r1 <-------+
- * ... |
- * Red zone / ABI Gap |
- * ... |
- * vr63 <+ |
- * vr0 | |
- * VSCR | |
- * FSCR | |
- * r31 | Save area |
- * r0 | |
- * XER | |
- * CTR | |
- * LR | |
- * CCR <+ |
- * ... <+ |
- * LR | Caller frame |
- * CCR | |
- * Back chain <+ <- updated r1 --------+
- *
- */
-
-#if defined(_CALL_ELF) && _CALL_ELF == 2
-#define ABIGAP 512
-#else
-#define ABIGAP 288
-#endif
-
-#define NR_GPR 32
-#define NR_SPR 6
-#define NR_VSR 64
-
-#define SAVE_AREA ((NR_GPR + NR_SPR) * 8 + (NR_VSR * 16))
-#define CALLER_FRAME 112
-
-#define STACK_FRAME (ABIGAP + SAVE_AREA + CALLER_FRAME)
-
-#define CCR_SAVE (CALLER_FRAME)
-#define LR_SAVE (CCR_SAVE + 8)
-#define CTR_SAVE (LR_SAVE + 8)
-#define XER_SAVE (CTR_SAVE + 8)
-#define GPR_SAVE(n) (XER_SAVE + 8 + (8 * n))
-#define FSCR_SAVE (GPR_SAVE(31) + 8)
-#define VSCR_SAVE (FSCR_SAVE + 8)
-#define VSR_SAVE(n) (VSCR_SAVE + 8 + (16 * n))
-
-#define SAVE_GPR(n) std n,GPR_SAVE(n)(r1)
-#define REST_GPR(n) ld n,GPR_SAVE(n)(r1)
-#define TRASH_GPR(n) lis n,0xaaaa
-
-#define SAVE_VSR(n, b) li b, VSR_SAVE(n); stxvd2x n,b,r1
-#define LOAD_VSR(n, b) li b, VSR_SAVE(n); lxvd2x n,b,r1
-
-#define LOAD_REG_IMMEDIATE(reg,expr) \
- lis reg,(expr)@highest; \
- ori reg,reg,(expr)@higher; \
- rldicr reg,reg,32,31; \
- oris reg,reg,(expr)@h; \
- ori reg,reg,(expr)@l;
-
-
-#if defined(_CALL_ELF) && _CALL_ELF == 2
-#define ENTRY_POINT(name) \
- .type FUNC_NAME(name),@function; \
- .globl FUNC_NAME(name); \
- FUNC_NAME(name):
-
-#define RESTORE_TOC(name) \
- /* Restore our TOC pointer using our entry point */ \
- LOAD_REG_IMMEDIATE(r12, name) \
-0: addis r2,r12,(.TOC.-0b)@ha; \
- addi r2,r2,(.TOC.-0b)@l;
-
-#else
-#define ENTRY_POINT(name) FUNC_START(name)
-#define RESTORE_TOC(name) \
- /* Restore our TOC pointer via our opd entry */ \
- LOAD_REG_IMMEDIATE(r2, name) \
- ld r2,8(r2);
-#endif
-
- .text
-
-ENTRY_POINT(ebb_handler)
- stdu r1,-STACK_FRAME(r1)
- SAVE_GPR(0)
- mflr r0
- std r0,LR_SAVE(r1)
- mfcr r0
- std r0,CCR_SAVE(r1)
- mfctr r0
- std r0,CTR_SAVE(r1)
- mfxer r0
- std r0,XER_SAVE(r1)
- SAVE_GPR(2)
- SAVE_GPR(3)
- SAVE_GPR(4)
- SAVE_GPR(5)
- SAVE_GPR(6)
- SAVE_GPR(7)
- SAVE_GPR(8)
- SAVE_GPR(9)
- SAVE_GPR(10)
- SAVE_GPR(11)
- SAVE_GPR(12)
- SAVE_GPR(13)
- SAVE_GPR(14)
- SAVE_GPR(15)
- SAVE_GPR(16)
- SAVE_GPR(17)
- SAVE_GPR(18)
- SAVE_GPR(19)
- SAVE_GPR(20)
- SAVE_GPR(21)
- SAVE_GPR(22)
- SAVE_GPR(23)
- SAVE_GPR(24)
- SAVE_GPR(25)
- SAVE_GPR(26)
- SAVE_GPR(27)
- SAVE_GPR(28)
- SAVE_GPR(29)
- SAVE_GPR(30)
- SAVE_GPR(31)
- SAVE_VSR(0, r3)
- mffs f0
- stfd f0, FSCR_SAVE(r1)
- mfvscr f0
- stfd f0, VSCR_SAVE(r1)
- SAVE_VSR(1, r3)
- SAVE_VSR(2, r3)
- SAVE_VSR(3, r3)
- SAVE_VSR(4, r3)
- SAVE_VSR(5, r3)
- SAVE_VSR(6, r3)
- SAVE_VSR(7, r3)
- SAVE_VSR(8, r3)
- SAVE_VSR(9, r3)
- SAVE_VSR(10, r3)
- SAVE_VSR(11, r3)
- SAVE_VSR(12, r3)
- SAVE_VSR(13, r3)
- SAVE_VSR(14, r3)
- SAVE_VSR(15, r3)
- SAVE_VSR(16, r3)
- SAVE_VSR(17, r3)
- SAVE_VSR(18, r3)
- SAVE_VSR(19, r3)
- SAVE_VSR(20, r3)
- SAVE_VSR(21, r3)
- SAVE_VSR(22, r3)
- SAVE_VSR(23, r3)
- SAVE_VSR(24, r3)
- SAVE_VSR(25, r3)
- SAVE_VSR(26, r3)
- SAVE_VSR(27, r3)
- SAVE_VSR(28, r3)
- SAVE_VSR(29, r3)
- SAVE_VSR(30, r3)
- SAVE_VSR(31, r3)
- SAVE_VSR(32, r3)
- SAVE_VSR(33, r3)
- SAVE_VSR(34, r3)
- SAVE_VSR(35, r3)
- SAVE_VSR(36, r3)
- SAVE_VSR(37, r3)
- SAVE_VSR(38, r3)
- SAVE_VSR(39, r3)
- SAVE_VSR(40, r3)
- SAVE_VSR(41, r3)
- SAVE_VSR(42, r3)
- SAVE_VSR(43, r3)
- SAVE_VSR(44, r3)
- SAVE_VSR(45, r3)
- SAVE_VSR(46, r3)
- SAVE_VSR(47, r3)
- SAVE_VSR(48, r3)
- SAVE_VSR(49, r3)
- SAVE_VSR(50, r3)
- SAVE_VSR(51, r3)
- SAVE_VSR(52, r3)
- SAVE_VSR(53, r3)
- SAVE_VSR(54, r3)
- SAVE_VSR(55, r3)
- SAVE_VSR(56, r3)
- SAVE_VSR(57, r3)
- SAVE_VSR(58, r3)
- SAVE_VSR(59, r3)
- SAVE_VSR(60, r3)
- SAVE_VSR(61, r3)
- SAVE_VSR(62, r3)
- SAVE_VSR(63, r3)
-
- TRASH_GPR(2)
- TRASH_GPR(3)
- TRASH_GPR(4)
- TRASH_GPR(5)
- TRASH_GPR(6)
- TRASH_GPR(7)
- TRASH_GPR(8)
- TRASH_GPR(9)
- TRASH_GPR(10)
- TRASH_GPR(11)
- TRASH_GPR(12)
- TRASH_GPR(14)
- TRASH_GPR(15)
- TRASH_GPR(16)
- TRASH_GPR(17)
- TRASH_GPR(18)
- TRASH_GPR(19)
- TRASH_GPR(20)
- TRASH_GPR(21)
- TRASH_GPR(22)
- TRASH_GPR(23)
- TRASH_GPR(24)
- TRASH_GPR(25)
- TRASH_GPR(26)
- TRASH_GPR(27)
- TRASH_GPR(28)
- TRASH_GPR(29)
- TRASH_GPR(30)
- TRASH_GPR(31)
-
- RESTORE_TOC(ebb_handler)
-
- /*
- * r13 is our TLS pointer. We leave whatever value was in there when the
- * EBB fired. That seems to be OK because once set the TLS pointer is not
- * changed - but presumably that could change in future.
- */
-
- bl ebb_hook
- nop
-
- /* r2 may be changed here but we don't care */
-
- lfd f0, FSCR_SAVE(r1)
- mtfsf 0xff,f0
- lfd f0, VSCR_SAVE(r1)
- mtvscr f0
- LOAD_VSR(0, r3)
- LOAD_VSR(1, r3)
- LOAD_VSR(2, r3)
- LOAD_VSR(3, r3)
- LOAD_VSR(4, r3)
- LOAD_VSR(5, r3)
- LOAD_VSR(6, r3)
- LOAD_VSR(7, r3)
- LOAD_VSR(8, r3)
- LOAD_VSR(9, r3)
- LOAD_VSR(10, r3)
- LOAD_VSR(11, r3)
- LOAD_VSR(12, r3)
- LOAD_VSR(13, r3)
- LOAD_VSR(14, r3)
- LOAD_VSR(15, r3)
- LOAD_VSR(16, r3)
- LOAD_VSR(17, r3)
- LOAD_VSR(18, r3)
- LOAD_VSR(19, r3)
- LOAD_VSR(20, r3)
- LOAD_VSR(21, r3)
- LOAD_VSR(22, r3)
- LOAD_VSR(23, r3)
- LOAD_VSR(24, r3)
- LOAD_VSR(25, r3)
- LOAD_VSR(26, r3)
- LOAD_VSR(27, r3)
- LOAD_VSR(28, r3)
- LOAD_VSR(29, r3)
- LOAD_VSR(30, r3)
- LOAD_VSR(31, r3)
- LOAD_VSR(32, r3)
- LOAD_VSR(33, r3)
- LOAD_VSR(34, r3)
- LOAD_VSR(35, r3)
- LOAD_VSR(36, r3)
- LOAD_VSR(37, r3)
- LOAD_VSR(38, r3)
- LOAD_VSR(39, r3)
- LOAD_VSR(40, r3)
- LOAD_VSR(41, r3)
- LOAD_VSR(42, r3)
- LOAD_VSR(43, r3)
- LOAD_VSR(44, r3)
- LOAD_VSR(45, r3)
- LOAD_VSR(46, r3)
- LOAD_VSR(47, r3)
- LOAD_VSR(48, r3)
- LOAD_VSR(49, r3)
- LOAD_VSR(50, r3)
- LOAD_VSR(51, r3)
- LOAD_VSR(52, r3)
- LOAD_VSR(53, r3)
- LOAD_VSR(54, r3)
- LOAD_VSR(55, r3)
- LOAD_VSR(56, r3)
- LOAD_VSR(57, r3)
- LOAD_VSR(58, r3)
- LOAD_VSR(59, r3)
- LOAD_VSR(60, r3)
- LOAD_VSR(61, r3)
- LOAD_VSR(62, r3)
- LOAD_VSR(63, r3)
-
- ld r0,XER_SAVE(r1)
- mtxer r0
- ld r0,CTR_SAVE(r1)
- mtctr r0
- ld r0,LR_SAVE(r1)
- mtlr r0
- ld r0,CCR_SAVE(r1)
- mtcr r0
- REST_GPR(0)
- REST_GPR(2)
- REST_GPR(3)
- REST_GPR(4)
- REST_GPR(5)
- REST_GPR(6)
- REST_GPR(7)
- REST_GPR(8)
- REST_GPR(9)
- REST_GPR(10)
- REST_GPR(11)
- REST_GPR(12)
- REST_GPR(13)
- REST_GPR(14)
- REST_GPR(15)
- REST_GPR(16)
- REST_GPR(17)
- REST_GPR(18)
- REST_GPR(19)
- REST_GPR(20)
- REST_GPR(21)
- REST_GPR(22)
- REST_GPR(23)
- REST_GPR(24)
- REST_GPR(25)
- REST_GPR(26)
- REST_GPR(27)
- REST_GPR(28)
- REST_GPR(29)
- REST_GPR(30)
- REST_GPR(31)
- addi r1,r1,STACK_FRAME
- RFEBB
-FUNC_END(ebb_handler)
diff --git a/powerpc/pmu/ebb/ebb_on_child_test.c b/powerpc/pmu/ebb/ebb_on_child_test.c
deleted file mode 100644
index c45f948..0000000
--- a/powerpc/pmu/ebb/ebb_on_child_test.c
+++ /dev/null
@@ -1,86 +0,0 @@
-/*
- * Copyright 2014, Michael Ellerman, IBM Corp.
- * Licensed under GPLv2.
- */
-
-#include <signal.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <stdbool.h>
-#include <sys/types.h>
-#include <sys/wait.h>
-#include <unistd.h>
-
-#include "ebb.h"
-
-
-/*
- * Tests we can setup an EBB on our child. Nothing interesting happens, because
- * even though the event is enabled and running the child hasn't enabled the
- * actual delivery of the EBBs.
- */
-
-static int victim_child(union pipe read_pipe, union pipe write_pipe)
-{
- int i;
-
- FAIL_IF(wait_for_parent(read_pipe));
- FAIL_IF(notify_parent(write_pipe));
-
- /* Parent creates EBB event */
-
- FAIL_IF(wait_for_parent(read_pipe));
- FAIL_IF(notify_parent(write_pipe));
-
- /* Check the EBB is enabled by writing PMC1 */
- write_pmc1();
-
- /* EBB event is enabled here */
- for (i = 0; i < 1000000; i++) ;
-
- return 0;
-}
-
-int ebb_on_child(void)
-{
- union pipe read_pipe, write_pipe;
- struct event event;
- pid_t pid;
-
- FAIL_IF(pipe(read_pipe.fds) == -1);
- FAIL_IF(pipe(write_pipe.fds) == -1);
-
- pid = fork();
- if (pid == 0) {
- /* NB order of pipes looks reversed */
- exit(victim_child(write_pipe, read_pipe));
- }
-
- FAIL_IF(sync_with_child(read_pipe, write_pipe));
-
- /* Child is running now */
-
- event_init_named(&event, 0x1001e, "cycles");
- event_leader_ebb_init(&event);
-
- event.attr.exclude_kernel = 1;
- event.attr.exclude_hv = 1;
- event.attr.exclude_idle = 1;
-
- FAIL_IF(event_open_with_pid(&event, pid));
- FAIL_IF(ebb_event_enable(&event));
-
- FAIL_IF(sync_with_child(read_pipe, write_pipe));
-
- /* Child should just exit happily */
- FAIL_IF(wait_for_child(pid));
-
- event_close(&event);
-
- return 0;
-}
-
-int main(void)
-{
- return test_harness(ebb_on_child, "ebb_on_child");
-}
diff --git a/powerpc/pmu/ebb/ebb_on_willing_child_test.c b/powerpc/pmu/ebb/ebb_on_willing_child_test.c
deleted file mode 100644
index 11acf1d..0000000
--- a/powerpc/pmu/ebb/ebb_on_willing_child_test.c
+++ /dev/null
@@ -1,92 +0,0 @@
-/*
- * Copyright 2014, Michael Ellerman, IBM Corp.
- * Licensed under GPLv2.
- */
-
-#include <signal.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <stdbool.h>
-#include <sys/types.h>
-#include <sys/wait.h>
-#include <unistd.h>
-
-#include "ebb.h"
-
-
-/*
- * Tests we can setup an EBB on our child. The child expects this and enables
- * EBBs, which are then delivered to the child, even though the event is
- * created by the parent.
- */
-
-static int victim_child(union pipe read_pipe, union pipe write_pipe)
-{
- FAIL_IF(wait_for_parent(read_pipe));
-
- /* Setup our EBB handler, before the EBB event is created */
- ebb_enable_pmc_counting(1);
- setup_ebb_handler(standard_ebb_callee);
- ebb_global_enable();
-
- FAIL_IF(notify_parent(write_pipe));
-
- while (ebb_state.stats.ebb_count < 20) {
- FAIL_IF(core_busy_loop());
- }
-
- ebb_global_disable();
- ebb_freeze_pmcs();
-
- count_pmc(1, sample_period);
-
- dump_ebb_state();
-
- FAIL_IF(ebb_state.stats.ebb_count == 0);
-
- return 0;
-}
-
-/* Tests we can setup an EBB on our child - if it's expecting it */
-int ebb_on_willing_child(void)
-{
- union pipe read_pipe, write_pipe;
- struct event event;
- pid_t pid;
-
- FAIL_IF(pipe(read_pipe.fds) == -1);
- FAIL_IF(pipe(write_pipe.fds) == -1);
-
- pid = fork();
- if (pid == 0) {
- /* NB order of pipes looks reversed */
- exit(victim_child(write_pipe, read_pipe));
- }
-
- /* Signal the child to setup its EBB handler */
- FAIL_IF(sync_with_child(read_pipe, write_pipe));
-
- /* Child is running now */
-
- event_init_named(&event, 0x1001e, "cycles");
- event_leader_ebb_init(&event);
-
- event.attr.exclude_kernel = 1;
- event.attr.exclude_hv = 1;
- event.attr.exclude_idle = 1;
-
- FAIL_IF(event_open_with_pid(&event, pid));
- FAIL_IF(ebb_event_enable(&event));
-
- /* Child show now take EBBs and then exit */
- FAIL_IF(wait_for_child(pid));
-
- event_close(&event);
-
- return 0;
-}
-
-int main(void)
-{
- return test_harness(ebb_on_willing_child, "ebb_on_willing_child");
-}
diff --git a/powerpc/pmu/ebb/ebb_vs_cpu_event_test.c b/powerpc/pmu/ebb/ebb_vs_cpu_event_test.c
deleted file mode 100644
index be4dd5a..0000000
--- a/powerpc/pmu/ebb/ebb_vs_cpu_event_test.c
+++ /dev/null
@@ -1,86 +0,0 @@
-/*
- * Copyright 2014, Michael Ellerman, IBM Corp.
- * Licensed under GPLv2.
- */
-
-#include <signal.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <stdbool.h>
-#include <sys/types.h>
-#include <sys/wait.h>
-#include <unistd.h>
-
-#include "ebb.h"
-
-
-/*
- * Tests an EBB vs a cpu event - in that order. The EBB should force the cpu
- * event off the PMU.
- */
-
-static int setup_cpu_event(struct event *event, int cpu)
-{
- event_init_named(event, 0x400FA, "PM_RUN_INST_CMPL");
-
- event->attr.exclude_kernel = 1;
- event->attr.exclude_hv = 1;
- event->attr.exclude_idle = 1;
-
- SKIP_IF(require_paranoia_below(1));
- FAIL_IF(event_open_with_cpu(event, cpu));
- FAIL_IF(event_enable(event));
-
- return 0;
-}
-
-int ebb_vs_cpu_event(void)
-{
- union pipe read_pipe, write_pipe;
- struct event event;
- int cpu, rc;
- pid_t pid;
-
- cpu = pick_online_cpu();
- FAIL_IF(cpu < 0);
- FAIL_IF(bind_to_cpu(cpu));
-
- FAIL_IF(pipe(read_pipe.fds) == -1);
- FAIL_IF(pipe(write_pipe.fds) == -1);
-
- pid = fork();
- if (pid == 0) {
- /* NB order of pipes looks reversed */
- exit(ebb_child(write_pipe, read_pipe));
- }
-
- /* Signal the child to install its EBB event and wait */
- FAIL_IF(sync_with_child(read_pipe, write_pipe));
-
- /* Now try to install our CPU event */
- rc = setup_cpu_event(&event, cpu);
- if (rc) {
- kill_child_and_wait(pid);
- return rc;
- }
-
- /* Signal the child to run */
- FAIL_IF(sync_with_child(read_pipe, write_pipe));
-
- /* .. and wait for it to complete */
- FAIL_IF(wait_for_child(pid));
- FAIL_IF(event_disable(&event));
- FAIL_IF(event_read(&event));
-
- event_report(&event);
-
- /* The cpu event may have run, but we don't expect 100% */
- FAIL_IF(event.result.enabled >= event.result.running);
-
- return 0;
-}
-
-int main(void)
-{
- return test_harness(ebb_vs_cpu_event, "ebb_vs_cpu_event");
-}
diff --git a/powerpc/pmu/ebb/event_attributes_test.c b/powerpc/pmu/ebb/event_attributes_test.c
deleted file mode 100644
index 7e78153..0000000
--- a/powerpc/pmu/ebb/event_attributes_test.c
+++ /dev/null
@@ -1,131 +0,0 @@
-/*
- * Copyright 2014, Michael Ellerman, IBM Corp.
- * Licensed under GPLv2.
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-
-#include "ebb.h"
-
-
-/*
- * Test various attributes of the EBB event are enforced.
- */
-int event_attributes(void)
-{
- struct event event, leader;
-
- event_init(&event, 0x1001e);
- event_leader_ebb_init(&event);
- /* Expected to succeed */
- FAIL_IF(event_open(&event));
- event_close(&event);
-
-
- event_init(&event, 0x001e); /* CYCLES - no PMC specified */
- event_leader_ebb_init(&event);
- /* Expected to fail, no PMC specified */
- FAIL_IF(event_open(&event) == 0);
-
-
- event_init(&event, 0x2001e);
- event_leader_ebb_init(&event);
- event.attr.exclusive = 0;
- /* Expected to fail, not exclusive */
- FAIL_IF(event_open(&event) == 0);
-
-
- event_init(&event, 0x3001e);
- event_leader_ebb_init(&event);
- event.attr.freq = 1;
- /* Expected to fail, sets freq */
- FAIL_IF(event_open(&event) == 0);
-
-
- event_init(&event, 0x4001e);
- event_leader_ebb_init(&event);
- event.attr.sample_period = 1;
- /* Expected to fail, sets sample_period */
- FAIL_IF(event_open(&event) == 0);
-
-
- event_init(&event, 0x1001e);
- event_leader_ebb_init(&event);
- event.attr.enable_on_exec = 1;
- /* Expected to fail, sets enable_on_exec */
- FAIL_IF(event_open(&event) == 0);
-
-
- event_init(&event, 0x1001e);
- event_leader_ebb_init(&event);
- event.attr.inherit = 1;
- /* Expected to fail, sets inherit */
- FAIL_IF(event_open(&event) == 0);
-
-
- event_init(&leader, 0x1001e);
- event_leader_ebb_init(&leader);
- FAIL_IF(event_open(&leader));
-
- event_init(&event, 0x20002);
- event_ebb_init(&event);
-
- /* Expected to succeed */
- FAIL_IF(event_open_with_group(&event, leader.fd));
- event_close(&leader);
- event_close(&event);
-
-
- event_init(&leader, 0x1001e);
- event_leader_ebb_init(&leader);
- FAIL_IF(event_open(&leader));
-
- event_init(&event, 0x20002);
-
- /* Expected to fail, event doesn't request EBB, leader does */
- FAIL_IF(event_open_with_group(&event, leader.fd) == 0);
- event_close(&leader);
-
-
- event_init(&leader, 0x1001e);
- event_leader_ebb_init(&leader);
- /* Clear the EBB flag */
- leader.attr.config &= ~(1ull << 63);
-
- FAIL_IF(event_open(&leader));
-
- event_init(&event, 0x20002);
- event_ebb_init(&event);
-
- /* Expected to fail, leader doesn't request EBB */
- FAIL_IF(event_open_with_group(&event, leader.fd) == 0);
- event_close(&leader);
-
-
- event_init(&leader, 0x1001e);
- event_leader_ebb_init(&leader);
- leader.attr.exclusive = 0;
- /* Expected to fail, leader isn't exclusive */
- FAIL_IF(event_open(&leader) == 0);
-
-
- event_init(&leader, 0x1001e);
- event_leader_ebb_init(&leader);
- leader.attr.pinned = 0;
- /* Expected to fail, leader isn't pinned */
- FAIL_IF(event_open(&leader) == 0);
-
- event_init(&event, 0x1001e);
- event_leader_ebb_init(&event);
- /* Expected to fail, not a task event */
- SKIP_IF(require_paranoia_below(1));
- FAIL_IF(event_open_with_cpu(&event, 0) == 0);
-
- return 0;
-}
-
-int main(void)
-{
- return test_harness(event_attributes, "event_attributes");
-}
diff --git a/powerpc/pmu/ebb/fixed_instruction_loop.S b/powerpc/pmu/ebb/fixed_instruction_loop.S
deleted file mode 100644
index b866a05..0000000
--- a/powerpc/pmu/ebb/fixed_instruction_loop.S
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Copyright 2014, Michael Ellerman, IBM Corp.
- * Licensed under GPLv2.
- */
-
-#include <ppc-asm.h>
-
- .text
-
-FUNC_START(thirty_two_instruction_loop)
- cmpwi r3,0
- beqlr
- addi r4,r3,1
- addi r4,r4,1
- addi r4,r4,1
- addi r4,r4,1
- addi r4,r4,1
- addi r4,r4,1
- addi r4,r4,1
- addi r4,r4,1
- addi r4,r4,1
- addi r4,r4,1
- addi r4,r4,1
- addi r4,r4,1
- addi r4,r4,1
- addi r4,r4,1
- addi r4,r4,1
- addi r4,r4,1
- addi r4,r4,1
- addi r4,r4,1
- addi r4,r4,1
- addi r4,r4,1
- addi r4,r4,1
- addi r4,r4,1
- addi r4,r4,1
- addi r4,r4,1
- addi r4,r4,1
- addi r4,r4,1
- addi r4,r4,1
- addi r4,r4,1 # 28 addi's
- subi r3,r3,1
- b FUNC_NAME(thirty_two_instruction_loop)
-FUNC_END(thirty_two_instruction_loop)
diff --git a/powerpc/pmu/ebb/fork_cleanup_test.c b/powerpc/pmu/ebb/fork_cleanup_test.c
deleted file mode 100644
index 9e7af6e..0000000
--- a/powerpc/pmu/ebb/fork_cleanup_test.c
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
- * Copyright 2014, Michael Ellerman, IBM Corp.
- * Licensed under GPLv2.
- */
-
-#include <signal.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <stdbool.h>
-#include <sys/types.h>
-#include <sys/wait.h>
-#include <unistd.h>
-#include <setjmp.h>
-#include <signal.h>
-
-#include "ebb.h"
-
-
-/*
- * Test that a fork clears the PMU state of the child. eg. BESCR/EBBHR/EBBRR
- * are cleared, and MMCR0_PMCC is reset, preventing the child from accessing
- * the PMU.
- */
-
-static struct event event;
-
-static int child(void)
-{
- /* Even though we have EBE=0 we can still see the EBB regs */
- FAIL_IF(mfspr(SPRN_BESCR) != 0);
- FAIL_IF(mfspr(SPRN_EBBHR) != 0);
- FAIL_IF(mfspr(SPRN_EBBRR) != 0);
-
- FAIL_IF(catch_sigill(write_pmc1));
-
- /* We can still read from the event, though it is on our parent */
- FAIL_IF(event_read(&event));
-
- return 0;
-}
-
-/* Tests that fork clears EBB state */
-int fork_cleanup(void)
-{
- pid_t pid;
-
- event_init_named(&event, 0x1001e, "cycles");
- event_leader_ebb_init(&event);
-
- FAIL_IF(event_open(&event));
-
- ebb_enable_pmc_counting(1);
- setup_ebb_handler(standard_ebb_callee);
- ebb_global_enable();
-
- FAIL_IF(ebb_event_enable(&event));
-
- mtspr(SPRN_MMCR0, MMCR0_FC);
- mtspr(SPRN_PMC1, pmc_sample_period(sample_period));
-
- /* Don't need to actually take any EBBs */
-
- pid = fork();
- if (pid == 0)
- exit(child());
-
- /* Child does the actual testing */
- FAIL_IF(wait_for_child(pid));
-
- /* After fork */
- event_close(&event);
-
- return 0;
-}
-
-int main(void)
-{
- return test_harness(fork_cleanup, "fork_cleanup");
-}
diff --git a/powerpc/pmu/ebb/instruction_count_test.c b/powerpc/pmu/ebb/instruction_count_test.c
deleted file mode 100644
index f8190fa..0000000
--- a/powerpc/pmu/ebb/instruction_count_test.c
+++ /dev/null
@@ -1,164 +0,0 @@
-/*
- * Copyright 2014, Michael Ellerman, IBM Corp.
- * Licensed under GPLv2.
- */
-
-#define _GNU_SOURCE
-
-#include <stdio.h>
-#include <stdbool.h>
-#include <string.h>
-#include <sys/prctl.h>
-
-#include "ebb.h"
-
-
-/*
- * Run a calibrated instruction loop and count instructions executed using
- * EBBs. Make sure the counts look right.
- */
-
-extern void thirty_two_instruction_loop(uint64_t loops);
-
-static bool counters_frozen = true;
-
-static int do_count_loop(struct event *event, uint64_t instructions,
- uint64_t overhead, bool report)
-{
- int64_t difference, expected;
- double percentage;
-
- clear_ebb_stats();
-
- counters_frozen = false;
- mb();
- mtspr(SPRN_MMCR0, mfspr(SPRN_MMCR0) & ~MMCR0_FC);
-
- thirty_two_instruction_loop(instructions >> 5);
-
- counters_frozen = true;
- mb();
- mtspr(SPRN_MMCR0, mfspr(SPRN_MMCR0) | MMCR0_FC);
-
- count_pmc(4, sample_period);
-
- event->result.value = ebb_state.stats.pmc_count[4-1];
- expected = instructions + overhead;
- difference = event->result.value - expected;
- percentage = (double)difference / event->result.value * 100;
-
- if (report) {
- printf("Looped for %lu instructions, overhead %lu\n", instructions, overhead);
- printf("Expected %lu\n", expected);
- printf("Actual %llu\n", event->result.value);
- printf("Error %ld, %f%%\n", difference, percentage);
- printf("Took %d EBBs\n", ebb_state.stats.ebb_count);
- }
-
- if (difference < 0)
- difference = -difference;
-
- /* Tolerate a difference of up to 0.0001 % */
- difference *= 10000 * 100;
- if (difference / event->result.value)
- return -1;
-
- return 0;
-}
-
-/* Count how many instructions it takes to do a null loop */
-static uint64_t determine_overhead(struct event *event)
-{
- uint64_t current, overhead;
- int i;
-
- do_count_loop(event, 0, 0, false);
- overhead = event->result.value;
-
- for (i = 0; i < 100; i++) {
- do_count_loop(event, 0, 0, false);
- current = event->result.value;
- if (current < overhead) {
- printf("Replacing overhead %lu with %lu\n", overhead, current);
- overhead = current;
- }
- }
-
- return overhead;
-}
-
-static void pmc4_ebb_callee(void)
-{
- uint64_t val;
-
- val = mfspr(SPRN_BESCR);
- if (!(val & BESCR_PMEO)) {
- ebb_state.stats.spurious++;
- goto out;
- }
-
- ebb_state.stats.ebb_count++;
- count_pmc(4, sample_period);
-out:
- if (counters_frozen)
- reset_ebb_with_clear_mask(MMCR0_PMAO);
- else
- reset_ebb();
-}
-
-int instruction_count(void)
-{
- struct event event;
- uint64_t overhead;
-
- event_init_named(&event, 0x400FA, "PM_RUN_INST_CMPL");
- event_leader_ebb_init(&event);
- event.attr.exclude_kernel = 1;
- event.attr.exclude_hv = 1;
- event.attr.exclude_idle = 1;
-
- FAIL_IF(event_open(&event));
- FAIL_IF(ebb_event_enable(&event));
-
- sample_period = COUNTER_OVERFLOW;
-
- setup_ebb_handler(pmc4_ebb_callee);
- mtspr(SPRN_MMCR0, mfspr(SPRN_MMCR0) & ~MMCR0_FC);
- ebb_global_enable();
-
- overhead = determine_overhead(&event);
- printf("Overhead of null loop: %lu instructions\n", overhead);
-
- /* Run for 1M instructions */
- FAIL_IF(do_count_loop(&event, 0x100000, overhead, true));
-
- /* Run for 10M instructions */
- FAIL_IF(do_count_loop(&event, 0xa00000, overhead, true));
-
- /* Run for 100M instructions */
- FAIL_IF(do_count_loop(&event, 0x6400000, overhead, true));
-
- /* Run for 1G instructions */
- FAIL_IF(do_count_loop(&event, 0x40000000, overhead, true));
-
- /* Run for 16G instructions */
- FAIL_IF(do_count_loop(&event, 0x400000000, overhead, true));
-
- /* Run for 64G instructions */
- FAIL_IF(do_count_loop(&event, 0x1000000000, overhead, true));
-
- /* Run for 128G instructions */
- FAIL_IF(do_count_loop(&event, 0x2000000000, overhead, true));
-
- ebb_global_disable();
- event_close(&event);
-
- printf("Finished OK\n");
-
- return 0;
-}
-
-int main(void)
-{
- return test_harness(instruction_count, "instruction_count");
-}
diff --git a/powerpc/pmu/ebb/lost_exception_test.c b/powerpc/pmu/ebb/lost_exception_test.c
deleted file mode 100644
index 0c9dd9b..0000000
--- a/powerpc/pmu/ebb/lost_exception_test.c
+++ /dev/null
@@ -1,100 +0,0 @@
-/*
- * Copyright 2014, Michael Ellerman, IBM Corp.
- * Licensed under GPLv2.
- */
-
-#include <sched.h>
-#include <signal.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <sys/mman.h>
-
-#include "ebb.h"
-
-
-/*
- * Test that tries to trigger CPU_FTR_PMAO_BUG. Which is a hardware defect
- * where an exception triggers but we context switch before it is delivered and
- * lose the exception.
- */
-
-static int test_body(void)
-{
- int i, orig_period, max_period;
- struct event event;
-
- /* We use PMC4 to make sure the kernel switches all counters correctly */
- event_init_named(&event, 0x40002, "instructions");
- event_leader_ebb_init(&event);
-
- event.attr.exclude_kernel = 1;
- event.attr.exclude_hv = 1;
- event.attr.exclude_idle = 1;
-
- FAIL_IF(event_open(&event));
-
- ebb_enable_pmc_counting(4);
- setup_ebb_handler(standard_ebb_callee);
- ebb_global_enable();
- FAIL_IF(ebb_event_enable(&event));
-
- /*
- * We want a low sample period, but we also want to get out of the EBB
- * handler without tripping up again.
- *
- * This value picked after much experimentation.
- */
- orig_period = max_period = sample_period = 400;
-
- mtspr(SPRN_PMC4, pmc_sample_period(sample_period));
-
- while (ebb_state.stats.ebb_count < 1000000) {
- /*
- * We are trying to get the EBB exception to race exactly with
- * us entering the kernel to do the syscall. We then need the
- * kernel to decide our timeslice is up and context switch to
- * the other thread. When we come back our EBB will have been
- * lost and we'll spin in this while loop forever.
- */
-
- for (i = 0; i < 100000; i++)
- sched_yield();
-
- /* Change the sample period slightly to try and hit the race */
- if (sample_period >= (orig_period + 200))
- sample_period = orig_period;
- else
- sample_period++;
-
- if (sample_period > max_period)
- max_period = sample_period;
- }
-
- ebb_freeze_pmcs();
- ebb_global_disable();
-
- count_pmc(4, sample_period);
- mtspr(SPRN_PMC4, 0xdead);
-
- dump_summary_ebb_state();
- dump_ebb_hw_state();
-
- event_close(&event);
-
- FAIL_IF(ebb_state.stats.ebb_count == 0);
-
- /* We vary our sample period so we need extra fudge here */
- FAIL_IF(!ebb_check_count(4, orig_period, 2 * (max_period - orig_period)));
-
- return 0;
-}
-
-static int lost_exception(void)
-{
- return eat_cpu(test_body);
-}
-
-int main(void)
-{
- return test_harness(lost_exception, "lost_exception");
-}
diff --git a/powerpc/pmu/ebb/multi_counter_test.c b/powerpc/pmu/ebb/multi_counter_test.c
deleted file mode 100644
index 67d78af..0000000
--- a/powerpc/pmu/ebb/multi_counter_test.c
+++ /dev/null
@@ -1,91 +0,0 @@
-/*
- * Copyright 2014, Michael Ellerman, IBM Corp.
- * Licensed under GPLv2.
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <sys/ioctl.h>
-
-#include "ebb.h"
-
-
-/*
- * Test counting multiple events using EBBs.
- */
-int multi_counter(void)
-{
- struct event events[6];
- int i, group_fd;
-
- event_init_named(&events[0], 0x1001C, "PM_CMPLU_STALL_THRD");
- event_init_named(&events[1], 0x2D016, "PM_CMPLU_STALL_FXU");
- event_init_named(&events[2], 0x30006, "PM_CMPLU_STALL_OTHER_CMPL");
- event_init_named(&events[3], 0x4000A, "PM_CMPLU_STALL");
- event_init_named(&events[4], 0x600f4, "PM_RUN_CYC");
- event_init_named(&events[5], 0x500fa, "PM_RUN_INST_CMPL");
-
- event_leader_ebb_init(&events[0]);
- for (i = 1; i < 6; i++)
- event_ebb_init(&events[i]);
-
- group_fd = -1;
- for (i = 0; i < 6; i++) {
- events[i].attr.exclude_kernel = 1;
- events[i].attr.exclude_hv = 1;
- events[i].attr.exclude_idle = 1;
-
- FAIL_IF(event_open_with_group(&events[i], group_fd));
- if (group_fd == -1)
- group_fd = events[0].fd;
- }
-
- ebb_enable_pmc_counting(1);
- ebb_enable_pmc_counting(2);
- ebb_enable_pmc_counting(3);
- ebb_enable_pmc_counting(4);
- ebb_enable_pmc_counting(5);
- ebb_enable_pmc_counting(6);
- setup_ebb_handler(standard_ebb_callee);
-
- FAIL_IF(ioctl(events[0].fd, PERF_EVENT_IOC_ENABLE, PERF_IOC_FLAG_GROUP));
- FAIL_IF(event_read(&events[0]));
-
- ebb_global_enable();
-
- mtspr(SPRN_PMC1, pmc_sample_period(sample_period));
- mtspr(SPRN_PMC2, pmc_sample_period(sample_period));
- mtspr(SPRN_PMC3, pmc_sample_period(sample_period));
- mtspr(SPRN_PMC4, pmc_sample_period(sample_period));
- mtspr(SPRN_PMC5, pmc_sample_period(sample_period));
- mtspr(SPRN_PMC6, pmc_sample_period(sample_period));
-
- while (ebb_state.stats.ebb_count < 50) {
- FAIL_IF(core_busy_loop());
- FAIL_IF(ebb_check_mmcr0());
- }
-
- ebb_global_disable();
- ebb_freeze_pmcs();
-
- count_pmc(1, sample_period);
- count_pmc(2, sample_period);
- count_pmc(3, sample_period);
- count_pmc(4, sample_period);
- count_pmc(5, sample_period);
- count_pmc(6, sample_period);
-
- dump_ebb_state();
-
- for (i = 0; i < 6; i++)
- event_close(&events[i]);
-
- FAIL_IF(ebb_state.stats.ebb_count == 0);
-
- return 0;
-}
-
-int main(void)
-{
- return test_harness(multi_counter, "multi_counter");
-}
diff --git a/powerpc/pmu/ebb/multi_ebb_procs_test.c b/powerpc/pmu/ebb/multi_ebb_procs_test.c
deleted file mode 100644
index b8dc371..0000000
--- a/powerpc/pmu/ebb/multi_ebb_procs_test.c
+++ /dev/null
@@ -1,109 +0,0 @@
-/*
- * Copyright 2014, Michael Ellerman, IBM Corp.
- * Licensed under GPLv2.
- */
-
-#include <stdbool.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <signal.h>
-
-#include "ebb.h"
-
-
-/*
- * Test running multiple EBB using processes at once on a single CPU. They
- * should all run happily without interfering with each other.
- */
-
-static bool child_should_exit;
-
-static void sigint_handler(int signal)
-{
- child_should_exit = true;
-}
-
-struct sigaction sigint_action = {
- .sa_handler = sigint_handler,
-};
-
-static int cycles_child(void)
-{
- struct event event;
-
- if (sigaction(SIGINT, &sigint_action, NULL)) {
- perror("sigaction");
- return 1;
- }
-
- event_init_named(&event, 0x1001e, "cycles");
- event_leader_ebb_init(&event);
-
- event.attr.exclude_kernel = 1;
- event.attr.exclude_hv = 1;
- event.attr.exclude_idle = 1;
-
- FAIL_IF(event_open(&event));
-
- ebb_enable_pmc_counting(1);
- setup_ebb_handler(standard_ebb_callee);
- ebb_global_enable();
-
- FAIL_IF(ebb_event_enable(&event));
-
- mtspr(SPRN_PMC1, pmc_sample_period(sample_period));
-
- while (!child_should_exit) {
- FAIL_IF(core_busy_loop());
- FAIL_IF(ebb_check_mmcr0());
- }
-
- ebb_global_disable();
- ebb_freeze_pmcs();
-
- count_pmc(1, sample_period);
-
- dump_summary_ebb_state();
-
- event_close(&event);
-
- FAIL_IF(ebb_state.stats.ebb_count == 0);
-
- return 0;
-}
-
-#define NR_CHILDREN 4
-
-int multi_ebb_procs(void)
-{
- pid_t pids[NR_CHILDREN];
- int cpu, rc, i;
-
- cpu = pick_online_cpu();
- FAIL_IF(cpu < 0);
- FAIL_IF(bind_to_cpu(cpu));
-
- for (i = 0; i < NR_CHILDREN; i++) {
- pids[i] = fork();
- if (pids[i] == 0)
- exit(cycles_child());
- }
-
- /* Have them all run for "a while" */
- sleep(10);
-
- rc = 0;
- for (i = 0; i < NR_CHILDREN; i++) {
- /* Tell them to stop */
- kill(pids[i], SIGINT);
- /* And wait */
- rc |= wait_for_child(pids[i]);
- }
-
- return rc;
-}
-
-int main(void)
-{
- return test_harness(multi_ebb_procs, "multi_ebb_procs");
-}
diff --git a/powerpc/pmu/ebb/no_handler_test.c b/powerpc/pmu/ebb/no_handler_test.c
deleted file mode 100644
index 2f9bf8e..0000000
--- a/powerpc/pmu/ebb/no_handler_test.c
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * Copyright 2014, Michael Ellerman, IBM Corp.
- * Licensed under GPLv2.
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <setjmp.h>
-#include <signal.h>
-
-#include "ebb.h"
-
-
-/* Test that things work sanely if we have no handler */
-
-static int no_handler_test(void)
-{
- struct event event;
- u64 val;
- int i;
-
- event_init_named(&event, 0x1001e, "cycles");
- event_leader_ebb_init(&event);
-
- event.attr.exclude_kernel = 1;
- event.attr.exclude_hv = 1;
- event.attr.exclude_idle = 1;
-
- FAIL_IF(event_open(&event));
- FAIL_IF(ebb_event_enable(&event));
-
- val = mfspr(SPRN_EBBHR);
- FAIL_IF(val != 0);
-
- /* Make sure it overflows quickly */
- sample_period = 1000;
- mtspr(SPRN_PMC1, pmc_sample_period(sample_period));
-
- /* Spin to make sure the event has time to overflow */
- for (i = 0; i < 1000; i++)
- mb();
-
- dump_ebb_state();
-
- /* We expect to see the PMU frozen & PMAO set */
- val = mfspr(SPRN_MMCR0);
- FAIL_IF(val != 0x0000000080000080);
-
- event_close(&event);
-
- dump_ebb_state();
-
- /* The real test is that we never took an EBB at 0x0 */
-
- return 0;
-}
-
-int main(void)
-{
- return test_harness(no_handler_test,"no_handler_test");
-}
diff --git a/powerpc/pmu/ebb/pmae_handling_test.c b/powerpc/pmu/ebb/pmae_handling_test.c
deleted file mode 100644
index 986500f..0000000
--- a/powerpc/pmu/ebb/pmae_handling_test.c
+++ /dev/null
@@ -1,106 +0,0 @@
-/*
- * Copyright 2014, Michael Ellerman, IBM Corp.
- * Licensed under GPLv2.
- */
-
-#include <sched.h>
-#include <signal.h>
-#include <stdbool.h>
-#include <stdio.h>
-#include <stdlib.h>
-
-#include "ebb.h"
-
-
-/*
- * Test that the kernel properly handles PMAE across context switches.
- *
- * We test this by calling into the kernel inside our EBB handler, where PMAE
- * is clear. A cpu eater companion thread is running on the same CPU as us to
- * encourage the scheduler to switch us.
- *
- * The kernel must make sure that when it context switches us back in, it
- * honours the fact that we had PMAE clear.
- *
- * Observed to hit the failing case on the first EBB with a broken kernel.
- */
-
-static bool mmcr0_mismatch;
-static uint64_t before, after;
-
-static void syscall_ebb_callee(void)
-{
- uint64_t val;
-
- val = mfspr(SPRN_BESCR);
- if (!(val & BESCR_PMEO)) {
- ebb_state.stats.spurious++;
- goto out;
- }
-
- ebb_state.stats.ebb_count++;
- count_pmc(1, sample_period);
-
- before = mfspr(SPRN_MMCR0);
-
- /* Try and get ourselves scheduled, to force a PMU context switch */
- sched_yield();
-
- after = mfspr(SPRN_MMCR0);
- if (before != after)
- mmcr0_mismatch = true;
-
-out:
- reset_ebb();
-}
-
-static int test_body(void)
-{
- struct event event;
-
- event_init_named(&event, 0x1001e, "cycles");
- event_leader_ebb_init(&event);
-
- event.attr.exclude_kernel = 1;
- event.attr.exclude_hv = 1;
- event.attr.exclude_idle = 1;
-
- FAIL_IF(event_open(&event));
-
- setup_ebb_handler(syscall_ebb_callee);
- ebb_global_enable();
-
- FAIL_IF(ebb_event_enable(&event));
-
- mtspr(SPRN_PMC1, pmc_sample_period(sample_period));
-
- while (ebb_state.stats.ebb_count < 20 && !mmcr0_mismatch)
- FAIL_IF(core_busy_loop());
-
- ebb_global_disable();
- ebb_freeze_pmcs();
-
- count_pmc(1, sample_period);
-
- dump_ebb_state();
-
- if (mmcr0_mismatch)
- printf("Saw MMCR0 before 0x%lx after 0x%lx\n", before, after);
-
- event_close(&event);
-
- FAIL_IF(ebb_state.stats.ebb_count == 0);
- FAIL_IF(mmcr0_mismatch);
-
- return 0;
-}
-
-int pmae_handling(void)
-{
- return eat_cpu(test_body);
-}
-
-int main(void)
-{
- return test_harness(pmae_handling, "pmae_handling");
-}
diff --git a/powerpc/pmu/ebb/pmc56_overflow_test.c b/powerpc/pmu/ebb/pmc56_overflow_test.c
deleted file mode 100644
index a503fa7..0000000
--- a/powerpc/pmu/ebb/pmc56_overflow_test.c
+++ /dev/null
@@ -1,93 +0,0 @@
-/*
- * Copyright 2014, Michael Ellerman, IBM Corp.
- * Licensed under GPLv2.
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-
-#include "ebb.h"
-
-
-/*
- * Test that PMC5 & 6 are frozen (ie. don't overflow) when they are not being
- * used. Tests the MMCR0_FC56 logic in the kernel.
- */
-
-static int pmc56_overflowed;
-
-static void ebb_callee(void)
-{
- uint64_t val;
-
- val = mfspr(SPRN_BESCR);
- if (!(val & BESCR_PMEO)) {
- ebb_state.stats.spurious++;
- goto out;
- }
-
- ebb_state.stats.ebb_count++;
- count_pmc(2, sample_period);
-
- val = mfspr(SPRN_PMC5);
- if (val >= COUNTER_OVERFLOW)
- pmc56_overflowed++;
-
- count_pmc(5, COUNTER_OVERFLOW);
-
- val = mfspr(SPRN_PMC6);
- if (val >= COUNTER_OVERFLOW)
- pmc56_overflowed++;
-
- count_pmc(6, COUNTER_OVERFLOW);
-
-out:
- reset_ebb();
-}
-
-int pmc56_overflow(void)
-{
- struct event event;
-
- /* Use PMC2 so we set PMCjCE, which enables PMC5/6 */
- event_init(&event, 0x2001e);
- event_leader_ebb_init(&event);
-
- event.attr.exclude_kernel = 1;
- event.attr.exclude_hv = 1;
- event.attr.exclude_idle = 1;
-
- FAIL_IF(event_open(&event));
-
- setup_ebb_handler(ebb_callee);
- ebb_global_enable();
-
- FAIL_IF(ebb_event_enable(&event));
-
- mtspr(SPRN_PMC1, pmc_sample_period(sample_period));
- mtspr(SPRN_PMC5, 0);
- mtspr(SPRN_PMC6, 0);
-
- while (ebb_state.stats.ebb_count < 10)
- FAIL_IF(core_busy_loop());
-
- ebb_global_disable();
- ebb_freeze_pmcs();
-
- count_pmc(2, sample_period);
-
- dump_ebb_state();
-
- printf("PMC5/6 overflow %d\n", pmc56_overflowed);
-
- event_close(&event);
-
- FAIL_IF(ebb_state.stats.ebb_count == 0 || pmc56_overflowed != 0);
-
- return 0;
-}
-
-int main(void)
-{
- return test_harness(pmc56_overflow, "pmc56_overflow");
-}
diff --git a/powerpc/pmu/ebb/reg.h b/powerpc/pmu/ebb/reg.h
deleted file mode 100644
index 5921b0d..0000000
--- a/powerpc/pmu/ebb/reg.h
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * Copyright 2014, Michael Ellerman, IBM Corp.
- * Licensed under GPLv2.
- */
-
-#ifndef _SELFTESTS_POWERPC_REG_H
-#define _SELFTESTS_POWERPC_REG_H
-
-#define __stringify_1(x) #x
-#define __stringify(x) __stringify_1(x)
-
-#define mfspr(rn) ({unsigned long rval; \
- asm volatile("mfspr %0," __stringify(rn) \
- : "=r" (rval)); rval; })
-#define mtspr(rn, v) asm volatile("mtspr " __stringify(rn) ",%0" : \
- : "r" ((unsigned long)(v)) \
- : "memory")
-
-#define mb() asm volatile("sync" : : : "memory");
-
-#define SPRN_MMCR2 769
-#define SPRN_MMCRA 770
-#define SPRN_MMCR0 779
-#define MMCR0_PMAO 0x00000080
-#define MMCR0_PMAE 0x04000000
-#define MMCR0_FC 0x80000000
-#define SPRN_EBBHR 804
-#define SPRN_EBBRR 805
-#define SPRN_BESCR 806 /* Branch event status & control register */
-#define SPRN_BESCRS 800 /* Branch event status & control set (1 bits set to 1) */
-#define SPRN_BESCRSU 801 /* Branch event status & control set upper */
-#define SPRN_BESCRR 802 /* Branch event status & control REset (1 bits set to 0) */
-#define SPRN_BESCRRU 803 /* Branch event status & control REset upper */
-
-#define BESCR_PMEO 0x1 /* PMU Event-based exception Occurred */
-#define BESCR_PME (0x1ul << 32) /* PMU Event-based exception Enable */
-
-#define SPRN_PMC1 771
-#define SPRN_PMC2 772
-#define SPRN_PMC3 773
-#define SPRN_PMC4 774
-#define SPRN_PMC5 775
-#define SPRN_PMC6 776
-
-#define SPRN_SIAR 780
-#define SPRN_SDAR 781
-#define SPRN_SIER 768
-
-#endif /* _SELFTESTS_POWERPC_REG_H */
diff --git a/powerpc/pmu/ebb/reg_access_test.c b/powerpc/pmu/ebb/reg_access_test.c
deleted file mode 100644
index 0cae66f..0000000
--- a/powerpc/pmu/ebb/reg_access_test.c
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Copyright 2014, Michael Ellerman, IBM Corp.
- * Licensed under GPLv2.
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-
-#include "ebb.h"
-#include "reg.h"
-
-
-/*
- * Test basic access to the EBB regs, they should be user accessible with no
- * kernel interaction required.
- */
-int reg_access(void)
-{
- uint64_t val, expected;
-
- expected = 0x8000000100000000ull;
- mtspr(SPRN_BESCR, expected);
- val = mfspr(SPRN_BESCR);
-
- FAIL_IF(val != expected);
-
- expected = 0x0000000001000000ull;
- mtspr(SPRN_EBBHR, expected);
- val = mfspr(SPRN_EBBHR);
-
- FAIL_IF(val != expected);
-
- return 0;
-}
-
-int main(void)
-{
- return test_harness(reg_access, "reg_access");
-}
diff --git a/powerpc/pmu/ebb/task_event_pinned_vs_ebb_test.c b/powerpc/pmu/ebb/task_event_pinned_vs_ebb_test.c
deleted file mode 100644
index d56607e..0000000
--- a/powerpc/pmu/ebb/task_event_pinned_vs_ebb_test.c
+++ /dev/null
@@ -1,91 +0,0 @@
-/*
- * Copyright 2014, Michael Ellerman, IBM Corp.
- * Licensed under GPLv2.
- */
-
-#include <signal.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <stdbool.h>
-#include <sys/types.h>
-#include <sys/wait.h>
-#include <unistd.h>
-
-#include "ebb.h"
-
-
-/*
- * Tests a pinned per-task event vs an EBB - in that order. The pinned per-task
- * event should prevent the EBB event from being enabled.
- */
-
-static int setup_child_event(struct event *event, pid_t child_pid)
-{
- event_init_named(event, 0x400FA, "PM_RUN_INST_CMPL");
-
- event->attr.pinned = 1;
-
- event->attr.exclude_kernel = 1;
- event->attr.exclude_hv = 1;
- event->attr.exclude_idle = 1;
-
- FAIL_IF(event_open_with_pid(event, child_pid));
- FAIL_IF(event_enable(event));
-
- return 0;
-}
-
-int task_event_pinned_vs_ebb(void)
-{
- union pipe read_pipe, write_pipe;
- struct event event;
- pid_t pid;
- int rc;
-
- FAIL_IF(pipe(read_pipe.fds) == -1);
- FAIL_IF(pipe(write_pipe.fds) == -1);
-
- pid = fork();
- if (pid == 0) {
- /* NB order of pipes looks reversed */
- exit(ebb_child(write_pipe, read_pipe));
- }
-
- /* We setup the task event first */
- rc = setup_child_event(&event, pid);
- if (rc) {
- kill_child_and_wait(pid);
- return rc;
- }
-
- /* Signal the child to install its EBB event and wait */
- if (sync_with_child(read_pipe, write_pipe))
- /* If it fails, wait for it to exit */
- goto wait;
-
- /* Signal the child to run */
- FAIL_IF(sync_with_child(read_pipe, write_pipe));
-
-wait:
- /* We expect it to fail to read the event */
- FAIL_IF(wait_for_child(pid) != 2);
- FAIL_IF(event_disable(&event));
- FAIL_IF(event_read(&event));
-
- event_report(&event);
-
- FAIL_IF(event.result.value == 0);
- /*
- * For reasons I don't understand enabled is usually just slightly
- * lower than running. Would be good to confirm why.
- */
- FAIL_IF(event.result.enabled == 0);
- FAIL_IF(event.result.running == 0);
-
- return 0;
-}
-
-int main(void)
-{
- return test_harness(task_event_pinned_vs_ebb, "task_event_pinned_vs_ebb");
-}
diff --git a/powerpc/pmu/ebb/task_event_vs_ebb_test.c b/powerpc/pmu/ebb/task_event_vs_ebb_test.c
deleted file mode 100644
index eba3219..0000000
--- a/powerpc/pmu/ebb/task_event_vs_ebb_test.c
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- * Copyright 2014, Michael Ellerman, IBM Corp.
- * Licensed under GPLv2.
- */
-
-#include <signal.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <stdbool.h>
-#include <sys/types.h>
-#include <sys/wait.h>
-#include <unistd.h>
-
-#include "ebb.h"
-
-
-/*
- * Tests a per-task event vs an EBB - in that order. The EBB should push the
- * per-task event off the PMU.
- */
-
-static int setup_child_event(struct event *event, pid_t child_pid)
-{
- event_init_named(event, 0x400FA, "PM_RUN_INST_CMPL");
-
- event->attr.exclude_kernel = 1;
- event->attr.exclude_hv = 1;
- event->attr.exclude_idle = 1;
-
- FAIL_IF(event_open_with_pid(event, child_pid));
- FAIL_IF(event_enable(event));
-
- return 0;
-}
-
-int task_event_vs_ebb(void)
-{
- union pipe read_pipe, write_pipe;
- struct event event;
- pid_t pid;
- int rc;
-
- FAIL_IF(pipe(read_pipe.fds) == -1);
- FAIL_IF(pipe(write_pipe.fds) == -1);
-
- pid = fork();
- if (pid == 0) {
- /* NB order of pipes looks reversed */
- exit(ebb_child(write_pipe, read_pipe));
- }
-
- /* We setup the task event first */
- rc = setup_child_event(&event, pid);
- if (rc) {
- kill_child_and_wait(pid);
- return rc;
- }
-
- /* Signal the child to install its EBB event and wait */
- if (sync_with_child(read_pipe, write_pipe))
- /* If it fails, wait for it to exit */
- goto wait;
-
- /* Signal the child to run */
- FAIL_IF(sync_with_child(read_pipe, write_pipe));
-
-wait:
- /* The EBB event should push the task event off so the child should succeed */
- FAIL_IF(wait_for_child(pid));
- FAIL_IF(event_disable(&event));
- FAIL_IF(event_read(&event));
-
- event_report(&event);
-
- /* The task event may have run, or not so we can't assert anything about it */
-
- return 0;
-}
-
-int main(void)
-{
- return test_harness(task_event_vs_ebb, "task_event_vs_ebb");
-}
diff --git a/powerpc/pmu/ebb/trace.c b/powerpc/pmu/ebb/trace.c
deleted file mode 100644
index 251e66a..0000000
--- a/powerpc/pmu/ebb/trace.c
+++ /dev/null
@@ -1,300 +0,0 @@
-/*
- * Copyright 2014, Michael Ellerman, IBM Corp.
- * Licensed under GPLv2.
- */
-
-#include <errno.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <sys/mman.h>
-
-#include "trace.h"
-
-
-struct trace_buffer *trace_buffer_allocate(u64 size)
-{
- struct trace_buffer *tb;
-
- if (size < sizeof(*tb)) {
- fprintf(stderr, "Error: trace buffer too small\n");
- return NULL;
- }
-
- tb = mmap(NULL, size, PROT_READ | PROT_WRITE,
- MAP_ANONYMOUS | MAP_PRIVATE, -1, 0);
- if (tb == MAP_FAILED) {
- perror("mmap");
- return NULL;
- }
-
- tb->size = size;
- tb->tail = tb->data;
- tb->overflow = false;
-
- return tb;
-}
-
-static bool trace_check_bounds(struct trace_buffer *tb, void *p)
-{
- return p < ((void *)tb + tb->size);
-}
-
-static bool trace_check_alloc(struct trace_buffer *tb, void *p)
-{
- /*
- * If we ever overflowed don't allow any more input. This prevents us
- * from dropping a large item and then later logging a small one. The
- * buffer should just stop when overflow happened, not be patchy. If
- * you're overflowing, make your buffer bigger.
- */
- if (tb->overflow)
- return false;
-
- if (!trace_check_bounds(tb, p)) {
- tb->overflow = true;
- return false;
- }
-
- return true;
-}
-
-static void *trace_alloc(struct trace_buffer *tb, int bytes)
-{
- void *p, *newtail;
-
- p = tb->tail;
- newtail = tb->tail + bytes;
- if (!trace_check_alloc(tb, newtail))
- return NULL;
-
- tb->tail = newtail;
-
- return p;
-}
-
-static struct trace_entry *trace_alloc_entry(struct trace_buffer *tb, int payload_size)
-{
- struct trace_entry *e;
-
- e = trace_alloc(tb, sizeof(*e) + payload_size);
- if (e)
- e->length = payload_size;
-
- return e;
-}
-
-int trace_log_reg(struct trace_buffer *tb, u64 reg, u64 value)
-{
- struct trace_entry *e;
- u64 *p;
-
- e = trace_alloc_entry(tb, sizeof(reg) + sizeof(value));
- if (!e)
- return -ENOSPC;
-
- e->type = TRACE_TYPE_REG;
- p = (u64 *)e->data;
- *p++ = reg;
- *p++ = value;
-
- return 0;
-}
-
-int trace_log_counter(struct trace_buffer *tb, u64 value)
-{
- struct trace_entry *e;
- u64 *p;
-
- e = trace_alloc_entry(tb, sizeof(value));
- if (!e)
- return -ENOSPC;
-
- e->type = TRACE_TYPE_COUNTER;
- p = (u64 *)e->data;
- *p++ = value;
-
- return 0;
-}
-
-int trace_log_string(struct trace_buffer *tb, char *str)
-{
- struct trace_entry *e;
- char *p;
- int len;
-
- len = strlen(str);
-
- /* We NULL terminate to make printing easier */
- e = trace_alloc_entry(tb, len + 1);
- if (!e)
- return -ENOSPC;
-
- e->type = TRACE_TYPE_STRING;
- p = (char *)e->data;
- memcpy(p, str, len);
- p += len;
- *p = '\0';
-
- return 0;
-}
-
-int trace_log_indent(struct trace_buffer *tb)
-{
- struct trace_entry *e;
-
- e = trace_alloc_entry(tb, 0);
- if (!e)
- return -ENOSPC;
-
- e->type = TRACE_TYPE_INDENT;
-
- return 0;
-}
-
-int trace_log_outdent(struct trace_buffer *tb)
-{
- struct trace_entry *e;
-
- e = trace_alloc_entry(tb, 0);
- if (!e)
- return -ENOSPC;
-
- e->type = TRACE_TYPE_OUTDENT;
-
- return 0;
-}
-
-static void trace_print_header(int seq, int prefix)
-{
- printf("%*s[%d]: ", prefix, "", seq);
-}
-
-static char *trace_decode_reg(int reg)
-{
- switch (reg) {
- case 769: return "SPRN_MMCR2"; break;
- case 770: return "SPRN_MMCRA"; break;
- case 779: return "SPRN_MMCR0"; break;
- case 804: return "SPRN_EBBHR"; break;
- case 805: return "SPRN_EBBRR"; break;
- case 806: return "SPRN_BESCR"; break;
- case 800: return "SPRN_BESCRS"; break;
- case 801: return "SPRN_BESCRSU"; break;
- case 802: return "SPRN_BESCRR"; break;
- case 803: return "SPRN_BESCRRU"; break;
- case 771: return "SPRN_PMC1"; break;
- case 772: return "SPRN_PMC2"; break;
- case 773: return "SPRN_PMC3"; break;
- case 774: return "SPRN_PMC4"; break;
- case 775: return "SPRN_PMC5"; break;
- case 776: return "SPRN_PMC6"; break;
- case 780: return "SPRN_SIAR"; break;
- case 781: return "SPRN_SDAR"; break;
- case 768: return "SPRN_SIER"; break;
- }
-
- return NULL;
-}
-
-static void trace_print_reg(struct trace_entry *e)
-{
- u64 *p, *reg, *value;
- char *name;
-
- p = (u64 *)e->data;
- reg = p++;
- value = p;
-
- name = trace_decode_reg(*reg);
- if (name)
- printf("register %-10s = 0x%016llx\n", name, *value);
- else
- printf("register %lld = 0x%016llx\n", *reg, *value);
-}
-
-static void trace_print_counter(struct trace_entry *e)
-{
- u64 *value;
-
- value = (u64 *)e->data;
- printf("counter = %lld\n", *value);
-}
-
-static void trace_print_string(struct trace_entry *e)
-{
- char *str;
-
- str = (char *)e->data;
- puts(str);
-}
-
-#define BASE_PREFIX 2
-#define PREFIX_DELTA 8
-
-static void trace_print_entry(struct trace_entry *e, int seq, int *prefix)
-{
- switch (e->type) {
- case TRACE_TYPE_REG:
- trace_print_header(seq, *prefix);
- trace_print_reg(e);
- break;
- case TRACE_TYPE_COUNTER:
- trace_print_header(seq, *prefix);
- trace_print_counter(e);
- break;
- case TRACE_TYPE_STRING:
- trace_print_header(seq, *prefix);
- trace_print_string(e);
- break;
- case TRACE_TYPE_INDENT:
- trace_print_header(seq, *prefix);
- puts("{");
- *prefix += PREFIX_DELTA;
- break;
- case TRACE_TYPE_OUTDENT:
- *prefix -= PREFIX_DELTA;
- if (*prefix < BASE_PREFIX)
- *prefix = BASE_PREFIX;
- trace_print_header(seq, *prefix);
- puts("}");
- break;
- default:
- trace_print_header(seq, *prefix);
- printf("entry @ %p type %d\n", e, e->type);
- break;
- }
-}
-
-void trace_buffer_print(struct trace_buffer *tb)
-{
- struct trace_entry *e;
- int i, prefix;
- void *p;
-
- printf("Trace buffer dump:\n");
- printf(" address %p \n", tb);
- printf(" tail %p\n", tb->tail);
- printf(" size %llu\n", tb->size);
- printf(" overflow %s\n", tb->overflow ? "TRUE" : "false");
- printf(" Content:\n");
-
- p = tb->data;
-
- i = 0;
- prefix = BASE_PREFIX;
-
- while (trace_check_bounds(tb, p) && p < tb->tail) {
- e = p;
-
- trace_print_entry(e, i, &prefix);
-
- i++;
- p = (void *)e + sizeof(*e) + e->length;
- }
-}
-
-void trace_print_location(struct trace_buffer *tb)
-{
- printf("Trace buffer 0x%llx bytes @ %p\n", tb->size, tb);
-}
diff --git a/powerpc/pmu/ebb/trace.h b/powerpc/pmu/ebb/trace.h
deleted file mode 100644
index 926458e..0000000
--- a/powerpc/pmu/ebb/trace.h
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Copyright 2014, Michael Ellerman, IBM Corp.
- * Licensed under GPLv2.
- */
-
-#ifndef _SELFTESTS_POWERPC_PMU_EBB_TRACE_H
-#define _SELFTESTS_POWERPC_PMU_EBB_TRACE_H
-
-#include "utils.h"
-
-#define TRACE_TYPE_REG 1
-#define TRACE_TYPE_COUNTER 2
-#define TRACE_TYPE_STRING 3
-#define TRACE_TYPE_INDENT 4
-#define TRACE_TYPE_OUTDENT 5
-
-struct trace_entry
-{
- u8 type;
- u8 length;
- u8 data[0];
-};
-
-struct trace_buffer
-{
- u64 size;
- bool overflow;
- void *tail;
- u8 data[0];
-};
-
-struct trace_buffer *trace_buffer_allocate(u64 size);
-int trace_log_reg(struct trace_buffer *tb, u64 reg, u64 value);
-int trace_log_counter(struct trace_buffer *tb, u64 value);
-int trace_log_string(struct trace_buffer *tb, char *str);
-int trace_log_indent(struct trace_buffer *tb);
-int trace_log_outdent(struct trace_buffer *tb);
-void trace_buffer_print(struct trace_buffer *tb);
-void trace_print_location(struct trace_buffer *tb);
-
-#endif /* _SELFTESTS_POWERPC_PMU_EBB_TRACE_H */
diff --git a/powerpc/pmu/event.c b/powerpc/pmu/event.c
deleted file mode 100644
index 184b368..0000000
--- a/powerpc/pmu/event.c
+++ /dev/null
@@ -1,131 +0,0 @@
-/*
- * Copyright 2013, Michael Ellerman, IBM Corp.
- * Licensed under GPLv2.
- */
-
-#define _GNU_SOURCE
-#include <unistd.h>
-#include <sys/syscall.h>
-#include <string.h>
-#include <stdio.h>
-#include <sys/ioctl.h>
-
-#include "event.h"
-
-
-int perf_event_open(struct perf_event_attr *attr, pid_t pid, int cpu,
- int group_fd, unsigned long flags)
-{
- return syscall(__NR_perf_event_open, attr, pid, cpu,
- group_fd, flags);
-}
-
-void event_init_opts(struct event *e, u64 config, int type, char *name)
-{
- memset(e, 0, sizeof(*e));
-
- e->name = name;
-
- e->attr.type = type;
- e->attr.config = config;
- e->attr.size = sizeof(e->attr);
- /* This has to match the structure layout in the header */
- e->attr.read_format = PERF_FORMAT_TOTAL_TIME_ENABLED | \
- PERF_FORMAT_TOTAL_TIME_RUNNING;
-}
-
-void event_init_named(struct event *e, u64 config, char *name)
-{
- event_init_opts(e, config, PERF_TYPE_RAW, name);
-}
-
-void event_init(struct event *e, u64 config)
-{
- event_init_opts(e, config, PERF_TYPE_RAW, "event");
-}
-
-#define PERF_CURRENT_PID 0
-#define PERF_NO_PID -1
-#define PERF_NO_CPU -1
-#define PERF_NO_GROUP -1
-
-int event_open_with_options(struct event *e, pid_t pid, int cpu, int group_fd)
-{
- e->fd = perf_event_open(&e->attr, pid, cpu, group_fd, 0);
- if (e->fd == -1) {
- perror("perf_event_open");
- return -1;
- }
-
- return 0;
-}
-
-int event_open_with_group(struct event *e, int group_fd)
-{
- return event_open_with_options(e, PERF_CURRENT_PID, PERF_NO_CPU, group_fd);
-}
-
-int event_open_with_pid(struct event *e, pid_t pid)
-{
- return event_open_with_options(e, pid, PERF_NO_CPU, PERF_NO_GROUP);
-}
-
-int event_open_with_cpu(struct event *e, int cpu)
-{
- return event_open_with_options(e, PERF_NO_PID, cpu, PERF_NO_GROUP);
-}
-
-int event_open(struct event *e)
-{
- return event_open_with_options(e, PERF_CURRENT_PID, PERF_NO_CPU, PERF_NO_GROUP);
-}
-
-void event_close(struct event *e)
-{
- close(e->fd);
-}
-
-int event_enable(struct event *e)
-{
- return ioctl(e->fd, PERF_EVENT_IOC_ENABLE);
-}
-
-int event_disable(struct event *e)
-{
- return ioctl(e->fd, PERF_EVENT_IOC_DISABLE);
-}
-
-int event_reset(struct event *e)
-{
- return ioctl(e->fd, PERF_EVENT_IOC_RESET);
-}
-
-int event_read(struct event *e)
-{
- int rc;
-
- rc = read(e->fd, &e->result, sizeof(e->result));
- if (rc != sizeof(e->result)) {
- fprintf(stderr, "read error on event %p!\n", e);
- return -1;
- }
-
- return 0;
-}
-
-void event_report_justified(struct event *e, int name_width, int result_width)
-{
- printf("%*s: result %*llu ", name_width, e->name, result_width,
- e->result.value);
-
- if (e->result.running == e->result.enabled)
- printf("running/enabled %llu\n", e->result.running);
- else
- printf("running %llu enabled %llu\n", e->result.running,
- e->result.enabled);
-}
-
-void event_report(struct event *e)
-{
- event_report_justified(e, 0, 0);
-}
diff --git a/powerpc/pmu/event.h b/powerpc/pmu/event.h
deleted file mode 100644
index a0ea6b1..0000000
--- a/powerpc/pmu/event.h
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Copyright 2013, Michael Ellerman, IBM Corp.
- * Licensed under GPLv2.
- */
-
-#ifndef _SELFTESTS_POWERPC_PMU_EVENT_H
-#define _SELFTESTS_POWERPC_PMU_EVENT_H
-
-#include <unistd.h>
-#include <linux/perf_event.h>
-
-#include "utils.h"
-
-
-struct event {
- struct perf_event_attr attr;
- char *name;
- int fd;
- /* This must match the read_format we use */
- struct {
- u64 value;
- u64 running;
- u64 enabled;
- } result;
-};
-
-void event_init(struct event *e, u64 config);
-void event_init_named(struct event *e, u64 config, char *name);
-void event_init_opts(struct event *e, u64 config, int type, char *name);
-int event_open_with_options(struct event *e, pid_t pid, int cpu, int group_fd);
-int event_open_with_group(struct event *e, int group_fd);
-int event_open_with_pid(struct event *e, pid_t pid);
-int event_open_with_cpu(struct event *e, int cpu);
-int event_open(struct event *e);
-void event_close(struct event *e);
-int event_enable(struct event *e);
-int event_disable(struct event *e);
-int event_reset(struct event *e);
-int event_read(struct event *e);
-void event_report_justified(struct event *e, int name_width, int result_width);
-void event_report(struct event *e);
-
-#endif /* _SELFTESTS_POWERPC_PMU_EVENT_H */
diff --git a/powerpc/pmu/lib.c b/powerpc/pmu/lib.c
deleted file mode 100644
index 0f6a473..0000000
--- a/powerpc/pmu/lib.c
+++ /dev/null
@@ -1,252 +0,0 @@
-/*
- * Copyright 2014, Michael Ellerman, IBM Corp.
- * Licensed under GPLv2.
- */
-
-#define _GNU_SOURCE /* For CPU_ZERO etc. */
-
-#include <errno.h>
-#include <sched.h>
-#include <setjmp.h>
-#include <stdlib.h>
-#include <sys/wait.h>
-
-#include "utils.h"
-#include "lib.h"
-
-
-int pick_online_cpu(void)
-{
- cpu_set_t mask;
- int cpu;
-
- CPU_ZERO(&mask);
-
- if (sched_getaffinity(0, sizeof(mask), &mask)) {
- perror("sched_getaffinity");
- return -1;
- }
-
- /* We prefer a primary thread, but skip 0 */
- for (cpu = 8; cpu < CPU_SETSIZE; cpu += 8)
- if (CPU_ISSET(cpu, &mask))
- return cpu;
-
- /* Search for anything, but in reverse */
- for (cpu = CPU_SETSIZE - 1; cpu >= 0; cpu--)
- if (CPU_ISSET(cpu, &mask))
- return cpu;
-
- printf("No cpus in affinity mask?!\n");
- return -1;
-}
-
-int bind_to_cpu(int cpu)
-{
- cpu_set_t mask;
-
- printf("Binding to cpu %d\n", cpu);
-
- CPU_ZERO(&mask);
- CPU_SET(cpu, &mask);
-
- return sched_setaffinity(0, sizeof(mask), &mask);
-}
-
-#define PARENT_TOKEN 0xAA
-#define CHILD_TOKEN 0x55
-
-int sync_with_child(union pipe read_pipe, union pipe write_pipe)
-{
- char c = PARENT_TOKEN;
-
- FAIL_IF(write(write_pipe.write_fd, &c, 1) != 1);
- FAIL_IF(read(read_pipe.read_fd, &c, 1) != 1);
- if (c != CHILD_TOKEN) /* sometimes expected */
- return 1;
-
- return 0;
-}
-
-int wait_for_parent(union pipe read_pipe)
-{
- char c;
-
- FAIL_IF(read(read_pipe.read_fd, &c, 1) != 1);
- FAIL_IF(c != PARENT_TOKEN);
-
- return 0;
-}
-
-int notify_parent(union pipe write_pipe)
-{
- char c = CHILD_TOKEN;
-
- FAIL_IF(write(write_pipe.write_fd, &c, 1) != 1);
-
- return 0;
-}
-
-int notify_parent_of_error(union pipe write_pipe)
-{
- char c = ~CHILD_TOKEN;
-
- FAIL_IF(write(write_pipe.write_fd, &c, 1) != 1);
-
- return 0;
-}
-
-int wait_for_child(pid_t child_pid)
-{
- int rc;
-
- if (waitpid(child_pid, &rc, 0) == -1) {
- perror("waitpid");
- return 1;
- }
-
- if (WIFEXITED(rc))
- rc = WEXITSTATUS(rc);
- else
- rc = 1; /* Signal or other */
-
- return rc;
-}
-
-int kill_child_and_wait(pid_t child_pid)
-{
- kill(child_pid, SIGTERM);
-
- return wait_for_child(child_pid);
-}
-
-static int eat_cpu_child(union pipe read_pipe, union pipe write_pipe)
-{
- volatile int i = 0;
-
- /*
- * We are just here to eat cpu and die. So make sure we can be killed,
- * and also don't do any custom SIGTERM handling.
- */
- signal(SIGTERM, SIG_DFL);
-
- notify_parent(write_pipe);
- wait_for_parent(read_pipe);
-
- /* Soak up cpu forever */
- while (1) i++;
-
- return 0;
-}
-
-pid_t eat_cpu(int (test_function)(void))
-{
- union pipe read_pipe, write_pipe;
- int cpu, rc;
- pid_t pid;
-
- cpu = pick_online_cpu();
- FAIL_IF(cpu < 0);
- FAIL_IF(bind_to_cpu(cpu));
-
- if (pipe(read_pipe.fds) == -1)
- return -1;
-
- if (pipe(write_pipe.fds) == -1)
- return -1;
-
- pid = fork();
- if (pid == 0)
- exit(eat_cpu_child(write_pipe, read_pipe));
-
- if (sync_with_child(read_pipe, write_pipe)) {
- rc = -1;
- goto out;
- }
-
- printf("main test running as pid %d\n", getpid());
-
- rc = test_function();
-out:
- kill(pid, SIGKILL);
-
- return rc;
-}
-
-struct addr_range libc, vdso;
-
-int parse_proc_maps(void)
-{
- char execute, name[128];
- uint64_t start, end;
- FILE *f;
- int rc;
-
- f = fopen("/proc/self/maps", "r");
- if (!f) {
- perror("fopen");
- return -1;
- }
-
- do {
- /* This skips line with no executable which is what we want */
- rc = fscanf(f, "%lx-%lx %*c%*c%c%*c %*x %*d:%*d %*d %127s\n",
- &start, &end, &execute, name);
- if (rc <= 0)
- break;
-
- if (execute != 'x')
- continue;
-
- if (strstr(name, "libc")) {
- libc.first = start;
- libc.last = end - 1;
- } else if (strstr(name, "[vdso]")) {
- vdso.first = start;
- vdso.last = end - 1;
- }
- } while(1);
-
- fclose(f);
-
- return 0;
-}
-
-#define PARANOID_PATH "/proc/sys/kernel/perf_event_paranoid"
-
-bool require_paranoia_below(int level)
-{
- unsigned long current;
- char *end, buf[16];
- FILE *f;
- int rc;
-
- rc = -1;
-
- f = fopen(PARANOID_PATH, "r");
- if (!f) {
- perror("fopen");
- goto out;
- }
-
- if (!fgets(buf, sizeof(buf), f)) {
- printf("Couldn't read " PARANOID_PATH "?\n");
- goto out_close;
- }
-
- current = strtoul(buf, &end, 10);
-
- if (end == buf) {
- printf("Couldn't parse " PARANOID_PATH "?\n");
- goto out_close;
- }
-
- if (current >= level)
- goto out;
-
- rc = 0;
-out_close:
- fclose(f);
-out:
- return rc;
-}
diff --git a/powerpc/pmu/lib.h b/powerpc/pmu/lib.h
deleted file mode 100644
index ca5d72a..0000000
--- a/powerpc/pmu/lib.h
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Copyright 2014, Michael Ellerman, IBM Corp.
- * Licensed under GPLv2.
- */
-
-#ifndef __SELFTESTS_POWERPC_PMU_LIB_H
-#define __SELFTESTS_POWERPC_PMU_LIB_H
-
-#include <stdio.h>
-#include <stdint.h>
-#include <string.h>
-#include <unistd.h>
-
-union pipe {
- struct {
- int read_fd;
- int write_fd;
- };
- int fds[2];
-};
-
-extern int pick_online_cpu(void);
-extern int bind_to_cpu(int cpu);
-extern int kill_child_and_wait(pid_t child_pid);
-extern int wait_for_child(pid_t child_pid);
-extern int sync_with_child(union pipe read_pipe, union pipe write_pipe);
-extern int wait_for_parent(union pipe read_pipe);
-extern int notify_parent(union pipe write_pipe);
-extern int notify_parent_of_error(union pipe write_pipe);
-extern pid_t eat_cpu(int (test_function)(void));
-extern bool require_paranoia_below(int level);
-
-struct addr_range {
- uint64_t first, last;
-};
-
-extern struct addr_range libc, vdso;
-
-int parse_proc_maps(void);
-
-#endif /* __SELFTESTS_POWERPC_PMU_LIB_H */
diff --git a/powerpc/pmu/loop.S b/powerpc/pmu/loop.S
deleted file mode 100644
index 20c1f08..0000000
--- a/powerpc/pmu/loop.S
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Copyright 2013, Michael Ellerman, IBM Corp.
- * Licensed under GPLv2.
- */
-
-#include <ppc-asm.h>
-
- .text
-
-FUNC_START(thirty_two_instruction_loop)
- cmpdi r3,0
- beqlr
- addi r4,r3,1
- addi r4,r4,1
- addi r4,r4,1
- addi r4,r4,1
- addi r4,r4,1
- addi r4,r4,1
- addi r4,r4,1
- addi r4,r4,1
- addi r4,r4,1
- addi r4,r4,1
- addi r4,r4,1
- addi r4,r4,1
- addi r4,r4,1
- addi r4,r4,1
- addi r4,r4,1
- addi r4,r4,1
- addi r4,r4,1
- addi r4,r4,1
- addi r4,r4,1
- addi r4,r4,1
- addi r4,r4,1
- addi r4,r4,1
- addi r4,r4,1
- addi r4,r4,1
- addi r4,r4,1
- addi r4,r4,1
- addi r4,r4,1
- addi r4,r4,1 # 28 addi's
- subi r3,r3,1
- b FUNC_NAME(thirty_two_instruction_loop)
-FUNC_END(thirty_two_instruction_loop)
diff --git a/powerpc/subunit.h b/powerpc/subunit.h
deleted file mode 100644
index 9c6c4e9..0000000
--- a/powerpc/subunit.h
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * Copyright 2013, Michael Ellerman, IBM Corp.
- * Licensed under GPLv2.
- */
-
-#ifndef _SELFTESTS_POWERPC_SUBUNIT_H
-#define _SELFTESTS_POWERPC_SUBUNIT_H
-
-static inline void test_start(char *name)
-{
- printf("test: %s\n", name);
-}
-
-static inline void test_failure_detail(char *name, char *detail)
-{
- printf("failure: %s [%s]\n", name, detail);
-}
-
-static inline void test_failure(char *name)
-{
- printf("failure: %s\n", name);
-}
-
-static inline void test_error(char *name)
-{
- printf("error: %s\n", name);
-}
-
-static inline void test_skip(char *name)
-{
- printf("skip: %s\n", name);
-}
-
-static inline void test_success(char *name)
-{
- printf("success: %s\n", name);
-}
-
-static inline void test_finish(char *name, int status)
-{
- if (status)
- test_failure(name);
- else
- test_success(name);
-}
-
-static inline void test_set_git_version(char *value)
-{
- printf("tags: git_version:%s\n", value);
-}
-
-#endif /* _SELFTESTS_POWERPC_SUBUNIT_H */
diff --git a/powerpc/tm/Makefile b/powerpc/tm/Makefile
deleted file mode 100644
index 2cede23..0000000
--- a/powerpc/tm/Makefile
+++ /dev/null
@@ -1,15 +0,0 @@
-PROGS := tm-resched-dscr
-
-all: $(PROGS)
-
-$(PROGS): ../harness.c
-
-run_tests: all
- @-for PROG in $(PROGS); do \
- ./$$PROG; \
- done;
-
-clean:
- rm -f $(PROGS) *.o
-
-.PHONY: all run_tests clean
diff --git a/powerpc/tm/tm-resched-dscr.c b/powerpc/tm/tm-resched-dscr.c
deleted file mode 100644
index 42d4c8c..0000000
--- a/powerpc/tm/tm-resched-dscr.c
+++ /dev/null
@@ -1,98 +0,0 @@
-/* Test context switching to see if the DSCR SPR is correctly preserved
- * when within a transaction.
- *
- * Note: We assume that the DSCR has been left at the default value (0)
- * for all CPUs.
- *
- * Method:
- *
- * Set a value into the DSCR.
- *
- * Start a transaction, and suspend it (*).
- *
- * Hard loop checking to see if the transaction has become doomed.
- *
- * Now that we *may* have been preempted, record the DSCR and TEXASR SPRS.
- *
- * If the abort was because of a context switch, check the DSCR value.
- * Otherwise, try again.
- *
- * (*) If the transaction is not suspended we can't see the problem because
- * the transaction abort handler will restore the DSCR to it's checkpointed
- * value before we regain control.
- */
-
-#include <inttypes.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <assert.h>
-#include <asm/tm.h>
-
-#include "utils.h"
-
-#define TBEGIN ".long 0x7C00051D ;"
-#define TEND ".long 0x7C00055D ;"
-#define TCHECK ".long 0x7C00059C ;"
-#define TSUSPEND ".long 0x7C0005DD ;"
-#define TRESUME ".long 0x7C2005DD ;"
-#define SPRN_TEXASR 0x82
-#define SPRN_DSCR 0x03
-
-int test_body(void)
-{
- uint64_t rv, dscr1 = 1, dscr2, texasr;
-
- printf("Check DSCR TM context switch: ");
- fflush(stdout);
- for (;;) {
- rv = 1;
- asm __volatile__ (
- /* set a known value into the DSCR */
- "ld 3, %[dscr1];"
- "mtspr %[sprn_dscr], 3;"
-
- /* start and suspend a transaction */
- TBEGIN
- "beq 1f;"
- TSUSPEND
-
- /* hard loop until the transaction becomes doomed */
- "2: ;"
- TCHECK
- "bc 4, 0, 2b;"
-
- /* record DSCR and TEXASR */
- "mfspr 3, %[sprn_dscr];"
- "std 3, %[dscr2];"
- "mfspr 3, %[sprn_texasr];"
- "std 3, %[texasr];"
-
- TRESUME
- TEND
- "li %[rv], 0;"
- "1: ;"
- : [rv]"=r"(rv), [dscr2]"=m"(dscr2), [texasr]"=m"(texasr)
- : [dscr1]"m"(dscr1)
- , [sprn_dscr]"i"(SPRN_DSCR), [sprn_texasr]"i"(SPRN_TEXASR)
- : "memory", "r3"
- );
- assert(rv); /* make sure the transaction aborted */
- if ((texasr >> 56) != TM_CAUSE_RESCHED) {
- putchar('.');
- fflush(stdout);
- continue;
- }
- if (dscr2 != dscr1) {
- printf(" FAIL\n");
- return 1;
- } else {
- printf(" OK\n");
- return 0;
- }
- }
-}
-
-int main(void)
-{
- return test_harness(test_body, "tm_resched_dscr");
-}
diff --git a/powerpc/utils.h b/powerpc/utils.h
deleted file mode 100644
index a93777a..0000000
--- a/powerpc/utils.h
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * Copyright 2013, Michael Ellerman, IBM Corp.
- * Licensed under GPLv2.
- */
-
-#ifndef _SELFTESTS_POWERPC_UTILS_H
-#define _SELFTESTS_POWERPC_UTILS_H
-
-#include <stdint.h>
-#include <stdbool.h>
-
-/* Avoid headaches with PRI?64 - just use %ll? always */
-typedef unsigned long long u64;
-typedef signed long long s64;
-
-/* Just for familiarity */
-typedef uint32_t u32;
-typedef uint8_t u8;
-
-
-int test_harness(int (test_function)(void), char *name);
-
-
-/* Yes, this is evil */
-#define FAIL_IF(x) \
-do { \
- if ((x)) { \
- fprintf(stderr, \
- "[FAIL] Test FAILED on line %d\n", __LINE__); \
- return 1; \
- } \
-} while (0)
-
-/* The test harness uses this, yes it's gross */
-#define MAGIC_SKIP_RETURN_VALUE 99
-
-#define SKIP_IF(x) \
-do { \
- if ((x)) { \
- fprintf(stderr, \
- "[SKIP] Test skipped on line %d\n", __LINE__); \
- return MAGIC_SKIP_RETURN_VALUE; \
- } \
-} while (0)
-
-#define _str(s) #s
-#define str(s) _str(s)
-
-#endif /* _SELFTESTS_POWERPC_UTILS_H */
diff --git a/ptrace/Makefile b/ptrace/Makefile
deleted file mode 100644
index 47ae2d3..0000000
--- a/ptrace/Makefile
+++ /dev/null
@@ -1,10 +0,0 @@
-CFLAGS += -iquote../../../../include/uapi -Wall
-peeksiginfo: peeksiginfo.c
-
-all: peeksiginfo
-
-clean:
- rm -f peeksiginfo
-
-run_tests: all
- @./peeksiginfo || echo "peeksiginfo selftests: [FAIL]"
diff --git a/ptrace/peeksiginfo.c b/ptrace/peeksiginfo.c
deleted file mode 100644
index d46558b..0000000
--- a/ptrace/peeksiginfo.c
+++ /dev/null
@@ -1,214 +0,0 @@
-#define _GNU_SOURCE
-#include <stdio.h>
-#include <signal.h>
-#include <unistd.h>
-#include <errno.h>
-#include <linux/types.h>
-#include <sys/wait.h>
-#include <sys/syscall.h>
-#include <sys/user.h>
-#include <sys/mman.h>
-
-#include "linux/ptrace.h"
-
-static int sys_rt_sigqueueinfo(pid_t tgid, int sig, siginfo_t *uinfo)
-{
- return syscall(SYS_rt_sigqueueinfo, tgid, sig, uinfo);
-}
-
-static int sys_rt_tgsigqueueinfo(pid_t tgid, pid_t tid,
- int sig, siginfo_t *uinfo)
-{
- return syscall(SYS_rt_tgsigqueueinfo, tgid, tid, sig, uinfo);
-}
-
-static int sys_ptrace(int request, pid_t pid, void *addr, void *data)
-{
- return syscall(SYS_ptrace, request, pid, addr, data);
-}
-
-#define SIGNR 10
-#define TEST_SICODE_PRIV -1
-#define TEST_SICODE_SHARE -2
-
-#define err(fmt, ...) \
- fprintf(stderr, \
- "Error (%s:%d): " fmt, \
- __FILE__, __LINE__, ##__VA_ARGS__)
-
-static int check_error_paths(pid_t child)
-{
- struct ptrace_peeksiginfo_args arg;
- int ret, exit_code = -1;
- void *addr_rw, *addr_ro;
-
- /*
- * Allocate two contiguous pages. The first one is for read-write,
- * another is for read-only.
- */
- addr_rw = mmap(NULL, 2 * PAGE_SIZE, PROT_READ | PROT_WRITE,
- MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
- if (addr_rw == MAP_FAILED) {
- err("mmap() failed: %m\n");
- return 1;
- }
-
- addr_ro = mmap(addr_rw + PAGE_SIZE, PAGE_SIZE, PROT_READ,
- MAP_PRIVATE | MAP_ANONYMOUS | MAP_FIXED, -1, 0);
- if (addr_ro == MAP_FAILED) {
- err("mmap() failed: %m\n");
- goto out;
- }
-
- arg.nr = SIGNR;
- arg.off = 0;
-
- /* Unsupported flags */
- arg.flags = ~0;
- ret = sys_ptrace(PTRACE_PEEKSIGINFO, child, &arg, addr_rw);
- if (ret != -1 || errno != EINVAL) {
- err("sys_ptrace() returns %d (expected -1),"
- " errno %d (expected %d): %m\n",
- ret, errno, EINVAL);
- goto out;
- }
- arg.flags = 0;
-
- /* A part of the buffer is read-only */
- ret = sys_ptrace(PTRACE_PEEKSIGINFO, child, &arg,
- addr_ro - sizeof(siginfo_t) * 2);
- if (ret != 2) {
- err("sys_ptrace() returns %d (expected 2): %m\n", ret);
- goto out;
- }
-
- /* Read-only buffer */
- ret = sys_ptrace(PTRACE_PEEKSIGINFO, child, &arg, addr_ro);
- if (ret != -1 && errno != EFAULT) {
- err("sys_ptrace() returns %d (expected -1),"
- " errno %d (expected %d): %m\n",
- ret, errno, EFAULT);
- goto out;
- }
-
- exit_code = 0;
-out:
- munmap(addr_rw, 2 * PAGE_SIZE);
- return exit_code;
-}
-
-int check_direct_path(pid_t child, int shared, int nr)
-{
- struct ptrace_peeksiginfo_args arg = {.flags = 0, .nr = nr, .off = 0};
- int i, j, ret, exit_code = -1;
- siginfo_t siginfo[SIGNR];
- int si_code;
-
- if (shared == 1) {
- arg.flags = PTRACE_PEEKSIGINFO_SHARED;
- si_code = TEST_SICODE_SHARE;
- } else {
- arg.flags = 0;
- si_code = TEST_SICODE_PRIV;
- }
-
- for (i = 0; i < SIGNR; ) {
- arg.off = i;
- ret = sys_ptrace(PTRACE_PEEKSIGINFO, child, &arg, siginfo);
- if (ret == -1) {
- err("ptrace() failed: %m\n");
- goto out;
- }
-
- if (ret == 0)
- break;
-
- for (j = 0; j < ret; j++, i++) {
- if (siginfo[j].si_code == si_code &&
- siginfo[j].si_int == i)
- continue;
-
- err("%d: Wrong siginfo i=%d si_code=%d si_int=%d\n",
- shared, i, siginfo[j].si_code, siginfo[j].si_int);
- goto out;
- }
- }
-
- if (i != SIGNR) {
- err("Only %d signals were read\n", i);
- goto out;
- }
-
- exit_code = 0;
-out:
- return exit_code;
-}
-
-int main(int argc, char *argv[])
-{
- siginfo_t siginfo[SIGNR];
- int i, exit_code = 1;
- sigset_t blockmask;
- pid_t child;
-
- sigemptyset(&blockmask);
- sigaddset(&blockmask, SIGRTMIN);
- sigprocmask(SIG_BLOCK, &blockmask, NULL);
-
- child = fork();
- if (child == -1) {
- err("fork() failed: %m");
- return 1;
- } else if (child == 0) {
- pid_t ppid = getppid();
- while (1) {
- if (ppid != getppid())
- break;
- sleep(1);
- }
- return 1;
- }
-
- /* Send signals in process-wide and per-thread queues */
- for (i = 0; i < SIGNR; i++) {
- siginfo->si_code = TEST_SICODE_SHARE;
- siginfo->si_int = i;
- sys_rt_sigqueueinfo(child, SIGRTMIN, siginfo);
-
- siginfo->si_code = TEST_SICODE_PRIV;
- siginfo->si_int = i;
- sys_rt_tgsigqueueinfo(child, child, SIGRTMIN, siginfo);
- }
-
- if (sys_ptrace(PTRACE_ATTACH, child, NULL, NULL) == -1)
- return 1;
-
- waitpid(child, NULL, 0);
-
- /* Dump signals one by one*/
- if (check_direct_path(child, 0, 1))
- goto out;
- /* Dump all signals for one call */
- if (check_direct_path(child, 0, SIGNR))
- goto out;
-
- /*
- * Dump signal from the process-wide queue.
- * The number of signals is not multible to the buffer size
- */
- if (check_direct_path(child, 1, 3))
- goto out;
-
- if (check_error_paths(child))
- goto out;
-
- printf("PASS\n");
- exit_code = 0;
-out:
- if (sys_ptrace(PTRACE_KILL, child, NULL, NULL) == -1)
- return 1;
-
- waitpid(child, NULL, 0);
-
- return exit_code;
-}
diff --git a/rcutorture/.gitignore b/rcutorture/.gitignore
deleted file mode 100644
index 05838f6..0000000
--- a/rcutorture/.gitignore
+++ /dev/null
@@ -1,6 +0,0 @@
-initrd
-linux-2.6
-b[0-9]*
-rcu-test-image
-res
-*.swp
diff --git a/rcutorture/bin/config2frag.sh b/rcutorture/bin/config2frag.sh
deleted file mode 100644
index 9f9ffcd..0000000
--- a/rcutorture/bin/config2frag.sh
+++ /dev/null
@@ -1,25 +0,0 @@
-#!/bin/sh
-# Usage: sh config2frag.sh < .config > configfrag
-#
-# Converts the "# CONFIG_XXX is not set" to "CONFIG_XXX=n" so that the
-# resulting file becomes a legitimate Kconfig fragment.
-#
-# 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>
-
-LANG=C sed -e 's/^# CONFIG_\([a-zA-Z0-9_]*\) is not set$/CONFIG_\1=n/'
diff --git a/rcutorture/bin/configNR_CPUS.sh b/rcutorture/bin/configNR_CPUS.sh
deleted file mode 100755
index 43540f1..0000000
--- a/rcutorture/bin/configNR_CPUS.sh
+++ /dev/null
@@ -1,45 +0,0 @@
-#!/bin/bash
-#
-# Extract the number of CPUs expected from the specified Kconfig-file
-# fragment by checking CONFIG_SMP and CONFIG_NR_CPUS. If the specified
-# file gives no clue, base the number on the number of idle CPUs on
-# the system.
-#
-# Usage: configNR_CPUS.sh config-frag
-#
-# 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>
-
-cf=$1
-if test ! -r $cf
-then
- echo Unreadable config fragment $cf 1>&2
- exit -1
-fi
-if grep -q '^CONFIG_SMP=n$' $cf
-then
- echo 1
- exit 0
-fi
-if grep -q '^CONFIG_NR_CPUS=' $cf
-then
- grep '^CONFIG_NR_CPUS=' $cf |
- sed -e 's/^CONFIG_NR_CPUS=\([0-9]*\).*$/\1/'
- exit 0
-fi
-cpus2use.sh
diff --git a/rcutorture/bin/configcheck.sh b/rcutorture/bin/configcheck.sh
deleted file mode 100755
index d686537..0000000
--- a/rcutorture/bin/configcheck.sh
+++ /dev/null
@@ -1,54 +0,0 @@
-#!/bin/sh
-# Usage: sh configcheck.sh .config .config-template
-#
-# 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, 2011
-#
-# Authors: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
-
-T=/tmp/abat-chk-config.sh.$$
-trap 'rm -rf $T' 0
-mkdir $T
-
-cat $1 > $T/.config
-
-cat $2 | sed -e 's/\(.*\)=n/# \1 is not set/' -e 's/^#CHECK#//' |
-awk '
-BEGIN {
- print "if grep -q \"" $0 "\" < '"$T/.config"'";
- print "then";
- print "\t:";
- print "else";
- if ($1 == "#") {
- print "\tif grep -q \"" $2 "\" < '"$T/.config"'";
- print "\tthen";
- print "\t\tif test \"$firsttime\" = \"\""
- print "\t\tthen"
- print "\t\t\tfirsttime=1"
- print "\t\tfi"
- print "\t\techo \":" $2 ": improperly set\"";
- print "\telse";
- print "\t\t:";
- print "\tfi";
- } else {
- print "\tif test \"$firsttime\" = \"\""
- print "\tthen"
- print "\t\tfirsttime=1"
- print "\tfi"
- print "\techo \":" $0 ": improperly set\"";
- }
- print "fi";
- }' | sh
diff --git a/rcutorture/bin/configinit.sh b/rcutorture/bin/configinit.sh
deleted file mode 100755
index 9c3f3d3..0000000
--- a/rcutorture/bin/configinit.sh
+++ /dev/null
@@ -1,74 +0,0 @@
-#!/bin/sh
-#
-# sh configinit.sh config-spec-file [ build output dir ]
-#
-# Create a .config file from the spec file. Run from the kernel source tree.
-# Exits with 0 if all went well, with 1 if all went well but the config
-# did not match, and some other number for other failures.
-#
-# The first argument is the .config specification file, which contains
-# desired settings, for example, "CONFIG_NO_HZ=y". For best results,
-# this should be a full pathname.
-#
-# The second argument is a optional path to a build output directory,
-# for example, "O=/tmp/foo". If this argument is omitted, the .config
-# file will be generated directly in the current directory.
-#
-# 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>
-
-T=/tmp/configinit.sh.$$
-trap 'rm -rf $T' 0
-mkdir $T
-
-# Capture config spec file.
-
-c=$1
-buildloc=$2
-builddir=
-if test -n $buildloc
-then
- if echo $buildloc | grep -q '^O='
- then
- builddir=`echo $buildloc | sed -e 's/^O=//'`
- if test ! -d $builddir
- then
- mkdir $builddir
- fi
- else
- echo Bad build directory: \"$builddir\"
- exit 2
- fi
-fi
-
-sed -e 's/^\(CONFIG[0-9A-Z_]*\)=.*$/grep -v "^# \1" |/' < $c > $T/u.sh
-sed -e 's/^\(CONFIG[0-9A-Z_]*=\).*$/grep -v \1 |/' < $c >> $T/u.sh
-grep '^grep' < $T/u.sh > $T/upd.sh
-echo "cat - $c" >> $T/upd.sh
-make mrproper
-make $buildloc distclean > $builddir/Make.distclean 2>&1
-make $buildloc $TORTURE_DEFCONFIG > $builddir/Make.defconfig.out 2>&1
-mv $builddir/.config $builddir/.config.sav
-sh $T/upd.sh < $builddir/.config.sav > $builddir/.config
-cp $builddir/.config $builddir/.config.new
-yes '' | make $buildloc oldconfig > $builddir/Make.modconfig.out 2>&1
-
-# verify new config matches specification.
-configcheck.sh $builddir/.config $c
-
-exit 0
diff --git a/rcutorture/bin/cpus2use.sh b/rcutorture/bin/cpus2use.sh
deleted file mode 100755
index abe14b7..0000000
--- a/rcutorture/bin/cpus2use.sh
+++ /dev/null
@@ -1,41 +0,0 @@
-#!/bin/bash
-#
-# Get an estimate of how CPU-hoggy to be.
-#
-# Usage: cpus2use.sh
-#
-# 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>
-
-ncpus=`grep '^processor' /proc/cpuinfo | wc -l`
-idlecpus=`mpstat | tail -1 | \
- awk -v ncpus=$ncpus '{ print ncpus * ($7 + $12) / 100 }'`
-awk -v ncpus=$ncpus -v idlecpus=$idlecpus < /dev/null '
-BEGIN {
- cpus2use = idlecpus;
- if (cpus2use < 1)
- cpus2use = 1;
- if (cpus2use < ncpus / 10)
- cpus2use = ncpus / 10;
- if (cpus2use == int(cpus2use))
- cpus2use = int(cpus2use)
- else
- cpus2use = int(cpus2use) + 1
- print cpus2use;
-}'
-
diff --git a/rcutorture/bin/functions.sh b/rcutorture/bin/functions.sh
deleted file mode 100644
index d01b865..0000000
--- a/rcutorture/bin/functions.sh
+++ /dev/null
@@ -1,223 +0,0 @@
-#!/bin/bash
-#
-# 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>
-
-# bootparam_hotplug_cpu bootparam-string
-#
-# Returns 1 if the specified boot-parameter string tells rcutorture to
-# test CPU-hotplug operations.
-bootparam_hotplug_cpu () {
- echo "$1" | grep -q "rcutorture\.onoff_"
-}
-
-# checkarg --argname argtype $# arg mustmatch cannotmatch
-#
-# Checks the specified argument "arg" against the mustmatch and cannotmatch
-# patterns.
-checkarg () {
- if test $3 -le 1
- then
- echo $1 needs argument $2 matching \"$5\"
- usage
- fi
- if echo "$4" | grep -q -e "$5"
- then
- :
- else
- echo $1 $2 \"$4\" must match \"$5\"
- usage
- fi
- if echo "$4" | grep -q -e "$6"
- then
- echo $1 $2 \"$4\" must not match \"$6\"
- usage
- fi
-}
-
-# configfrag_boot_params bootparam-string config-fragment-file
-#
-# Adds boot parameters from the .boot file, if any.
-configfrag_boot_params () {
- if test -r "$2.boot"
- then
- echo $1 `grep -v '^#' "$2.boot" | tr '\012' ' '`
- else
- echo $1
- fi
-}
-
-# configfrag_hotplug_cpu config-fragment-file
-#
-# Returns 1 if the config fragment specifies hotplug CPU.
-configfrag_hotplug_cpu () {
- if test ! -r "$1"
- then
- echo Unreadable config fragment "$1" 1>&2
- exit -1
- fi
- grep -q '^CONFIG_HOTPLUG_CPU=y$' "$1"
-}
-
-# identify_boot_image qemu-cmd
-#
-# Returns the relative path to the kernel build image. This will be
-# arch/<arch>/boot/bzImage unless overridden with the TORTURE_BOOT_IMAGE
-# environment variable.
-identify_boot_image () {
- if test -n "$TORTURE_BOOT_IMAGE"
- then
- echo $TORTURE_BOOT_IMAGE
- else
- case "$1" in
- qemu-system-x86_64|qemu-system-i386)
- echo arch/x86/boot/bzImage
- ;;
- qemu-system-ppc64)
- echo arch/powerpc/boot/bzImage
- ;;
- *)
- echo ""
- ;;
- esac
- fi
-}
-
-# identify_qemu builddir
-#
-# Returns our best guess as to which qemu command is appropriate for
-# the kernel at hand. Override with the TORTURE_QEMU_CMD environment variable.
-identify_qemu () {
- local u="`file "$1"`"
- if test -n "$TORTURE_QEMU_CMD"
- then
- echo $TORTURE_QEMU_CMD
- elif echo $u | grep -q x86-64
- then
- echo qemu-system-x86_64
- elif echo $u | grep -q "Intel 80386"
- then
- echo qemu-system-i386
- elif uname -a | grep -q ppc64
- then
- echo qemu-system-ppc64
- else
- echo Cannot figure out what qemu command to use! 1>&2
- echo file $1 output: $u
- # Usually this will be one of /usr/bin/qemu-system-*
- # Use TORTURE_QEMU_CMD environment variable or appropriate
- # argument to top-level script.
- exit 1
- fi
-}
-
-# identify_qemu_append qemu-cmd
-#
-# Output arguments for the qemu "-append" string based on CPU type
-# and the TORTURE_QEMU_INTERACTIVE environment variable.
-identify_qemu_append () {
- case "$1" in
- qemu-system-x86_64|qemu-system-i386)
- echo noapic selinux=0 initcall_debug debug
- ;;
- esac
- if test -n "$TORTURE_QEMU_INTERACTIVE"
- then
- echo root=/dev/sda
- else
- echo console=ttyS0
- fi
-}
-
-# identify_qemu_args qemu-cmd serial-file
-#
-# Output arguments for qemu arguments based on the TORTURE_QEMU_MAC
-# and TORTURE_QEMU_INTERACTIVE environment variables.
-identify_qemu_args () {
- case "$1" in
- qemu-system-x86_64|qemu-system-i386)
- ;;
- qemu-system-ppc64)
- echo -enable-kvm -M pseries -cpu POWER7 -nodefaults
- echo -device spapr-vscsi
- if test -n "$TORTURE_QEMU_INTERACTIVE" -a -n "$TORTURE_QEMU_MAC"
- then
- echo -device spapr-vlan,netdev=net0,mac=$TORTURE_QEMU_MAC
- echo -netdev bridge,br=br0,id=net0
- elif test -n "$TORTURE_QEMU_INTERACTIVE"
- then
- echo -net nic -net user
- fi
- ;;
- esac
- if test -n "$TORTURE_QEMU_INTERACTIVE"
- then
- echo -monitor stdio -serial pty -S
- else
- echo -serial file:$2
- fi
-}
-
-# identify_qemu_vcpus
-#
-# Returns the number of virtual CPUs available to the aggregate of the
-# guest OSes.
-identify_qemu_vcpus () {
- lscpu | grep '^CPU(s):' | sed -e 's/CPU(s)://'
-}
-
-# print_bug
-#
-# Prints "BUG: " in red followed by remaining arguments
-print_bug () {
- printf '\033[031mBUG: \033[m'
- echo $*
-}
-
-# print_warning
-#
-# Prints "WARNING: " in yellow followed by remaining arguments
-print_warning () {
- printf '\033[033mWARNING: \033[m'
- echo $*
-}
-
-# specify_qemu_cpus qemu-cmd qemu-args #cpus
-#
-# Appends a string containing "-smp XXX" to qemu-args, unless the incoming
-# qemu-args already contains "-smp".
-specify_qemu_cpus () {
- local nt;
-
- if echo $2 | grep -q -e -smp
- then
- echo $2
- else
- case "$1" in
- qemu-system-x86_64|qemu-system-i386)
- echo $2 -smp $3
- ;;
- qemu-system-ppc64)
- nt="`lscpu | grep '^NUMA node0' | sed -e 's/^[^,]*,\([0-9]*\),.*$/\1/'`"
- echo $2 -smp cores=`expr \( $3 + $nt - 1 \) / $nt`,threads=$nt
- ;;
- esac
- fi
-}
diff --git a/rcutorture/bin/kvm-build.sh b/rcutorture/bin/kvm-build.sh
deleted file mode 100755
index 7c1e56b..0000000
--- a/rcutorture/bin/kvm-build.sh
+++ /dev/null
@@ -1,71 +0,0 @@
-#!/bin/bash
-#
-# Build a kvm-ready Linux kernel from the tree in the current directory.
-#
-# Usage: sh kvm-build.sh config-template build-dir more-configs
-#
-# 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, 2011
-#
-# Authors: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
-
-config_template=${1}
-if test -z "$config_template" -o ! -f "$config_template" -o ! -r "$config_template"
-then
- echo "kvm-build.sh :$config_template: Not a readable file"
- exit 1
-fi
-builddir=${2}
-if test -z "$builddir" -o ! -d "$builddir" -o ! -w "$builddir"
-then
- echo "kvm-build.sh :$builddir: Not a writable directory, cannot build into it"
- exit 1
-fi
-moreconfigs=${3}
-if test -z "$moreconfigs" -o ! -r "$moreconfigs"
-then
- echo "kvm-build.sh :$moreconfigs: Not a readable file"
- exit 1
-fi
-
-T=/tmp/test-linux.sh.$$
-trap 'rm -rf $T' 0
-mkdir $T
-
-grep -v 'CONFIG_[A-Z]*_TORTURE_TEST' < ${config_template} > $T/config
-cat << ___EOF___ >> $T/config
-CONFIG_INITRAMFS_SOURCE="$TORTURE_INITRD"
-CONFIG_VIRTIO_PCI=y
-CONFIG_VIRTIO_CONSOLE=y
-___EOF___
-cat $moreconfigs >> $T/config
-
-configinit.sh $T/config O=$builddir
-retval=$?
-if test $retval -gt 1
-then
- exit 2
-fi
-ncpus=`cpus2use.sh`
-make O=$builddir -j$ncpus $TORTURE_KMAKE_ARG > $builddir/Make.out 2>&1
-retval=$?
-if test $retval -ne 0 || grep "rcu[^/]*": < $builddir/Make.out | egrep -q "Stop|Error|error:|warning:" || egrep -q "Stop|Error|error:" < $builddir/Make.out
-then
- echo Kernel build error
- egrep "Stop|Error|error:|warning:" < $builddir/Make.out
- echo Run aborted.
- exit 3
-fi
diff --git a/rcutorture/bin/kvm-recheck-lock.sh b/rcutorture/bin/kvm-recheck-lock.sh
deleted file mode 100755
index 7f1ff1a..0000000
--- a/rcutorture/bin/kvm-recheck-lock.sh
+++ /dev/null
@@ -1,51 +0,0 @@
-#!/bin/bash
-#
-# Analyze a given results directory for locktorture progress.
-#
-# Usage: sh kvm-recheck-lock.sh resdir
-#
-# 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, 2014
-#
-# Authors: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
-
-i="$1"
-if test -d $i
-then
- :
-else
- echo Unreadable results directory: $i
- exit 1
-fi
-
-configfile=`echo $i | sed -e 's/^.*\///'`
-ncs=`grep "Writes: Total:" $i/console.log 2> /dev/null | tail -1 | sed -e 's/^.* Total: //' -e 's/ .*$//'`
-if test -z "$ncs"
-then
- echo "$configfile -------"
-else
- title="$configfile ------- $ncs acquisitions/releases"
- dur=`sed -e 's/^.* locktorture.shutdown_secs=//' -e 's/ .*$//' < $i/qemu-cmd 2> /dev/null`
- if test -z "$dur"
- then
- :
- else
- ncsps=`awk -v ncs=$ncs -v dur=$dur '
- BEGIN { print ncs / dur }' < /dev/null`
- title="$title ($ncsps per second)"
- fi
- echo $title
-fi
diff --git a/rcutorture/bin/kvm-recheck-rcu.sh b/rcutorture/bin/kvm-recheck-rcu.sh
deleted file mode 100755
index 307c4b9..0000000
--- a/rcutorture/bin/kvm-recheck-rcu.sh
+++ /dev/null
@@ -1,51 +0,0 @@
-#!/bin/bash
-#
-# Analyze a given results directory for rcutorture progress.
-#
-# Usage: sh kvm-recheck-rcu.sh resdir
-#
-# 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, 2014
-#
-# Authors: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
-
-i="$1"
-if test -d $i
-then
- :
-else
- echo Unreadable results directory: $i
- exit 1
-fi
-
-configfile=`echo $i | sed -e 's/^.*\///'`
-ngps=`grep ver: $i/console.log 2> /dev/null | tail -1 | sed -e 's/^.* ver: //' -e 's/ .*$//'`
-if test -z "$ngps"
-then
- echo "$configfile -------"
-else
- title="$configfile ------- $ngps grace periods"
- dur=`sed -e 's/^.* rcutorture.shutdown_secs=//' -e 's/ .*$//' < $i/qemu-cmd 2> /dev/null`
- if test -z "$dur"
- then
- :
- else
- ngpsps=`awk -v ngps=$ngps -v dur=$dur '
- BEGIN { print ngps / dur }' < /dev/null`
- title="$title ($ngpsps per second)"
- fi
- echo $title
-fi
diff --git a/rcutorture/bin/kvm-recheck.sh b/rcutorture/bin/kvm-recheck.sh
deleted file mode 100755
index ee1f6ca..0000000
--- a/rcutorture/bin/kvm-recheck.sh
+++ /dev/null
@@ -1,63 +0,0 @@
-#!/bin/bash
-#
-# Given the results directories for previous KVM-based torture runs,
-# check the build and console output for errors. Given a directory
-# containing results directories, this recursively checks them all.
-#
-# Usage: sh kvm-recheck.sh resdir ...
-#
-# 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, 2011
-#
-# Authors: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
-
-PATH=`pwd`/tools/testing/selftests/rcutorture/bin:$PATH; export PATH
-. tools/testing/selftests/rcutorture/bin/functions.sh
-for rd in "$@"
-do
- firsttime=1
- dirs=`find $rd -name Make.defconfig.out -print | sort | sed -e 's,/[^/]*$,,' | sort -u`
- for i in $dirs
- do
- if test -n "$firsttime"
- then
- firsttime=""
- resdir=`echo $i | sed -e 's,/$,,' -e 's,/[^/]*$,,'`
- head -1 $resdir/log
- fi
- TORTURE_SUITE="`cat $i/../TORTURE_SUITE`"
- kvm-recheck-${TORTURE_SUITE}.sh $i
- if test -f "$i/console.log"
- then
- configcheck.sh $i/.config $i/ConfigFragment
- parse-build.sh $i/Make.out $configfile
- parse-torture.sh $i/console.log $configfile
- parse-console.sh $i/console.log $configfile
- if test -r $i/Warnings
- then
- cat $i/Warnings
- fi
- else
- if test -f "$i/qemu-cmd"
- then
- print_bug qemu failed
- else
- print_bug Build failed
- fi
- echo " $i"
- fi
- done
-done
diff --git a/rcutorture/bin/kvm-test-1-run.sh b/rcutorture/bin/kvm-test-1-run.sh
deleted file mode 100755
index 27e544e..0000000
--- a/rcutorture/bin/kvm-test-1-run.sh
+++ /dev/null
@@ -1,222 +0,0 @@
-#!/bin/bash
-#
-# Run a kvm-based test of the specified tree on the specified configs.
-# Fully automated run and error checking, no graphics console.
-#
-# Execute this in the source tree. Do not run it as a background task
-# because qemu does not seem to like that much.
-#
-# Usage: sh kvm-test-1-run.sh config builddir resdir minutes qemu-args boot_args
-#
-# qemu-args defaults to "-nographic", along with arguments specifying the
-# number of CPUs and other options generated from
-# the underlying CPU architecture.
-# boot_args defaults to value returned by the per_version_boot_params
-# shell function.
-#
-# Anything you specify for either qemu-args or boot_args is appended to
-# the default values. The "-smp" value is deduced from the contents of
-# the config fragment.
-#
-# More sophisticated argument parsing is clearly needed.
-#
-# 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, 2011
-#
-# Authors: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
-
-grace=120
-
-T=/tmp/kvm-test-1-run.sh.$$
-trap 'rm -rf $T' 0
-
-. $KVM/bin/functions.sh
-. $KVPATH/ver_functions.sh
-
-config_template=${1}
-config_dir=`echo $config_template | sed -e 's,/[^/]*$,,'`
-title=`echo $config_template | sed -e 's/^.*\///'`
-builddir=${2}
-if test -z "$builddir" -o ! -d "$builddir" -o ! -w "$builddir"
-then
- echo "kvm-test-1-run.sh :$builddir: Not a writable directory, cannot build into it"
- exit 1
-fi
-resdir=${3}
-if test -z "$resdir" -o ! -d "$resdir" -o ! -w "$resdir"
-then
- echo "kvm-test-1-run.sh :$resdir: Not a writable directory, cannot store results into it"
- exit 1
-fi
-cp $config_template $resdir/ConfigFragment
-echo ' ---' `date`: Starting build
-echo ' ---' Kconfig fragment at: $config_template >> $resdir/log
-if test -r "$config_dir/CFcommon"
-then
- cat < $config_dir/CFcommon >> $T
-fi
-# Optimizations below this point
-# CONFIG_USB=n
-# CONFIG_SECURITY=n
-# CONFIG_NFS_FS=n
-# CONFIG_SOUND=n
-# CONFIG_INPUT_JOYSTICK=n
-# CONFIG_INPUT_TABLET=n
-# CONFIG_INPUT_TOUCHSCREEN=n
-# CONFIG_INPUT_MISC=n
-# CONFIG_INPUT_MOUSE=n
-# # CONFIG_NET=n # disables console access, so accept the slower build.
-# CONFIG_SCSI=n
-# CONFIG_ATA=n
-# CONFIG_FAT_FS=n
-# CONFIG_MSDOS_FS=n
-# CONFIG_VFAT_FS=n
-# CONFIG_ISO9660_FS=n
-# CONFIG_QUOTA=n
-# CONFIG_HID=n
-# CONFIG_CRYPTO=n
-# CONFIG_PCCARD=n
-# CONFIG_PCMCIA=n
-# CONFIG_CARDBUS=n
-# CONFIG_YENTA=n
-if kvm-build.sh $config_template $builddir $T
-then
- QEMU="`identify_qemu $builddir/vmlinux`"
- BOOT_IMAGE="`identify_boot_image $QEMU`"
- cp $builddir/Make*.out $resdir
- cp $builddir/.config $resdir
- if test -n "$BOOT_IMAGE"
- then
- cp $builddir/$BOOT_IMAGE $resdir
- else
- echo No identifiable boot image, not running KVM, see $resdir.
- echo Do the torture scripts know about your architecture?
- fi
- parse-build.sh $resdir/Make.out $title
- if test -f $builddir.wait
- then
- mv $builddir.wait $builddir.ready
- fi
-else
- cp $builddir/Make*.out $resdir
- cp $builddir/.config $resdir || :
- echo Build failed, not running KVM, see $resdir.
- if test -f $builddir.wait
- then
- mv $builddir.wait $builddir.ready
- fi
- exit 1
-fi
-while test -f $builddir.ready
-do
- sleep 1
-done
-minutes=$4
-seconds=$(($minutes * 60))
-qemu_args=$5
-boot_args=$6
-
-cd $KVM
-kstarttime=`awk 'BEGIN { print systime() }' < /dev/null`
-echo ' ---' `date`: Starting kernel
-
-# Generate -smp qemu argument.
-qemu_args="-nographic $qemu_args"
-cpu_count=`configNR_CPUS.sh $config_template`
-vcpus=`identify_qemu_vcpus`
-if test $cpu_count -gt $vcpus
-then
- echo CPU count limited from $cpu_count to $vcpus
- touch $resdir/Warnings
- echo CPU count limited from $cpu_count to $vcpus >> $resdir/Warnings
- cpu_count=$vcpus
-fi
-qemu_args="`specify_qemu_cpus "$QEMU" "$qemu_args" "$cpu_count"`"
-
-# Generate architecture-specific and interaction-specific qemu arguments
-qemu_args="$qemu_args `identify_qemu_args "$QEMU" "$builddir/console.log"`"
-
-# Generate qemu -append arguments
-qemu_append="`identify_qemu_append "$QEMU"`"
-
-# Pull in Kconfig-fragment boot parameters
-boot_args="`configfrag_boot_params "$boot_args" "$config_template"`"
-# Generate kernel-version-specific boot parameters
-boot_args="`per_version_boot_params "$boot_args" $builddir/.config $seconds`"
-
-echo $QEMU $qemu_args -m 512 -kernel $builddir/$BOOT_IMAGE -append \"$qemu_append $boot_args\" > $resdir/qemu-cmd
-if test -n "$TORTURE_BUILDONLY"
-then
- echo Build-only run specified, boot/test omitted.
- exit 0
-fi
-( $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
-while :
-do
- kruntime=`awk 'BEGIN { print systime() - '"$kstarttime"' }' < /dev/null`
- if kill -0 $qemu_pid > /dev/null 2>&1
- then
- if test $kruntime -ge $seconds
- then
- break;
- fi
- sleep 1
- else
- commandcompleted=1
- if test $kruntime -lt $seconds
- then
- echo Completed in $kruntime vs. $seconds >> $resdir/Warnings 2>&1
- grep "^(qemu) qemu:" $resdir/kvm-test-1-run.sh.out >> $resdir/Warnings 2>&1
- killpid="`sed -n "s/^(qemu) qemu: terminating on signal [0-9]* from pid \([0-9]*\).*$/\1/p" $resdir/Warnings`"
- if test -n "$killpid"
- then
- echo "ps -fp $killpid" >> $resdir/Warnings 2>&1
- ps -fp $killpid >> $resdir/Warnings 2>&1
- fi
- else
- echo ' ---' `date`: Kernel done
- fi
- break
- fi
-done
-if test $commandcompleted -eq 0
-then
- echo Grace period for qemu job at pid $qemu_pid
- while :
- do
- kruntime=`awk 'BEGIN { print systime() - '"$kstarttime"' }' < /dev/null`
- if kill -0 $qemu_pid > /dev/null 2>&1
- then
- :
- else
- break
- fi
- if test $kruntime -ge $((seconds + grace))
- then
- echo "!!! Hang at $kruntime vs. $seconds seconds" >> $resdir/Warnings 2>&1
- kill -KILL $qemu_pid
- break
- fi
- sleep 1
- done
-fi
-
-cp $builddir/console.log $resdir
-parse-torture.sh $resdir/console.log $title
-parse-console.sh $resdir/console.log $title
diff --git a/rcutorture/bin/kvm.sh b/rcutorture/bin/kvm.sh
deleted file mode 100644
index 40285c5..0000000
--- a/rcutorture/bin/kvm.sh
+++ /dev/null
@@ -1,410 +0,0 @@
-#!/bin/bash
-#
-# Run a series of 14 tests under KVM. These are not particularly
-# well-selected or well-tuned, but are the current set. Run from the
-# top level of the source tree.
-#
-# Edit the definitions below to set the locations of the various directories,
-# as well as the test duration.
-#
-# Usage: sh kvm.sh [ options ]
-#
-# 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, 2011
-#
-# Authors: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
-
-scriptname=$0
-args="$*"
-
-T=/tmp/kvm.sh.$$
-trap 'rm -rf $T' 0
-mkdir $T
-
-dur=30
-dryrun=""
-KVM="`pwd`/tools/testing/selftests/rcutorture"; export KVM
-PATH=${KVM}/bin:$PATH; export PATH
-TORTURE_DEFCONFIG=defconfig
-TORTURE_BOOT_IMAGE=""
-TORTURE_INITRD="$KVM/initrd"; export TORTURE_INITRD
-TORTURE_KMAKE_ARG=""
-TORTURE_SUITE=rcu
-resdir=""
-configs=""
-cpus=0
-ds=`date +%Y.%m.%d-%H:%M:%S`
-kversion=""
-
-. functions.sh
-
-usage () {
- echo "Usage: $scriptname optional arguments:"
- echo " --bootargs kernel-boot-arguments"
- echo " --bootimage relative-path-to-kernel-boot-image"
- echo " --buildonly"
- echo " --configs \"config-file list\""
- echo " --cpus N"
- echo " --datestamp string"
- echo " --defconfig string"
- echo " --dryrun sched|script"
- 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-..."
- echo " --qemu-cmd qemu-system-..."
- echo " --results absolute-pathname"
- echo " --torture rcu"
- exit 1
-}
-
-while test $# -gt 0
-do
- case "$1" in
- --bootargs)
- checkarg --bootargs "(list of kernel boot arguments)" "$#" "$2" '.*' '^--'
- TORTURE_BOOTARGS="$2"
- shift
- ;;
- --bootimage)
- checkarg --bootimage "(relative path to kernel boot image)" "$#" "$2" '[a-zA-Z0-9][a-zA-Z0-9_]*' '^--'
- TORTURE_BOOT_IMAGE="$2"
- shift
- ;;
- --buildonly)
- TORTURE_BUILDONLY=1
- ;;
- --configs)
- checkarg --configs "(list of config files)" "$#" "$2" '^[^/]*$' '^--'
- configs="$2"
- shift
- ;;
- --cpus)
- checkarg --cpus "(number)" "$#" "$2" '^[0-9]*$' '^--'
- cpus=$2
- shift
- ;;
- --datestamp)
- checkarg --datestamp "(relative pathname)" "$#" "$2" '^[^/]*$' '^--'
- ds=$2
- shift
- ;;
- --defconfig)
- checkarg --defconfig "defconfigtype" "$#" "$2" '^[^/][^/]*$' '^--'
- TORTURE_DEFCONFIG=$2
- shift
- ;;
- --dryrun)
- checkarg --dryrun "sched|script" $# "$2" 'sched\|script' '^--'
- dryrun=$2
- shift
- ;;
- --duration)
- checkarg --duration "(minutes)" $# "$2" '^[0-9]*$' '^error'
- dur=$2
- shift
- ;;
- --interactive)
- TORTURE_QEMU_INTERACTIVE=1; export TORTURE_QEMU_INTERACTIVE
- ;;
- --kmake-arg)
- checkarg --kmake-arg "(kernel make arguments)" $# "$2" '.*' '^error$'
- 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
- shift
- ;;
- --no-initrd)
- TORTURE_INITRD=""; export TORTURE_INITRD
- ;;
- --qemu-args)
- checkarg --qemu-args "-qemu args" $# "$2" '^-' '^error'
- TORTURE_QEMU_ARG="$2"
- shift
- ;;
- --qemu-cmd)
- checkarg --qemu-cmd "(qemu-system-...)" $# "$2" 'qemu-system-' '^--'
- TORTURE_QEMU_CMD="$2"
- shift
- ;;
- --results)
- checkarg --results "(absolute pathname)" "$#" "$2" '^/' '^error'
- resdir=$2
- shift
- ;;
- --torture)
- checkarg --torture "(suite name)" "$#" "$2" '^\(lock\|rcu\)$' '^--'
- TORTURE_SUITE=$2
- shift
- ;;
- *)
- echo Unknown argument $1
- usage
- ;;
- esac
- shift
-done
-
-CONFIGFRAG=${KVM}/configs/${TORTURE_SUITE}; export CONFIGFRAG
-KVPATH=${CONFIGFRAG}/$kversion; export KVPATH
-
-if test -z "$configs"
-then
- configs="`cat $CONFIGFRAG/$kversion/CFLIST`"
-fi
-
-if test -z "$resdir"
-then
- resdir=$KVM/res
-fi
-
-# Create a file of test-name/#cpus pairs, sorted by decreasing #cpus.
-touch $T/cfgcpu
-for CF in $configs
-do
- if test -f "$CONFIGFRAG/$kversion/$CF"
- then
- echo $CF `configNR_CPUS.sh $CONFIGFRAG/$kversion/$CF` >> $T/cfgcpu
- else
- echo "The --configs file $CF does not exist, terminating."
- exit 1
- fi
-done
-sort -k2nr $T/cfgcpu > $T/cfgcpu.sort
-
-# Use a greedy bin-packing algorithm, sorting the list accordingly.
-awk < $T/cfgcpu.sort > $T/cfgcpu.pack -v ncpus=$cpus '
-BEGIN {
- njobs = 0;
-}
-
-{
- # Read file of tests and corresponding required numbers of CPUs.
- cf[njobs] = $1;
- cpus[njobs] = $2;
- njobs++;
-}
-
-END {
- alldone = 0;
- batch = 0;
- nc = -1;
-
- # Each pass through the following loop creates on test batch
- # that can be executed concurrently given ncpus. Note that a
- # given test that requires more than the available CPUs will run in
- # their own batch. Such tests just have to make do with what
- # is available.
- while (nc != ncpus) {
- batch++;
- nc = ncpus;
-
- # Each pass through the following loop considers one
- # test for inclusion in the current batch.
- for (i = 0; i < njobs; i++) {
- if (done[i])
- continue; # Already part of a batch.
- if (nc >= cpus[i] || nc == ncpus) {
-
- # This test fits into the current batch.
- done[i] = batch;
- nc -= cpus[i];
- if (nc <= 0)
- break; # Too-big test in its own batch.
- }
- }
- }
-
- # Dump out the tests in batch order.
- for (b = 1; b <= batch; b++)
- for (i = 0; i < njobs; i++)
- if (done[i] == b)
- print cf[i], cpus[i];
-}'
-
-# Generate a script to execute the tests in appropriate batches.
-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
-TORTURE_DEFCONFIG="$TORTURE_DEFCONFIG"; export TORTURE_DEFCONFIG
-TORTURE_INITRD="$TORTURE_INITRD"; export TORTURE_INITRD
-TORTURE_KMAKE_ARG="$TORTURE_KMAKE_ARG"; export TORTURE_KMAKE_ARG
-TORTURE_QEMU_CMD="$TORTURE_QEMU_CMD"; export TORTURE_QEMU_CMD
-TORTURE_QEMU_INTERACTIVE="$TORTURE_QEMU_INTERACTIVE"; export TORTURE_QEMU_INTERACTIVE
-TORTURE_QEMU_MAC="$TORTURE_QEMU_MAC"; export TORTURE_QEMU_MAC
-TORTURE_SUITE="$TORTURE_SUITE"; export TORTURE_SUITE
-if ! test -e $resdir
-then
- mkdir -p "$resdir" || :
-fi
-mkdir $resdir/$ds
-echo Results directory: $resdir/$ds
-echo $scriptname $args
-touch $resdir/$ds/log
-echo $scriptname $args >> $resdir/$ds/log
-echo ${TORTURE_SUITE} > $resdir/$ds/TORTURE_SUITE
-pwd > $resdir/$ds/testid.txt
-if test -d .git
-then
- git status >> $resdir/$ds/testid.txt
- git rev-parse HEAD >> $resdir/$ds/testid.txt
- if ! git diff HEAD > $T/git-diff 2>&1
- then
- cp $T/git-diff $resdir/$ds
- fi
-fi
-___EOF___
-awk < $T/cfgcpu.pack \
- -v CONFIGDIR="$CONFIGFRAG/$kversion/" \
- -v KVM="$KVM" \
- -v ncpus=$cpus \
- -v rd=$resdir/$ds/ \
- -v dur=$dur \
- -v TORTURE_QEMU_ARG="$TORTURE_QEMU_ARG" \
- -v TORTURE_BOOTARGS="$TORTURE_BOOTARGS" \
-'BEGIN {
- i = 0;
-}
-
-{
- cf[i] = $1;
- cpus[i] = $2;
- i++;
-}
-
-# Dump out the scripting required to run one test batch.
-function dump(first, pastlast)
-{
- print "echo ----Start batch: `date`";
- print "echo ----Start batch: `date` >> " rd "/log";
- jn=1
- for (j = first; j < pastlast; j++) {
- builddir=KVM "/b" jn
- cpusr[jn] = cpus[j];
- if (cfrep[cf[j]] == "") {
- cfr[jn] = cf[j];
- cfrep[cf[j]] = 1;
- } else {
- cfrep[cf[j]]++;
- cfr[jn] = cf[j] "." cfrep[cf[j]];
- }
- if (cpusr[jn] > ncpus && ncpus != 0)
- ovf = "(!)";
- else
- ovf = "";
- print "echo ", cfr[jn], cpusr[jn] ovf ": Starting build. `date`";
- print "echo ", cfr[jn], cpusr[jn] ovf ": Starting build. `date` >> " rd "/log";
- print "rm -f " builddir ".*";
- print "touch " builddir ".wait";
- print "mkdir " builddir " > /dev/null 2>&1 || :";
- print "mkdir " rd cfr[jn] " || :";
- print "kvm-test-1-run.sh " CONFIGDIR cf[j], builddir, rd cfr[jn], dur " \"" TORTURE_QEMU_ARG "\" \"" TORTURE_BOOTARGS "\" > " rd cfr[jn] "/kvm-test-1-run.sh.out 2>&1 &"
- print "echo ", cfr[jn], cpusr[jn] ovf ": Waiting for build to complete. `date`";
- print "echo ", cfr[jn], cpusr[jn] ovf ": Waiting for build to complete. `date` >> " rd "/log";
- print "while test -f " builddir ".wait"
- print "do"
- print "\tsleep 1"
- print "done"
- print "echo ", cfr[jn], cpusr[jn] ovf ": Build complete. `date`";
- print "echo ", cfr[jn], cpusr[jn] ovf ": Build complete. `date` >> " rd "/log";
- jn++;
- }
- for (j = 1; j < jn; j++) {
- builddir=KVM "/b" j
- print "rm -f " builddir ".ready"
- print "echo ----", cfr[j], cpusr[j] ovf ": Starting kernel. `date`";
- print "echo ----", cfr[j], cpusr[j] ovf ": Starting kernel. `date` >> " rd "/log";
- }
- print "wait"
- print "echo ---- All kernel runs complete. `date`";
- print "echo ---- All kernel runs complete. `date` >> " rd "/log";
- for (j = 1; j < jn; j++) {
- builddir=KVM "/b" j
- print "echo ----", cfr[j], cpusr[j] ovf ": Build/run results:";
- print "echo ----", cfr[j], cpusr[j] ovf ": Build/run results: >> " rd "/log";
- print "cat " rd cfr[j] "/kvm-test-1-run.sh.out";
- print "cat " rd cfr[j] "/kvm-test-1-run.sh.out >> " rd "/log";
- }
-}
-
-END {
- njobs = i;
- nc = ncpus;
- first = 0;
-
- # Each pass through the following loop considers one test.
- for (i = 0; i < njobs; i++) {
- if (ncpus == 0) {
- # Sequential test specified, each test its own batch.
- dump(i, i + 1);
- first = i;
- } else if (nc < cpus[i] && i != 0) {
- # Out of CPUs, dump out a batch.
- dump(first, i);
- first = i;
- nc = ncpus;
- }
- # Account for the CPUs needed by the current test.
- nc -= cpus[i];
- }
- # Dump the last batch.
- if (ncpus != 0)
- dump(first, i);
-}' >> $T/script
-
-cat << ___EOF___ >> $T/script
-echo
-echo
-echo " --- `date` Test summary:"
-echo Results directory: $resdir/$ds
-if test -z "$TORTURE_BUILDONLY"
-then
- kvm-recheck.sh $resdir/$ds
-fi
-___EOF___
-
-if test "$dryrun" = script
-then
- cat $T/script
- exit 0
-elif test "$dryrun" = sched
-then
- # Extract the test run schedule from the script.
- egrep 'Start batch|Starting build\.' $T/script |
- grep -v ">>" |
- sed -e 's/:.*$//' -e 's/^echo //'
- exit 0
-else
- # Not a dryru, so run the script.
- sh $T/script
-fi
-
-# Tracing: trace_event=rcu:rcu_grace_period,rcu:rcu_future_grace_period,rcu:rcu_grace_period_init,rcu:rcu_nocb_wake,rcu:rcu_preempt_task,rcu:rcu_unlock_preempted_task,rcu:rcu_quiescent_state_report,rcu:rcu_fqs,rcu:rcu_callback,rcu:rcu_kfree_callback,rcu:rcu_batch_start,rcu:rcu_invoke_callback,rcu:rcu_invoke_kfree_callback,rcu:rcu_batch_end,rcu:rcu_torture_read,rcu:rcu_barrier
diff --git a/rcutorture/bin/parse-build.sh b/rcutorture/bin/parse-build.sh
deleted file mode 100755
index 5432309..0000000
--- a/rcutorture/bin/parse-build.sh
+++ /dev/null
@@ -1,57 +0,0 @@
-#!/bin/sh
-#
-# Check the build output from an rcutorture run for goodness.
-# The "file" is a pathname on the local system, and "title" is
-# a text string for error-message purposes.
-#
-# The file must contain kernel build output.
-#
-# Usage:
-# sh parse-build.sh file title
-#
-# 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, 2011
-#
-# Authors: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
-
-T=$1
-title=$2
-
-. functions.sh
-
-if grep -q CC < $T
-then
- :
-else
- print_bug $title no build
- exit 1
-fi
-
-if grep -q "error:" < $T
-then
- print_bug $title build errors:
- grep "error:" < $T
- exit 2
-fi
-exit 0
-
-if egrep -q "rcu[^/]*\.c.*warning:|rcu.*\.h.*warning:" < $T
-then
- print_warning $title build errors:
- egrep "rcu[^/]*\.c.*warning:|rcu.*\.h.*warning:" < $T
- exit 2
-fi
-exit 0
diff --git a/rcutorture/bin/parse-console.sh b/rcutorture/bin/parse-console.sh
deleted file mode 100755
index 4185d4c..0000000
--- a/rcutorture/bin/parse-console.sh
+++ /dev/null
@@ -1,41 +0,0 @@
-#!/bin/sh
-#
-# Check the console output from an rcutorture run for oopses.
-# The "file" is a pathname on the local system, and "title" is
-# a text string for error-message purposes.
-#
-# Usage:
-# sh parse-console.sh file title
-#
-# 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, 2011
-#
-# Authors: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
-
-T=/tmp/abat-chk-badness.sh.$$
-trap 'rm -f $T' 0
-
-file="$1"
-title="$2"
-
-. functions.sh
-
-egrep 'Badness|WARNING:|Warn|BUG|===========|Call Trace:|Oops:' < $file | grep -v 'ODEBUG: ' | grep -v 'Warning: unable to open an initial console' > $T
-if test -s $T
-then
- print_warning Assertion failure in $file $title
- cat $T
-fi
diff --git a/rcutorture/bin/parse-torture.sh b/rcutorture/bin/parse-torture.sh
deleted file mode 100755
index 3455560..0000000
--- a/rcutorture/bin/parse-torture.sh
+++ /dev/null
@@ -1,106 +0,0 @@
-#!/bin/sh
-#
-# Check the console output from a torture run for goodness.
-# The "file" is a pathname on the local system, and "title" is
-# a text string for error-message purposes.
-#
-# The file must contain torture output, but can be interspersed
-# with other dmesg text, as in console-log output.
-#
-# Usage:
-# sh parse-torture.sh file title
-#
-# 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, 2011
-#
-# Authors: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
-
-T=/tmp/parse-torture.sh.$$
-file="$1"
-title="$2"
-
-trap 'rm -f $T.seq' 0
-
-. functions.sh
-
-# check for presence of torture output file.
-
-if test -f "$file" -a -r "$file"
-then
- :
-else
- echo $title unreadable torture output file: $file
- exit 1
-fi
-
-# check for abject failure
-
-if grep -q FAILURE $file || grep -q -e '-torture.*!!!' $file
-then
- nerrs=`grep --binary-files=text '!!!' $file | tail -1 | awk '{for (i=NF-8;i<=NF;i++) sum+=$i; } END {print sum}'`
- print_bug $title FAILURE, $nerrs instances
- echo " " $url
- exit
-fi
-
-grep --binary-files=text 'torture:.*ver:' $file | grep --binary-files=text -v '(null)' | sed -e 's/^(initramfs)[^]]*] //' -e 's/^\[[^]]*] //' |
-awk '
-BEGIN {
- ver = 0;
- badseq = 0;
- }
-
- {
- if (!badseq && ($5 + 0 != $5 || $5 <= ver)) {
- badseqno1 = ver;
- badseqno2 = $5;
- badseqnr = NR;
- badseq = 1;
- }
- ver = $5
- }
-
-END {
- if (badseq) {
- if (badseqno1 == badseqno2 && badseqno2 == ver)
- print "GP HANG at " ver " torture stat " badseqnr;
- else
- print "BAD SEQ " badseqno1 ":" badseqno2 " last:" ver " version " badseqnr;
- }
- }' > $T.seq
-
-if grep -q SUCCESS $file
-then
- if test -s $T.seq
- then
- print_warning $title $title `cat $T.seq`
- echo " " $file
- exit 2
- fi
-else
- if grep -q "_HOTPLUG:" $file
- then
- print_warning HOTPLUG FAILURES $title `cat $T.seq`
- echo " " $file
- exit 3
- fi
- echo $title no success message, `grep --binary-files=text 'ver:' $file | wc -l` successful version messages
- if test -s $T.seq
- then
- print_warning $title `cat $T.seq`
- fi
- exit 2
-fi
diff --git a/rcutorture/configs/lock/BUSTED b/rcutorture/configs/lock/BUSTED
deleted file mode 100644
index 1d1da14..0000000
--- a/rcutorture/configs/lock/BUSTED
+++ /dev/null
@@ -1,6 +0,0 @@
-CONFIG_SMP=y
-CONFIG_NR_CPUS=4
-CONFIG_HOTPLUG_CPU=y
-CONFIG_PREEMPT_NONE=n
-CONFIG_PREEMPT_VOLUNTARY=n
-CONFIG_PREEMPT=y
diff --git a/rcutorture/configs/lock/BUSTED.boot b/rcutorture/configs/lock/BUSTED.boot
deleted file mode 100644
index 6386c15..0000000
--- a/rcutorture/configs/lock/BUSTED.boot
+++ /dev/null
@@ -1 +0,0 @@
-locktorture.torture_type=lock_busted
diff --git a/rcutorture/configs/lock/CFLIST b/rcutorture/configs/lock/CFLIST
deleted file mode 100644
index a061b22..0000000
--- a/rcutorture/configs/lock/CFLIST
+++ /dev/null
@@ -1 +0,0 @@
-LOCK01
diff --git a/rcutorture/configs/lock/CFcommon b/rcutorture/configs/lock/CFcommon
deleted file mode 100644
index e372dc2..0000000
--- a/rcutorture/configs/lock/CFcommon
+++ /dev/null
@@ -1,2 +0,0 @@
-CONFIG_LOCK_TORTURE_TEST=y
-CONFIG_PRINTK_TIME=y
diff --git a/rcutorture/configs/lock/LOCK01 b/rcutorture/configs/lock/LOCK01
deleted file mode 100644
index a9625e3..0000000
--- a/rcutorture/configs/lock/LOCK01
+++ /dev/null
@@ -1,6 +0,0 @@
-CONFIG_SMP=y
-CONFIG_NR_CPUS=8
-CONFIG_HOTPLUG_CPU=y
-CONFIG_PREEMPT_NONE=n
-CONFIG_PREEMPT_VOLUNTARY=n
-CONFIG_PREEMPT=y
diff --git a/rcutorture/configs/lock/ver_functions.sh b/rcutorture/configs/lock/ver_functions.sh
deleted file mode 100644
index 9746ea1..0000000
--- a/rcutorture/configs/lock/ver_functions.sh
+++ /dev/null
@@ -1,43 +0,0 @@
-#!/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, 2014
-#
-# Authors: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
-
-# locktorture_param_onoff bootparam-string config-file
-#
-# Adds onoff locktorture module parameters to kernels having it.
-locktorture_param_onoff () {
- if ! bootparam_hotplug_cpu "$1" && configfrag_hotplug_cpu "$2"
- then
- echo CPU-hotplug kernel, adding locktorture onoff. 1>&2
- echo locktorture.onoff_interval=3 locktorture.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 `locktorture_param_onoff "$1" "$2"` \
- locktorture.stat_interval=15 \
- locktorture.shutdown_secs=$3 \
- locktorture.locktorture_runnable=1 \
- locktorture.verbose=1
-}
diff --git a/rcutorture/configs/rcu/BUSTED b/rcutorture/configs/rcu/BUSTED
deleted file mode 100644
index 48d8a24..0000000
--- a/rcutorture/configs/rcu/BUSTED
+++ /dev/null
@@ -1,7 +0,0 @@
-CONFIG_RCU_TRACE=n
-CONFIG_SMP=y
-CONFIG_NR_CPUS=4
-CONFIG_HOTPLUG_CPU=y
-CONFIG_PREEMPT_NONE=n
-CONFIG_PREEMPT_VOLUNTARY=n
-CONFIG_PREEMPT=y
diff --git a/rcutorture/configs/rcu/BUSTED.boot b/rcutorture/configs/rcu/BUSTED.boot
deleted file mode 100644
index 6804f9d..0000000
--- a/rcutorture/configs/rcu/BUSTED.boot
+++ /dev/null
@@ -1 +0,0 @@
-rcutorture.torture_type=rcu_busted
diff --git a/rcutorture/configs/rcu/CFLIST b/rcutorture/configs/rcu/CFLIST
deleted file mode 100644
index cd3d29c..0000000
--- a/rcutorture/configs/rcu/CFLIST
+++ /dev/null
@@ -1,13 +0,0 @@
-TREE01
-TREE02
-TREE03
-TREE04
-TREE05
-TREE06
-TREE07
-TREE08
-TREE09
-SRCU-N
-SRCU-P
-TINY01
-TINY02
diff --git a/rcutorture/configs/rcu/CFcommon b/rcutorture/configs/rcu/CFcommon
deleted file mode 100644
index d2d2a86..0000000
--- a/rcutorture/configs/rcu/CFcommon
+++ /dev/null
@@ -1,2 +0,0 @@
-CONFIG_RCU_TORTURE_TEST=y
-CONFIG_PRINTK_TIME=y
diff --git a/rcutorture/configs/rcu/SRCU-N b/rcutorture/configs/rcu/SRCU-N
deleted file mode 100644
index 9fbb41b..0000000
--- a/rcutorture/configs/rcu/SRCU-N
+++ /dev/null
@@ -1,7 +0,0 @@
-CONFIG_RCU_TRACE=n
-CONFIG_SMP=y
-CONFIG_NR_CPUS=4
-CONFIG_HOTPLUG_CPU=y
-CONFIG_PREEMPT_NONE=y
-CONFIG_PREEMPT_VOLUNTARY=n
-CONFIG_PREEMPT=n
diff --git a/rcutorture/configs/rcu/SRCU-N.boot b/rcutorture/configs/rcu/SRCU-N.boot
deleted file mode 100644
index 238bfe3..0000000
--- a/rcutorture/configs/rcu/SRCU-N.boot
+++ /dev/null
@@ -1 +0,0 @@
-rcutorture.torture_type=srcu
diff --git a/rcutorture/configs/rcu/SRCU-P b/rcutorture/configs/rcu/SRCU-P
deleted file mode 100644
index 4b6f272..0000000
--- a/rcutorture/configs/rcu/SRCU-P
+++ /dev/null
@@ -1,7 +0,0 @@
-CONFIG_RCU_TRACE=n
-CONFIG_SMP=y
-CONFIG_NR_CPUS=8
-CONFIG_HOTPLUG_CPU=y
-CONFIG_PREEMPT_NONE=n
-CONFIG_PREEMPT_VOLUNTARY=n
-CONFIG_PREEMPT=y
diff --git a/rcutorture/configs/rcu/SRCU-P.boot b/rcutorture/configs/rcu/SRCU-P.boot
deleted file mode 100644
index 238bfe3..0000000
--- a/rcutorture/configs/rcu/SRCU-P.boot
+++ /dev/null
@@ -1 +0,0 @@
-rcutorture.torture_type=srcu
diff --git a/rcutorture/configs/rcu/TINY01 b/rcutorture/configs/rcu/TINY01
deleted file mode 100644
index 0a63e07..0000000
--- a/rcutorture/configs/rcu/TINY01
+++ /dev/null
@@ -1,12 +0,0 @@
-CONFIG_SMP=n
-CONFIG_PREEMPT_NONE=y
-CONFIG_PREEMPT_VOLUNTARY=n
-CONFIG_PREEMPT=n
-#CHECK#CONFIG_TINY_RCU=y
-CONFIG_HZ_PERIODIC=n
-CONFIG_NO_HZ_IDLE=y
-CONFIG_NO_HZ_FULL=n
-CONFIG_RCU_TRACE=n
-CONFIG_DEBUG_LOCK_ALLOC=n
-CONFIG_DEBUG_OBJECTS_RCU_HEAD=n
-CONFIG_PREEMPT_COUNT=n
diff --git a/rcutorture/configs/rcu/TINY02 b/rcutorture/configs/rcu/TINY02
deleted file mode 100644
index f4feaee..0000000
--- a/rcutorture/configs/rcu/TINY02
+++ /dev/null
@@ -1,12 +0,0 @@
-CONFIG_SMP=n
-CONFIG_PREEMPT_NONE=y
-CONFIG_PREEMPT_VOLUNTARY=n
-CONFIG_PREEMPT=n
-#CHECK#CONFIG_TINY_RCU=y
-CONFIG_HZ_PERIODIC=y
-CONFIG_NO_HZ_IDLE=n
-CONFIG_NO_HZ_FULL=n
-CONFIG_RCU_TRACE=y
-CONFIG_DEBUG_LOCK_ALLOC=y
-CONFIG_DEBUG_OBJECTS_RCU_HEAD=n
-CONFIG_PREEMPT_COUNT=y
diff --git a/rcutorture/configs/rcu/TREE01 b/rcutorture/configs/rcu/TREE01
deleted file mode 100644
index 9c827ec..0000000
--- a/rcutorture/configs/rcu/TREE01
+++ /dev/null
@@ -1,22 +0,0 @@
-CONFIG_SMP=y
-CONFIG_NR_CPUS=8
-CONFIG_PREEMPT_NONE=n
-CONFIG_PREEMPT_VOLUNTARY=n
-CONFIG_PREEMPT=y
-#CHECK#CONFIG_TREE_PREEMPT_RCU=y
-CONFIG_HZ_PERIODIC=n
-CONFIG_NO_HZ_IDLE=y
-CONFIG_NO_HZ_FULL=n
-CONFIG_RCU_FAST_NO_HZ=y
-CONFIG_RCU_TRACE=y
-CONFIG_HOTPLUG_CPU=y
-CONFIG_RCU_FANOUT=8
-CONFIG_RCU_FANOUT_EXACT=n
-CONFIG_RCU_NOCB_CPU=y
-CONFIG_RCU_NOCB_CPU_ZERO=y
-CONFIG_DEBUG_LOCK_ALLOC=n
-CONFIG_PROVE_RCU_DELAY=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/TREE01.boot b/rcutorture/configs/rcu/TREE01.boot
deleted file mode 100644
index 0fc8a34..0000000
--- a/rcutorture/configs/rcu/TREE01.boot
+++ /dev/null
@@ -1 +0,0 @@
-rcutorture.torture_type=rcu_bh
diff --git a/rcutorture/configs/rcu/TREE02 b/rcutorture/configs/rcu/TREE02
deleted file mode 100644
index 1a777b5..0000000
--- a/rcutorture/configs/rcu/TREE02
+++ /dev/null
@@ -1,25 +0,0 @@
-CONFIG_SMP=y
-CONFIG_NR_CPUS=8
-CONFIG_PREEMPT_NONE=n
-CONFIG_PREEMPT_VOLUNTARY=n
-CONFIG_PREEMPT=y
-#CHECK#CONFIG_TREE_PREEMPT_RCU=y
-CONFIG_HZ_PERIODIC=n
-CONFIG_NO_HZ_IDLE=y
-CONFIG_NO_HZ_FULL=n
-CONFIG_RCU_FAST_NO_HZ=n
-CONFIG_RCU_TRACE=n
-CONFIG_HOTPLUG_CPU=n
-CONFIG_SUSPEND=n
-CONFIG_HIBERNATION=n
-CONFIG_RCU_FANOUT=3
-CONFIG_RCU_FANOUT_LEAF=3
-CONFIG_RCU_FANOUT_EXACT=n
-CONFIG_RCU_NOCB_CPU=n
-CONFIG_DEBUG_LOCK_ALLOC=y
-CONFIG_PROVE_LOCKING=n
-CONFIG_PROVE_RCU_DELAY=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
deleted file mode 100644
index 61c8d9c..0000000
--- a/rcutorture/configs/rcu/TREE02-T
+++ /dev/null
@@ -1,25 +0,0 @@
-CONFIG_SMP=y
-CONFIG_NR_CPUS=8
-CONFIG_PREEMPT_NONE=n
-CONFIG_PREEMPT_VOLUNTARY=n
-CONFIG_PREEMPT=y
-#CHECK#CONFIG_TREE_PREEMPT_RCU=y
-CONFIG_HZ_PERIODIC=n
-CONFIG_NO_HZ_IDLE=y
-CONFIG_NO_HZ_FULL=n
-CONFIG_RCU_FAST_NO_HZ=n
-CONFIG_RCU_TRACE=y
-CONFIG_HOTPLUG_CPU=n
-CONFIG_SUSPEND=n
-CONFIG_HIBERNATION=n
-CONFIG_RCU_FANOUT=3
-CONFIG_RCU_FANOUT_LEAF=3
-CONFIG_RCU_FANOUT_EXACT=n
-CONFIG_RCU_NOCB_CPU=n
-CONFIG_DEBUG_LOCK_ALLOC=y
-CONFIG_PROVE_LOCKING=n
-CONFIG_PROVE_RCU_DELAY=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
deleted file mode 100644
index c1f111c..0000000
--- a/rcutorture/configs/rcu/TREE03
+++ /dev/null
@@ -1,22 +0,0 @@
-CONFIG_SMP=y
-CONFIG_NR_CPUS=8
-CONFIG_PREEMPT_NONE=n
-CONFIG_PREEMPT_VOLUNTARY=n
-CONFIG_PREEMPT=y
-#CHECK#CONFIG_TREE_PREEMPT_RCU=y
-CONFIG_HZ_PERIODIC=y
-CONFIG_NO_HZ_IDLE=n
-CONFIG_NO_HZ_FULL=n
-CONFIG_RCU_TRACE=y
-CONFIG_HOTPLUG_CPU=y
-CONFIG_RCU_FANOUT=4
-CONFIG_RCU_FANOUT_LEAF=4
-CONFIG_RCU_FANOUT_EXACT=n
-CONFIG_RCU_NOCB_CPU=n
-CONFIG_DEBUG_LOCK_ALLOC=n
-CONFIG_PROVE_RCU_DELAY=n
-CONFIG_RCU_CPU_STALL_INFO=n
-CONFIG_RCU_CPU_STALL_VERBOSE=n
-CONFIG_RCU_BOOST=y
-CONFIG_RCU_BOOST_PRIO=2
-CONFIG_DEBUG_OBJECTS_RCU_HEAD=n
diff --git a/rcutorture/configs/rcu/TREE04 b/rcutorture/configs/rcu/TREE04
deleted file mode 100644
index 7dbd27c..0000000
--- a/rcutorture/configs/rcu/TREE04
+++ /dev/null
@@ -1,24 +0,0 @@
-CONFIG_SMP=y
-CONFIG_NR_CPUS=8
-CONFIG_PREEMPT_NONE=y
-CONFIG_PREEMPT_VOLUNTARY=n
-CONFIG_PREEMPT=n
-#CHECK#CONFIG_TREE_RCU=y
-CONFIG_HZ_PERIODIC=n
-CONFIG_NO_HZ_IDLE=n
-CONFIG_NO_HZ_FULL=y
-CONFIG_NO_HZ_FULL_ALL=y
-CONFIG_RCU_FAST_NO_HZ=y
-CONFIG_RCU_TRACE=y
-CONFIG_HOTPLUG_CPU=n
-CONFIG_SUSPEND=n
-CONFIG_HIBERNATION=n
-CONFIG_RCU_FANOUT=2
-CONFIG_RCU_FANOUT_LEAF=2
-CONFIG_RCU_FANOUT_EXACT=n
-CONFIG_RCU_NOCB_CPU=n
-CONFIG_DEBUG_LOCK_ALLOC=n
-CONFIG_PROVE_RCU_DELAY=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/TREE04.boot b/rcutorture/configs/rcu/TREE04.boot
deleted file mode 100644
index 0fc8a34..0000000
--- a/rcutorture/configs/rcu/TREE04.boot
+++ /dev/null
@@ -1 +0,0 @@
-rcutorture.torture_type=rcu_bh
diff --git a/rcutorture/configs/rcu/TREE05 b/rcutorture/configs/rcu/TREE05
deleted file mode 100644
index d0f32e5..0000000
--- a/rcutorture/configs/rcu/TREE05
+++ /dev/null
@@ -1,24 +0,0 @@
-CONFIG_SMP=y
-CONFIG_NR_CPUS=8
-CONFIG_PREEMPT_NONE=y
-CONFIG_PREEMPT_VOLUNTARY=n
-CONFIG_PREEMPT=n
-#CHECK#CONFIG_TREE_RCU=y
-CONFIG_HZ_PERIODIC=n
-CONFIG_NO_HZ_IDLE=y
-CONFIG_NO_HZ_FULL=n
-CONFIG_RCU_FAST_NO_HZ=n
-CONFIG_RCU_TRACE=n
-CONFIG_HOTPLUG_CPU=y
-CONFIG_RCU_FANOUT=6
-CONFIG_RCU_FANOUT_LEAF=6
-CONFIG_RCU_FANOUT_EXACT=n
-CONFIG_RCU_NOCB_CPU=y
-CONFIG_RCU_NOCB_CPU_NONE=y
-CONFIG_DEBUG_LOCK_ALLOC=y
-CONFIG_PROVE_LOCKING=y
-CONFIG_PROVE_RCU=y
-CONFIG_PROVE_RCU_DELAY=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
deleted file mode 100644
index 3b42b8b..0000000
--- a/rcutorture/configs/rcu/TREE05.boot
+++ /dev/null
@@ -1 +0,0 @@
-rcutorture.torture_type=sched
diff --git a/rcutorture/configs/rcu/TREE06 b/rcutorture/configs/rcu/TREE06
deleted file mode 100644
index 2e477df..0000000
--- a/rcutorture/configs/rcu/TREE06
+++ /dev/null
@@ -1,25 +0,0 @@
-CONFIG_SMP=y
-CONFIG_NR_CPUS=8
-CONFIG_PREEMPT_NONE=y
-CONFIG_PREEMPT_VOLUNTARY=n
-CONFIG_PREEMPT=n
-#CHECK#CONFIG_TREE_RCU=y
-CONFIG_HZ_PERIODIC=n
-CONFIG_NO_HZ_IDLE=y
-CONFIG_NO_HZ_FULL=n
-CONFIG_RCU_FAST_NO_HZ=n
-CONFIG_RCU_TRACE=n
-CONFIG_HOTPLUG_CPU=n
-CONFIG_SUSPEND=n
-CONFIG_HIBERNATION=n
-CONFIG_RCU_FANOUT=6
-CONFIG_RCU_FANOUT_LEAF=6
-CONFIG_RCU_FANOUT_EXACT=y
-CONFIG_RCU_NOCB_CPU=n
-CONFIG_DEBUG_LOCK_ALLOC=y
-CONFIG_PROVE_LOCKING=y
-CONFIG_PROVE_RCU=y
-CONFIG_PROVE_RCU_DELAY=n
-CONFIG_RCU_CPU_STALL_INFO=n
-CONFIG_RCU_CPU_STALL_VERBOSE=n
-CONFIG_DEBUG_OBJECTS_RCU_HEAD=y
diff --git a/rcutorture/configs/rcu/TREE07 b/rcutorture/configs/rcu/TREE07
deleted file mode 100644
index 042f86e..0000000
--- a/rcutorture/configs/rcu/TREE07
+++ /dev/null
@@ -1,23 +0,0 @@
-CONFIG_SMP=y
-CONFIG_NR_CPUS=16
-CONFIG_PREEMPT_NONE=y
-CONFIG_PREEMPT_VOLUNTARY=n
-CONFIG_PREEMPT=n
-#CHECK#CONFIG_TREE_RCU=y
-CONFIG_HZ_PERIODIC=n
-CONFIG_NO_HZ_IDLE=n
-CONFIG_NO_HZ_FULL=y
-CONFIG_NO_HZ_FULL_ALL=y
-CONFIG_NO_HZ_FULL_SYSIDLE=y
-CONFIG_RCU_FAST_NO_HZ=n
-CONFIG_RCU_TRACE=y
-CONFIG_HOTPLUG_CPU=y
-CONFIG_RCU_FANOUT=2
-CONFIG_RCU_FANOUT_LEAF=2
-CONFIG_RCU_FANOUT_EXACT=n
-CONFIG_RCU_NOCB_CPU=n
-CONFIG_DEBUG_LOCK_ALLOC=n
-CONFIG_PROVE_RCU_DELAY=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
deleted file mode 100644
index 3438cee..0000000
--- a/rcutorture/configs/rcu/TREE08
+++ /dev/null
@@ -1,25 +0,0 @@
-CONFIG_SMP=y
-CONFIG_NR_CPUS=16
-CONFIG_PREEMPT_NONE=n
-CONFIG_PREEMPT_VOLUNTARY=n
-CONFIG_PREEMPT=y
-#CHECK#CONFIG_TREE_PREEMPT_RCU=y
-CONFIG_HZ_PERIODIC=n
-CONFIG_NO_HZ_IDLE=y
-CONFIG_NO_HZ_FULL=n
-CONFIG_RCU_FAST_NO_HZ=n
-CONFIG_RCU_TRACE=n
-CONFIG_HOTPLUG_CPU=n
-CONFIG_SUSPEND=n
-CONFIG_HIBERNATION=n
-CONFIG_RCU_FANOUT=3
-CONFIG_RCU_FANOUT_EXACT=y
-CONFIG_RCU_FANOUT_LEAF=2
-CONFIG_RCU_NOCB_CPU=y
-CONFIG_RCU_NOCB_CPU_ALL=y
-CONFIG_DEBUG_LOCK_ALLOC=n
-CONFIG_PROVE_RCU_DELAY=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-T b/rcutorture/configs/rcu/TREE08-T
deleted file mode 100644
index bf4523d..0000000
--- a/rcutorture/configs/rcu/TREE08-T
+++ /dev/null
@@ -1,25 +0,0 @@
-CONFIG_SMP=y
-CONFIG_NR_CPUS=16
-CONFIG_PREEMPT_NONE=n
-CONFIG_PREEMPT_VOLUNTARY=n
-CONFIG_PREEMPT=y
-#CHECK#CONFIG_TREE_PREEMPT_RCU=y
-CONFIG_HZ_PERIODIC=n
-CONFIG_NO_HZ_IDLE=y
-CONFIG_NO_HZ_FULL=n
-CONFIG_RCU_FAST_NO_HZ=n
-CONFIG_RCU_TRACE=y
-CONFIG_HOTPLUG_CPU=n
-CONFIG_SUSPEND=n
-CONFIG_HIBERNATION=n
-CONFIG_RCU_FANOUT=3
-CONFIG_RCU_FANOUT_EXACT=y
-CONFIG_RCU_FANOUT_LEAF=2
-CONFIG_RCU_NOCB_CPU=y
-CONFIG_RCU_NOCB_CPU_ALL=y
-CONFIG_DEBUG_LOCK_ALLOC=n
-CONFIG_PROVE_RCU_DELAY=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
deleted file mode 100644
index 3b42b8b..0000000
--- a/rcutorture/configs/rcu/TREE08.boot
+++ /dev/null
@@ -1 +0,0 @@
-rcutorture.torture_type=sched
diff --git a/rcutorture/configs/rcu/TREE09 b/rcutorture/configs/rcu/TREE09
deleted file mode 100644
index 81e4f7c..0000000
--- a/rcutorture/configs/rcu/TREE09
+++ /dev/null
@@ -1,20 +0,0 @@
-CONFIG_SMP=n
-CONFIG_NR_CPUS=1
-CONFIG_PREEMPT_NONE=n
-CONFIG_PREEMPT_VOLUNTARY=n
-CONFIG_PREEMPT=y
-#CHECK#CONFIG_TREE_PREEMPT_RCU=y
-CONFIG_HZ_PERIODIC=n
-CONFIG_NO_HZ_IDLE=y
-CONFIG_NO_HZ_FULL=n
-CONFIG_RCU_TRACE=n
-CONFIG_HOTPLUG_CPU=n
-CONFIG_SUSPEND=n
-CONFIG_HIBERNATION=n
-CONFIG_RCU_NOCB_CPU=n
-CONFIG_DEBUG_LOCK_ALLOC=n
-CONFIG_PROVE_RCU_DELAY=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
deleted file mode 100644
index 1822394..0000000
--- a/rcutorture/configs/rcu/v0.0/CFLIST
+++ /dev/null
@@ -1,14 +0,0 @@
-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
deleted file mode 100644
index d3ef873..0000000
--- a/rcutorture/configs/rcu/v0.0/N1-S-T-NH-SD-SMP-HP
+++ /dev/null
@@ -1,18 +0,0 @@
-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
deleted file mode 100644
index 02e4185..0000000
--- a/rcutorture/configs/rcu/v0.0/N2-2-t-nh-sd-SMP-hp
+++ /dev/null
@@ -1,20 +0,0 @@
-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
deleted file mode 100644
index b3100f6..0000000
--- a/rcutorture/configs/rcu/v0.0/N3-3-T-nh-SD-SMP-hp
+++ /dev/null
@@ -1,22 +0,0 @@
-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
deleted file mode 100644
index c56b445..0000000
--- a/rcutorture/configs/rcu/v0.0/N4-A-t-NH-sd-SMP-HP
+++ /dev/null
@@ -1,18 +0,0 @@
-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
deleted file mode 100644
index 90d924f..0000000
--- a/rcutorture/configs/rcu/v0.0/N5-U-T-NH-sd-SMP-hp
+++ /dev/null
@@ -1,22 +0,0 @@
-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
deleted file mode 100644
index 023f312..0000000
--- a/rcutorture/configs/rcu/v0.0/NT1-nh
+++ /dev/null
@@ -1,23 +0,0 @@
-#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
deleted file mode 100644
index 6fd0235..0000000
--- a/rcutorture/configs/rcu/v0.0/NT3-NH
+++ /dev/null
@@ -1,20 +0,0 @@
-#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
deleted file mode 100644
index f72402d..0000000
--- a/rcutorture/configs/rcu/v0.0/P1-S-T-NH-SD-SMP-HP
+++ /dev/null
@@ -1,19 +0,0 @@
-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
deleted file mode 100644
index 0f3b667..0000000
--- a/rcutorture/configs/rcu/v0.0/P2-2-t-nh-sd-SMP-hp
+++ /dev/null
@@ -1,20 +0,0 @@
-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
deleted file mode 100644
index b035e14..0000000
--- a/rcutorture/configs/rcu/v0.0/P3-3-T-nh-SD-SMP-hp
+++ /dev/null
@@ -1,20 +0,0 @@
-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
deleted file mode 100644
index 3ccf6a9..0000000
--- a/rcutorture/configs/rcu/v0.0/P4-A-t-NH-sd-SMP-HP
+++ /dev/null
@@ -1,22 +0,0 @@
-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
deleted file mode 100644
index ef624ce..0000000
--- a/rcutorture/configs/rcu/v0.0/P5-U-T-NH-sd-SMP-hp
+++ /dev/null
@@ -1,28 +0,0 @@
-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_PROVE_RCU_DELAY=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
deleted file mode 100644
index e3361c3..0000000
--- a/rcutorture/configs/rcu/v0.0/PT1-nh
+++ /dev/null
@@ -1,23 +0,0 @@
-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
deleted file mode 100644
index 64abfc3..0000000
--- a/rcutorture/configs/rcu/v0.0/PT2-NH
+++ /dev/null
@@ -1,22 +0,0 @@
-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
deleted file mode 100644
index 5ace37a..0000000
--- a/rcutorture/configs/rcu/v0.0/ver_functions.sh
+++ /dev/null
@@ -1,33 +0,0 @@
-#!/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
deleted file mode 100644
index da4cbc6..0000000
--- a/rcutorture/configs/rcu/v3.12/CFLIST
+++ /dev/null
@@ -1,17 +0,0 @@
-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
deleted file mode 100644
index d81e11d..0000000
--- a/rcutorture/configs/rcu/v3.12/N1-S-T-NH-SD-SMP-HP
+++ /dev/null
@@ -1,19 +0,0 @@
-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
deleted file mode 100644
index 02e4185..0000000
--- a/rcutorture/configs/rcu/v3.12/N2-2-t-nh-sd-SMP-hp
+++ /dev/null
@@ -1,20 +0,0 @@
-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
deleted file mode 100644
index b3100f6..0000000
--- a/rcutorture/configs/rcu/v3.12/N3-3-T-nh-SD-SMP-hp
+++ /dev/null
@@ -1,22 +0,0 @@
-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
deleted file mode 100644
index c56b445..0000000
--- a/rcutorture/configs/rcu/v3.12/N4-A-t-NH-sd-SMP-HP
+++ /dev/null
@@ -1,18 +0,0 @@
-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
deleted file mode 100644
index 90d924f..0000000
--- a/rcutorture/configs/rcu/v3.12/N5-U-T-NH-sd-SMP-hp
+++ /dev/null
@@ -1,22 +0,0 @@
-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
deleted file mode 100644
index 0ccc36d..0000000
--- a/rcutorture/configs/rcu/v3.12/N6---t-nh-SD-smp-hp
+++ /dev/null
@@ -1,19 +0,0 @@
-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
deleted file mode 100644
index 3f640cf..0000000
--- a/rcutorture/configs/rcu/v3.12/N7-4-T-NH-SD-SMP-HP
+++ /dev/null
@@ -1,26 +0,0 @@
-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
deleted file mode 100644
index 285da2d..0000000
--- a/rcutorture/configs/rcu/v3.12/N8-2-T-NH-SD-SMP-HP
+++ /dev/null
@@ -1,22 +0,0 @@
-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
deleted file mode 100644
index 023f312..0000000
--- a/rcutorture/configs/rcu/v3.12/NT1-nh
+++ /dev/null
@@ -1,23 +0,0 @@
-#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
deleted file mode 100644
index 6fd0235..0000000
--- a/rcutorture/configs/rcu/v3.12/NT3-NH
+++ /dev/null
@@ -1,20 +0,0 @@
-#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
deleted file mode 100644
index 9647c44..0000000
--- a/rcutorture/configs/rcu/v3.12/P1-S-T-NH-SD-SMP-HP
+++ /dev/null
@@ -1,20 +0,0 @@
-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
deleted file mode 100644
index 0f3b667..0000000
--- a/rcutorture/configs/rcu/v3.12/P2-2-t-nh-sd-SMP-hp
+++ /dev/null
@@ -1,20 +0,0 @@
-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
deleted file mode 100644
index b035e14..0000000
--- a/rcutorture/configs/rcu/v3.12/P3-3-T-nh-SD-SMP-hp
+++ /dev/null
@@ -1,20 +0,0 @@
-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
deleted file mode 100644
index 3ccf6a9..0000000
--- a/rcutorture/configs/rcu/v3.12/P4-A-t-NH-sd-SMP-HP
+++ /dev/null
@@ -1,22 +0,0 @@
-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
deleted file mode 100644
index ef624ce..0000000
--- a/rcutorture/configs/rcu/v3.12/P5-U-T-NH-sd-SMP-hp
+++ /dev/null
@@ -1,28 +0,0 @@
-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_PROVE_RCU_DELAY=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
deleted file mode 100644
index f4c9175..0000000
--- a/rcutorture/configs/rcu/v3.12/P6---t-nh-SD-smp-hp
+++ /dev/null
@@ -1,18 +0,0 @@
-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
deleted file mode 100644
index 77a8c5b..0000000
--- a/rcutorture/configs/rcu/v3.12/P7-4-T-NH-SD-SMP-HP
+++ /dev/null
@@ -1,30 +0,0 @@
-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
deleted file mode 100644
index 0eecebc..0000000
--- a/rcutorture/configs/rcu/v3.12/P7-4-T-NH-SD-SMP-HP-all
+++ /dev/null
@@ -1,30 +0,0 @@
-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
deleted file mode 100644
index 0eecebc..0000000
--- a/rcutorture/configs/rcu/v3.12/P7-4-T-NH-SD-SMP-HP-none
+++ /dev/null
@@ -1,30 +0,0 @@
-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
deleted file mode 100644
index 588bc70..0000000
--- a/rcutorture/configs/rcu/v3.12/P7-4-T-NH-SD-SMP-hp
+++ /dev/null
@@ -1,30 +0,0 @@
-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
deleted file mode 100644
index e3361c3..0000000
--- a/rcutorture/configs/rcu/v3.12/PT1-nh
+++ /dev/null
@@ -1,23 +0,0 @@
-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
deleted file mode 100644
index 64abfc3..0000000
--- a/rcutorture/configs/rcu/v3.12/PT2-NH
+++ /dev/null
@@ -1,22 +0,0 @@
-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
deleted file mode 100644
index 1822394..0000000
--- a/rcutorture/configs/rcu/v3.3/CFLIST
+++ /dev/null
@@ -1,14 +0,0 @@
-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
deleted file mode 100644
index d81e11d..0000000
--- a/rcutorture/configs/rcu/v3.3/N1-S-T-NH-SD-SMP-HP
+++ /dev/null
@@ -1,19 +0,0 @@
-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
deleted file mode 100644
index 02e4185..0000000
--- a/rcutorture/configs/rcu/v3.3/N2-2-t-nh-sd-SMP-hp
+++ /dev/null
@@ -1,20 +0,0 @@
-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
deleted file mode 100644
index b3100f6..0000000
--- a/rcutorture/configs/rcu/v3.3/N3-3-T-nh-SD-SMP-hp
+++ /dev/null
@@ -1,22 +0,0 @@
-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
deleted file mode 100644
index c56b445..0000000
--- a/rcutorture/configs/rcu/v3.3/N4-A-t-NH-sd-SMP-HP
+++ /dev/null
@@ -1,18 +0,0 @@
-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
deleted file mode 100644
index 90d924f..0000000
--- a/rcutorture/configs/rcu/v3.3/N5-U-T-NH-sd-SMP-hp
+++ /dev/null
@@ -1,22 +0,0 @@
-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
deleted file mode 100644
index 023f312..0000000
--- a/rcutorture/configs/rcu/v3.3/NT1-nh
+++ /dev/null
@@ -1,23 +0,0 @@
-#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
deleted file mode 100644
index 6fd0235..0000000
--- a/rcutorture/configs/rcu/v3.3/NT3-NH
+++ /dev/null
@@ -1,20 +0,0 @@
-#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
deleted file mode 100644
index 9647c44..0000000
--- a/rcutorture/configs/rcu/v3.3/P1-S-T-NH-SD-SMP-HP
+++ /dev/null
@@ -1,20 +0,0 @@
-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
deleted file mode 100644
index 0f3b667..0000000
--- a/rcutorture/configs/rcu/v3.3/P2-2-t-nh-sd-SMP-hp
+++ /dev/null
@@ -1,20 +0,0 @@
-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
deleted file mode 100644
index b035e14..0000000
--- a/rcutorture/configs/rcu/v3.3/P3-3-T-nh-SD-SMP-hp
+++ /dev/null
@@ -1,20 +0,0 @@
-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
deleted file mode 100644
index 3ccf6a9..0000000
--- a/rcutorture/configs/rcu/v3.3/P4-A-t-NH-sd-SMP-HP
+++ /dev/null
@@ -1,22 +0,0 @@
-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
deleted file mode 100644
index ef624ce..0000000
--- a/rcutorture/configs/rcu/v3.3/P5-U-T-NH-sd-SMP-hp
+++ /dev/null
@@ -1,28 +0,0 @@
-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_PROVE_RCU_DELAY=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
deleted file mode 100644
index e3361c3..0000000
--- a/rcutorture/configs/rcu/v3.3/PT1-nh
+++ /dev/null
@@ -1,23 +0,0 @@
-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
deleted file mode 100644
index 64abfc3..0000000
--- a/rcutorture/configs/rcu/v3.3/PT2-NH
+++ /dev/null
@@ -1,22 +0,0 @@
-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
deleted file mode 100644
index bae5569..0000000
--- a/rcutorture/configs/rcu/v3.3/ver_functions.sh
+++ /dev/null
@@ -1,44 +0,0 @@
-#!/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
deleted file mode 100644
index 1822394..0000000
--- a/rcutorture/configs/rcu/v3.5/CFLIST
+++ /dev/null
@@ -1,14 +0,0 @@
-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
deleted file mode 100644
index d81e11d..0000000
--- a/rcutorture/configs/rcu/v3.5/N1-S-T-NH-SD-SMP-HP
+++ /dev/null
@@ -1,19 +0,0 @@
-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
deleted file mode 100644
index 02e4185..0000000
--- a/rcutorture/configs/rcu/v3.5/N2-2-t-nh-sd-SMP-hp
+++ /dev/null
@@ -1,20 +0,0 @@
-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
deleted file mode 100644
index b3100f6..0000000
--- a/rcutorture/configs/rcu/v3.5/N3-3-T-nh-SD-SMP-hp
+++ /dev/null
@@ -1,22 +0,0 @@
-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
deleted file mode 100644
index c56b445..0000000
--- a/rcutorture/configs/rcu/v3.5/N4-A-t-NH-sd-SMP-HP
+++ /dev/null
@@ -1,18 +0,0 @@
-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
deleted file mode 100644
index 90d924f..0000000
--- a/rcutorture/configs/rcu/v3.5/N5-U-T-NH-sd-SMP-hp
+++ /dev/null
@@ -1,22 +0,0 @@
-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
deleted file mode 100644
index 023f312..0000000
--- a/rcutorture/configs/rcu/v3.5/NT1-nh
+++ /dev/null
@@ -1,23 +0,0 @@
-#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
deleted file mode 100644
index 6fd0235..0000000
--- a/rcutorture/configs/rcu/v3.5/NT3-NH
+++ /dev/null
@@ -1,20 +0,0 @@
-#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
deleted file mode 100644
index 9647c44..0000000
--- a/rcutorture/configs/rcu/v3.5/P1-S-T-NH-SD-SMP-HP
+++ /dev/null
@@ -1,20 +0,0 @@
-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
deleted file mode 100644
index 0f3b667..0000000
--- a/rcutorture/configs/rcu/v3.5/P2-2-t-nh-sd-SMP-hp
+++ /dev/null
@@ -1,20 +0,0 @@
-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
deleted file mode 100644
index b035e14..0000000
--- a/rcutorture/configs/rcu/v3.5/P3-3-T-nh-SD-SMP-hp
+++ /dev/null
@@ -1,20 +0,0 @@
-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
deleted file mode 100644
index 3ccf6a9..0000000
--- a/rcutorture/configs/rcu/v3.5/P4-A-t-NH-sd-SMP-HP
+++ /dev/null
@@ -1,22 +0,0 @@
-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
deleted file mode 100644
index ef624ce..0000000
--- a/rcutorture/configs/rcu/v3.5/P5-U-T-NH-sd-SMP-hp
+++ /dev/null
@@ -1,28 +0,0 @@
-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_PROVE_RCU_DELAY=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
deleted file mode 100644
index e3361c3..0000000
--- a/rcutorture/configs/rcu/v3.5/PT1-nh
+++ /dev/null
@@ -1,23 +0,0 @@
-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
deleted file mode 100644
index 64abfc3..0000000
--- a/rcutorture/configs/rcu/v3.5/PT2-NH
+++ /dev/null
@@ -1,22 +0,0 @@
-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
deleted file mode 100644
index 8977d8d..0000000
--- a/rcutorture/configs/rcu/v3.5/ver_functions.sh
+++ /dev/null
@@ -1,57 +0,0 @@
-#!/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/configs/rcu/ver_functions.sh b/rcutorture/configs/rcu/ver_functions.sh
deleted file mode 100644
index 8977d8d..0000000
--- a/rcutorture/configs/rcu/ver_functions.sh
+++ /dev/null
@@ -1,57 +0,0 @@
-#!/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
deleted file mode 100644
index 28db67b..0000000
--- a/rcutorture/doc/TINY_RCU.txt
+++ /dev/null
@@ -1,40 +0,0 @@
-This document gives a brief rationale for the TINY_RCU test cases.
-
-
-Kconfig Parameters:
-
-CONFIG_DEBUG_LOCK_ALLOC -- Do all three and none of the three.
-CONFIG_PREEMPT_COUNT
-CONFIG_RCU_TRACE
-
-The theory here is that randconfig testing will hit the other six possible
-combinations of these parameters.
-
-
-Kconfig Parameters Ignored:
-
-CONFIG_DEBUG_OBJECTS_RCU_HEAD
-CONFIG_PROVE_RCU
-
- In common code tested by TREE_RCU test cases.
-
-CONFIG_NO_HZ_FULL_SYSIDLE
-CONFIG_RCU_NOCB_CPU
-CONFIG_RCU_USER_QS
-
- Meaningless for TINY_RCU.
-
-CONFIG_RCU_STALL_COMMON
-CONFIG_RCU_TORTURE_TEST
-
- Redundant with CONFIG_RCU_TRACE.
-
-CONFIG_HOTPLUG_CPU
-CONFIG_PREEMPT
-CONFIG_PREEMPT_RCU
-CONFIG_SMP
-CONFIG_TINY_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
deleted file mode 100644
index adbb76c..0000000
--- a/rcutorture/doc/TREE_RCU-kconfig.txt
+++ /dev/null
@@ -1,95 +0,0 @@
-This document gives a brief rationale for the TREE_RCU-related test
-cases, a group that includes TREE_PREEMPT_RCU.
-
-
-Kconfig Parameters:
-
-CONFIG_DEBUG_LOCK_ALLOC -- Do three, covering CONFIG_PROVE_LOCKING & not.
-CONFIG_DEBUG_OBJECTS_RCU_HEAD -- Do one.
-CONFIG_HOTPLUG_CPU -- Do half. (Every second.)
-CONFIG_HZ_PERIODIC -- Do one.
-CONFIG_NO_HZ_IDLE -- Do those not otherwise specified. (Groups of two.)
-CONFIG_NO_HZ_FULL -- Do two, one with CONFIG_NO_HZ_FULL_SYSIDLE.
-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_PROVE_RCU_DELAY -- 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.
-CONFIG_RCU_FAST_NO_HZ -- Do one, but not with CONFIG_RCU_NOCB_CPU_ALL.
-CONFIG_RCU_NOCB_CPU -- Do three, see below.
-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 TREE_PREEMPT_RCU.
-RCU-bh: Do one with PREEMPT and one with !PREEMPT.
-RCU-sched: Do one with PREEMPT but not BOOST.
-
-
-Hierarchy:
-
-TREE01. CONFIG_NR_CPUS=8, CONFIG_RCU_FANOUT=8, CONFIG_RCU_FANOUT_EXACT=n.
-TREE02. CONFIG_NR_CPUS=8, CONFIG_RCU_FANOUT=3, CONFIG_RCU_FANOUT_EXACT=n,
- CONFIG_RCU_FANOUT_LEAF=3.
-TREE03. CONFIG_NR_CPUS=8, CONFIG_RCU_FANOUT=4, CONFIG_RCU_FANOUT_EXACT=n,
- CONFIG_RCU_FANOUT_LEAF=4.
-TREE04. CONFIG_NR_CPUS=8, CONFIG_RCU_FANOUT=2, CONFIG_RCU_FANOUT_EXACT=n,
- CONFIG_RCU_FANOUT_LEAF=2.
-TREE05. CONFIG_NR_CPUS=8, CONFIG_RCU_FANOUT=6, CONFIG_RCU_FANOUT_EXACT=n
- CONFIG_RCU_FANOUT_LEAF=6.
-TREE06. CONFIG_NR_CPUS=8, CONFIG_RCU_FANOUT=6, CONFIG_RCU_FANOUT_EXACT=y
- CONFIG_RCU_FANOUT_LEAF=6.
-TREE07. CONFIG_NR_CPUS=16, CONFIG_RCU_FANOUT=2, CONFIG_RCU_FANOUT_EXACT=n,
- CONFIG_RCU_FANOUT_LEAF=2.
-TREE08. CONFIG_NR_CPUS=16, CONFIG_RCU_FANOUT=3, CONFIG_RCU_FANOUT_EXACT=y,
- CONFIG_RCU_FANOUT_LEAF=2.
-TREE09. CONFIG_NR_CPUS=1.
-
-
-Kconfig Parameters Ignored:
-
-CONFIG_64BIT
-
- Used only to check CONFIG_RCU_FANOUT value, inspection suffices.
-
-CONFIG_NO_HZ_FULL_SYSIDLE_SMALL
-
- Defer until Frederic uses this.
-
-CONFIG_PREEMPT_COUNT
-CONFIG_PREEMPT_RCU
-
- Redundant with CONFIG_PREEMPT, ignore.
-
-CONFIG_RCU_BOOST_DELAY
-
- Inspection suffices, ignore.
-
-CONFIG_RCU_CPU_STALL_TIMEOUT
-
- Inspection suffices, ignore.
-
-CONFIG_RCU_STALL_COMMON
-
- Implied by TREE_RCU and TREE_PREEMPT_RCU.
-
-CONFIG_RCU_TORTURE_TEST
-CONFIG_RCU_TORTURE_TEST_RUNNABLE
-
- Always used in KVM testing.
-
-CONFIG_RCU_USER_QS
-
- Redundant with CONFIG_NO_HZ_FULL.
-
-CONFIG_TREE_PREEMPT_RCU
-CONFIG_TREE_RCU
-
- These are controlled by CONFIG_PREEMPT.
diff --git a/rcutorture/doc/initrd.txt b/rcutorture/doc/initrd.txt
deleted file mode 100644
index 49d134c..0000000
--- a/rcutorture/doc/initrd.txt
+++ /dev/null
@@ -1,90 +0,0 @@
-This document describes one way to create the initrd directory hierarchy
-in order to allow an initrd to be built into your kernel. The trick
-here is to steal the initrd file used on your Linux laptop, Ubuntu in
-this case. There are probably much better ways of doing this.
-
-That said, here are the commands:
-
-------------------------------------------------------------------------
-zcat /initrd.img > /tmp/initrd.img.zcat
-mkdir initrd
-cd initrd
-cpio -id < /tmp/initrd.img.zcat
-------------------------------------------------------------------------
-
-Interestingly enough, if you are running rcutorture, you don't really
-need userspace in many cases. Running without userspace has the
-advantage of allowing you to test your kernel independently of the
-distro in place, the root-filesystem layout, and so on. To make this
-happen, put the following script in the initrd's tree's "/init" file,
-with 0755 mode.
-
-------------------------------------------------------------------------
-#!/bin/sh
-
-[ -d /dev ] || mkdir -m 0755 /dev
-[ -d /root ] || mkdir -m 0700 /root
-[ -d /sys ] || mkdir /sys
-[ -d /proc ] || mkdir /proc
-[ -d /tmp ] || mkdir /tmp
-mkdir -p /var/lock
-mount -t sysfs -o nodev,noexec,nosuid sysfs /sys
-mount -t proc -o nodev,noexec,nosuid proc /proc
-# Some things don't work properly without /etc/mtab.
-ln -sf /proc/mounts /etc/mtab
-
-# Note that this only becomes /dev on the real filesystem if udev's scripts
-# are used; which they will be, but it's worth pointing out
-if ! mount -t devtmpfs -o mode=0755 udev /dev; then
- echo "W: devtmpfs not available, falling back to tmpfs for /dev"
- mount -t tmpfs -o mode=0755 udev /dev
- [ -e /dev/console ] || mknod --mode=600 /dev/console c 5 1
- [ -e /dev/kmsg ] || mknod --mode=644 /dev/kmsg c 1 11
- [ -e /dev/null ] || mknod --mode=666 /dev/null c 1 3
-fi
-
-mkdir /dev/pts
-mount -t devpts -o noexec,nosuid,gid=5,mode=0620 devpts /dev/pts || true
-mount -t tmpfs -o "nosuid,size=20%,mode=0755" tmpfs /run
-mkdir /run/initramfs
-# compatibility symlink for the pre-oneiric locations
-ln -s /run/initramfs /dev/.initramfs
-
-# Export relevant variables
-export ROOT=
-export ROOTDELAY=
-export ROOTFLAGS=
-export ROOTFSTYPE=
-export IP=
-export BOOT=
-export BOOTIF=
-export UBIMTD=
-export break=
-export init=/sbin/init
-export quiet=n
-export readonly=y
-export rootmnt=/root
-export debug=
-export panic=
-export blacklist=
-export resume=
-export resume_offset=
-export recovery=
-
-for i in /sys/devices/system/cpu/cpu*/online
-do
- case $i in
- '/sys/devices/system/cpu/cpu0/online')
- ;;
- '/sys/devices/system/cpu/cpu*/online')
- ;;
- *)
- echo 1 > $i
- ;;
- esac
-done
-
-while :
-do
- sleep 10
-done
diff --git a/rcutorture/doc/rcu-test-image.txt b/rcutorture/doc/rcu-test-image.txt
deleted file mode 100644
index 66efb59..0000000
--- a/rcutorture/doc/rcu-test-image.txt
+++ /dev/null
@@ -1,42 +0,0 @@
-This document describes one way to created the rcu-test-image file
-that contains the filesystem used by the guest-OS kernel. There are
-probably much better ways of doing this, and this filesystem could no
-doubt be smaller. It is probably also possible to simply download
-an appropriate image from any number of places.
-
-That said, here are the commands:
-
-------------------------------------------------------------------------
-dd if=/dev/zero of=rcu-test-image bs=400M count=1
-mkfs.ext3 ./rcu-test-image
-sudo mount -o loop ./rcu-test-image /mnt
-
-# Replace "precise" below with your favorite Ubuntu release.
-# Empirical evidence says this image will work for 64-bit, but...
-# Note that debootstrap does take a few minutes to run. Or longer.
-sudo debootstrap --verbose --arch i386 precise /mnt http://archive.ubuntu.com/ubuntu
-cat << '___EOF___' | sudo dd of=/mnt/etc/fstab
-# UNCONFIGURED FSTAB FOR BASE SYSTEM
-#
-/dev/vda / ext3 defaults 1 1
-dev /dev tmpfs rw 0 0
-tmpfs /dev/shm tmpfs defaults 0 0
-devpts /dev/pts devpts gid=5,mode=620 0 0
-sysfs /sys sysfs defaults 0 0
-proc /proc proc defaults 0 0
-___EOF___
-sudo umount /mnt
-------------------------------------------------------------------------
-
-
-References:
-
- http://sripathikodi.blogspot.com/2010/02/creating-kvm-bootable-fedora-system.html
- https://help.ubuntu.com/community/KVM/CreateGuests
- https://help.ubuntu.com/community/JeOSVMBuilder
- http://wiki.libvirt.org/page/UbuntuKVMWalkthrough
- http://www.moe.co.uk/2011/01/07/pci_add_option_rom-failed-to-find-romfile-pxe-rtl8139-bin/ -- "apt-get install kvm-pxe"
- http://www.landley.net/writing/rootfs-howto.html
- http://en.wikipedia.org/wiki/Initrd
- http://en.wikipedia.org/wiki/Cpio
- http://wiki.libvirt.org/page/UbuntuKVMWalkthrough
diff --git a/sysctl/Makefile b/sysctl/Makefile
deleted file mode 100644
index 0a92ada..0000000
--- a/sysctl/Makefile
+++ /dev/null
@@ -1,19 +0,0 @@
-# Makefile for sysctl selftests.
-# Expects kernel.sysctl_writes_strict=1.
-
-# No binaries, but make sure arg-less "make" doesn't trigger "run_tests".
-all:
-
-# Allow specific tests to be selected.
-test_num:
- @/bin/sh ./run_numerictests
-
-test_string:
- @/bin/sh ./run_stringtests
-
-run_tests: all test_num test_string
-
-# Nothing to clean up.
-clean:
-
-.PHONY: all run_tests clean test_num test_string
diff --git a/sysctl/common_tests b/sysctl/common_tests
deleted file mode 100644
index 17d534b..0000000
--- a/sysctl/common_tests
+++ /dev/null
@@ -1,109 +0,0 @@
-#!/bin/sh
-
-TEST_FILE=$(mktemp)
-
-echo "== Testing sysctl behavior against ${TARGET} =="
-
-set_orig()
-{
- echo "${ORIG}" > "${TARGET}"
-}
-
-set_test()
-{
- echo "${TEST_STR}" > "${TARGET}"
-}
-
-verify()
-{
- local seen
- seen=$(cat "$1")
- if [ "${seen}" != "${TEST_STR}" ]; then
- return 1
- fi
- return 0
-}
-
-trap 'set_orig; rm -f "${TEST_FILE}"' EXIT
-
-rc=0
-
-echo -n "Writing test file ... "
-echo "${TEST_STR}" > "${TEST_FILE}"
-if ! verify "${TEST_FILE}"; then
- echo "FAIL" >&2
- exit 1
-else
- echo "ok"
-fi
-
-echo -n "Checking sysctl is not set to test value ... "
-if verify "${TARGET}"; then
- echo "FAIL" >&2
- exit 1
-else
- echo "ok"
-fi
-
-echo -n "Writing sysctl from shell ... "
-set_test
-if ! verify "${TARGET}"; then
- echo "FAIL" >&2
- exit 1
-else
- echo "ok"
-fi
-
-echo -n "Resetting sysctl to original value ... "
-set_orig
-if verify "${TARGET}"; then
- echo "FAIL" >&2
- exit 1
-else
- echo "ok"
-fi
-
-# Now that we've validated the sanity of "set_test" and "set_orig",
-# we can use those functions to set starting states before running
-# specific behavioral tests.
-
-echo -n "Writing entire sysctl in single write ... "
-set_orig
-dd if="${TEST_FILE}" of="${TARGET}" bs=4096 2>/dev/null
-if ! verify "${TARGET}"; then
- echo "FAIL" >&2
- rc=1
-else
- echo "ok"
-fi
-
-echo -n "Writing middle of sysctl after synchronized seek ... "
-set_test
-dd if="${TEST_FILE}" of="${TARGET}" bs=1 seek=1 skip=1 2>/dev/null
-if ! verify "${TARGET}"; then
- echo "FAIL" >&2
- rc=1
-else
- echo "ok"
-fi
-
-echo -n "Writing beyond end of sysctl ... "
-set_orig
-dd if="${TEST_FILE}" of="${TARGET}" bs=20 seek=2 2>/dev/null
-if verify "${TARGET}"; then
- echo "FAIL" >&2
- rc=1
-else
- echo "ok"
-fi
-
-echo -n "Writing sysctl with multiple long writes ... "
-set_orig
-(perl -e 'print "A" x 50;'; echo "${TEST_STR}") | \
- dd of="${TARGET}" bs=50 2>/dev/null
-if verify "${TARGET}"; then
- echo "FAIL" >&2
- rc=1
-else
- echo "ok"
-fi
diff --git a/sysctl/run_numerictests b/sysctl/run_numerictests
deleted file mode 100644
index 8510f93..0000000
--- a/sysctl/run_numerictests
+++ /dev/null
@@ -1,10 +0,0 @@
-#!/bin/sh
-
-SYSCTL="/proc/sys"
-TARGET="${SYSCTL}/vm/swappiness"
-ORIG=$(cat "${TARGET}")
-TEST_STR=$(( $ORIG + 1 ))
-
-. ./common_tests
-
-exit $rc
diff --git a/sysctl/run_stringtests b/sysctl/run_stringtests
deleted file mode 100644
index 90a9293..0000000
--- a/sysctl/run_stringtests
+++ /dev/null
@@ -1,77 +0,0 @@
-#!/bin/sh
-
-SYSCTL="/proc/sys"
-TARGET="${SYSCTL}/kernel/domainname"
-ORIG=$(cat "${TARGET}")
-TEST_STR="Testing sysctl"
-
-. ./common_tests
-
-# Only string sysctls support seeking/appending.
-MAXLEN=65
-
-echo -n "Writing entire sysctl in short writes ... "
-set_orig
-dd if="${TEST_FILE}" of="${TARGET}" bs=1 2>/dev/null
-if ! verify "${TARGET}"; then
- echo "FAIL" >&2
- rc=1
-else
- echo "ok"
-fi
-
-echo -n "Writing middle of sysctl after unsynchronized seek ... "
-set_test
-dd if="${TEST_FILE}" of="${TARGET}" bs=1 seek=1 2>/dev/null
-if verify "${TARGET}"; then
- echo "FAIL" >&2
- rc=1
-else
- echo "ok"
-fi
-
-echo -n "Checking sysctl maxlen is at least $MAXLEN ... "
-set_orig
-perl -e 'print "A" x ('"${MAXLEN}"'-2), "B";' | \
- dd of="${TARGET}" bs="${MAXLEN}" 2>/dev/null
-if ! grep -q B "${TARGET}"; then
- echo "FAIL" >&2
- rc=1
-else
- echo "ok"
-fi
-
-echo -n "Checking sysctl keeps original string on overflow append ... "
-set_orig
-perl -e 'print "A" x ('"${MAXLEN}"'-1), "B";' | \
- dd of="${TARGET}" bs=$(( MAXLEN - 1 )) 2>/dev/null
-if grep -q B "${TARGET}"; then
- echo "FAIL" >&2
- rc=1
-else
- echo "ok"
-fi
-
-echo -n "Checking sysctl stays NULL terminated on write ... "
-set_orig
-perl -e 'print "A" x ('"${MAXLEN}"'-1), "B";' | \
- dd of="${TARGET}" bs="${MAXLEN}" 2>/dev/null
-if grep -q B "${TARGET}"; then
- echo "FAIL" >&2
- rc=1
-else
- echo "ok"
-fi
-
-echo -n "Checking sysctl stays NULL terminated on overwrite ... "
-set_orig
-perl -e 'print "A" x ('"${MAXLEN}"'-1), "BB";' | \
- dd of="${TARGET}" bs=$(( $MAXLEN + 1 )) 2>/dev/null
-if grep -q B "${TARGET}"; then
- echo "FAIL" >&2
- rc=1
-else
- echo "ok"
-fi
-
-exit $rc
diff --git a/timers/Makefile b/timers/Makefile
deleted file mode 100644
index eb2859f..0000000
--- a/timers/Makefile
+++ /dev/null
@@ -1,8 +0,0 @@
-all:
- gcc posix_timers.c -o posix_timers -lrt
-
-run_tests: all
- ./posix_timers
-
-clean:
- rm -f ./posix_timers
diff --git a/timers/posix_timers.c b/timers/posix_timers.c
deleted file mode 100644
index 41bd855..0000000
--- a/timers/posix_timers.c
+++ /dev/null
@@ -1,221 +0,0 @@
-/*
- * Copyright (C) 2013 Red Hat, Inc., Frederic Weisbecker <fweisbec@redhat.com>
- *
- * Licensed under the terms of the GNU GPL License version 2
- *
- * Selftests for a few posix timers interface.
- *
- * Kernel loop code stolen from Steven Rostedt <srostedt@redhat.com>
- */
-
-#include <sys/time.h>
-#include <stdio.h>
-#include <signal.h>
-#include <unistd.h>
-#include <time.h>
-#include <pthread.h>
-
-#define DELAY 2
-#define USECS_PER_SEC 1000000
-
-static volatile int done;
-
-/* Busy loop in userspace to elapse ITIMER_VIRTUAL */
-static void user_loop(void)
-{
- while (!done);
-}
-
-/*
- * Try to spend as much time as possible in kernelspace
- * to elapse ITIMER_PROF.
- */
-static void kernel_loop(void)
-{
- void *addr = sbrk(0);
-
- while (!done) {
- brk(addr + 4096);
- brk(addr);
- }
-}
-
-/*
- * Sleep until ITIMER_REAL expiration.
- */
-static void idle_loop(void)
-{
- pause();
-}
-
-static void sig_handler(int nr)
-{
- done = 1;
-}
-
-/*
- * Check the expected timer expiration matches the GTOD elapsed delta since
- * we armed the timer. Keep a 0.5 sec error margin due to various jitter.
- */
-static int check_diff(struct timeval start, struct timeval end)
-{
- long long diff;
-
- diff = end.tv_usec - start.tv_usec;
- diff += (end.tv_sec - start.tv_sec) * USECS_PER_SEC;
-
- if (abs(diff - DELAY * USECS_PER_SEC) > USECS_PER_SEC / 2) {
- printf("Diff too high: %lld..", diff);
- return -1;
- }
-
- return 0;
-}
-
-static int check_itimer(int which)
-{
- int err;
- struct timeval start, end;
- struct itimerval val = {
- .it_value.tv_sec = DELAY,
- };
-
- printf("Check itimer ");
-
- if (which == ITIMER_VIRTUAL)
- printf("virtual... ");
- else if (which == ITIMER_PROF)
- printf("prof... ");
- else if (which == ITIMER_REAL)
- printf("real... ");
-
- fflush(stdout);
-
- done = 0;
-
- if (which == ITIMER_VIRTUAL)
- signal(SIGVTALRM, sig_handler);
- else if (which == ITIMER_PROF)
- signal(SIGPROF, sig_handler);
- else if (which == ITIMER_REAL)
- signal(SIGALRM, sig_handler);
-
- err = gettimeofday(&start, NULL);
- if (err < 0) {
- perror("Can't call gettimeofday()\n");
- return -1;
- }
-
- err = setitimer(which, &val, NULL);
- if (err < 0) {
- perror("Can't set timer\n");
- return -1;
- }
-
- if (which == ITIMER_VIRTUAL)
- user_loop();
- else if (which == ITIMER_PROF)
- kernel_loop();
- else if (which == ITIMER_REAL)
- idle_loop();
-
- gettimeofday(&end, NULL);
- if (err < 0) {
- perror("Can't call gettimeofday()\n");
- return -1;
- }
-
- if (!check_diff(start, end))
- printf("[OK]\n");
- else
- printf("[FAIL]\n");
-
- return 0;
-}
-
-static int check_timer_create(int which)
-{
- int err;
- timer_t id;
- struct timeval start, end;
- struct itimerspec val = {
- .it_value.tv_sec = DELAY,
- };
-
- printf("Check timer_create() ");
- if (which == CLOCK_THREAD_CPUTIME_ID) {
- printf("per thread... ");
- } else if (which == CLOCK_PROCESS_CPUTIME_ID) {
- printf("per process... ");
- }
- fflush(stdout);
-
- done = 0;
- err = timer_create(which, NULL, &id);
- if (err < 0) {
- perror("Can't create timer\n");
- return -1;
- }
- signal(SIGALRM, sig_handler);
-
- err = gettimeofday(&start, NULL);
- if (err < 0) {
- perror("Can't call gettimeofday()\n");
- return -1;
- }
-
- err = timer_settime(id, 0, &val, NULL);
- if (err < 0) {
- perror("Can't set timer\n");
- return -1;
- }
-
- user_loop();
-
- gettimeofday(&end, NULL);
- if (err < 0) {
- perror("Can't call gettimeofday()\n");
- return -1;
- }
-
- if (!check_diff(start, end))
- printf("[OK]\n");
- else
- printf("[FAIL]\n");
-
- return 0;
-}
-
-int main(int argc, char **argv)
-{
- int err;
-
- printf("Testing posix timers. False negative may happen on CPU execution \n");
- printf("based timers if other threads run on the CPU...\n");
-
- if (check_itimer(ITIMER_VIRTUAL) < 0)
- return -1;
-
- if (check_itimer(ITIMER_PROF) < 0)
- return -1;
-
- if (check_itimer(ITIMER_REAL) < 0)
- return -1;
-
- if (check_timer_create(CLOCK_THREAD_CPUTIME_ID) < 0)
- return -1;
-
- /*
- * It's unfortunately hard to reliably test a timer expiration
- * on parallel multithread cputime. We could arm it to expire
- * on DELAY * nr_threads, with nr_threads busy looping, then wait
- * the normal DELAY since the time is elapsing nr_threads faster.
- * But for that we need to ensure we have real physical free CPUs
- * to ensure true parallelism. So test only one thread until we
- * find a better solution.
- */
- if (check_timer_create(CLOCK_PROCESS_CPUTIME_ID) < 0)
- return -1;
-
- return 0;
-}
diff --git a/user/Makefile b/user/Makefile
deleted file mode 100644
index 396255b..0000000
--- a/user/Makefile
+++ /dev/null
@@ -1,13 +0,0 @@
-# Makefile for user memory selftests
-
-# No binaries, but make sure arg-less "make" doesn't trigger "run_tests"
-all:
-
-run_tests: all
- @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/vm/.gitignore b/vm/.gitignore
deleted file mode 100644
index ff1bb16..0000000
--- a/vm/.gitignore
+++ /dev/null
@@ -1,4 +0,0 @@
-hugepage-mmap
-hugepage-shm
-map_hugetlb
-thuge-gen
diff --git a/vm/Makefile b/vm/Makefile
deleted file mode 100644
index 3f94e1a..0000000
--- a/vm/Makefile
+++ /dev/null
@@ -1,15 +0,0 @@
-# Makefile for vm selftests
-
-CC = $(CROSS_COMPILE)gcc
-CFLAGS = -Wall
-BINARIES = hugepage-mmap hugepage-shm map_hugetlb thuge-gen hugetlbfstest
-
-all: $(BINARIES)
-%: %.c
- $(CC) $(CFLAGS) -o $@ $^
-
-run_tests: all
- @/bin/sh ./run_vmtests || (echo "vmtests: [FAIL]"; exit 1)
-
-clean:
- $(RM) $(BINARIES)
diff --git a/vm/hugepage-mmap.c b/vm/hugepage-mmap.c
deleted file mode 100644
index a10f310..0000000
--- a/vm/hugepage-mmap.c
+++ /dev/null
@@ -1,92 +0,0 @@
-/*
- * hugepage-mmap:
- *
- * Example of using huge page memory in a user application using the mmap
- * system call. Before running this application, make sure that the
- * administrator has mounted the hugetlbfs filesystem (on some directory
- * like /mnt) using the command mount -t hugetlbfs nodev /mnt. In this
- * example, the app is requesting memory of size 256MB that is backed by
- * huge pages.
- *
- * For the ia64 architecture, the Linux kernel reserves Region number 4 for
- * huge pages. That means that if one requires a fixed address, a huge page
- * aligned address starting with 0x800000... will be required. If a fixed
- * address is not required, the kernel will select an address in the proper
- * range.
- * Other architectures, such as ppc64, i386 or x86_64 are not so constrained.
- */
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <unistd.h>
-#include <sys/mman.h>
-#include <fcntl.h>
-
-#define FILE_NAME "huge/hugepagefile"
-#define LENGTH (256UL*1024*1024)
-#define PROTECTION (PROT_READ | PROT_WRITE)
-
-/* Only ia64 requires this */
-#ifdef __ia64__
-#define ADDR (void *)(0x8000000000000000UL)
-#define FLAGS (MAP_SHARED | MAP_FIXED)
-#else
-#define ADDR (void *)(0x0UL)
-#define FLAGS (MAP_SHARED)
-#endif
-
-static void check_bytes(char *addr)
-{
- printf("First hex is %x\n", *((unsigned int *)addr));
-}
-
-static void write_bytes(char *addr)
-{
- unsigned long i;
-
- for (i = 0; i < LENGTH; i++)
- *(addr + i) = (char)i;
-}
-
-static int read_bytes(char *addr)
-{
- unsigned long i;
-
- check_bytes(addr);
- for (i = 0; i < LENGTH; i++)
- if (*(addr + i) != (char)i) {
- printf("Mismatch at %lu\n", i);
- return 1;
- }
- return 0;
-}
-
-int main(void)
-{
- void *addr;
- int fd, ret;
-
- fd = open(FILE_NAME, O_CREAT | O_RDWR, 0755);
- if (fd < 0) {
- perror("Open failed");
- exit(1);
- }
-
- addr = mmap(ADDR, LENGTH, PROTECTION, FLAGS, fd, 0);
- if (addr == MAP_FAILED) {
- perror("mmap");
- unlink(FILE_NAME);
- exit(1);
- }
-
- printf("Returned address is %p\n", addr);
- check_bytes(addr);
- write_bytes(addr);
- ret = read_bytes(addr);
-
- munmap(addr, LENGTH);
- close(fd);
- unlink(FILE_NAME);
-
- return ret;
-}
diff --git a/vm/hugepage-shm.c b/vm/hugepage-shm.c
deleted file mode 100644
index 0d0ef4f..0000000
--- a/vm/hugepage-shm.c
+++ /dev/null
@@ -1,100 +0,0 @@
-/*
- * hugepage-shm:
- *
- * Example of using huge page memory in a user application using Sys V shared
- * memory system calls. In this example the app is requesting 256MB of
- * memory that is backed by huge pages. The application uses the flag
- * SHM_HUGETLB in the shmget system call to inform the kernel that it is
- * requesting huge pages.
- *
- * For the ia64 architecture, the Linux kernel reserves Region number 4 for
- * huge pages. That means that if one requires a fixed address, a huge page
- * aligned address starting with 0x800000... will be required. If a fixed
- * address is not required, the kernel will select an address in the proper
- * range.
- * Other architectures, such as ppc64, i386 or x86_64 are not so constrained.
- *
- * Note: The default shared memory limit is quite low on many kernels,
- * you may need to increase it via:
- *
- * echo 268435456 > /proc/sys/kernel/shmmax
- *
- * This will increase the maximum size per shared memory segment to 256MB.
- * The other limit that you will hit eventually is shmall which is the
- * total amount of shared memory in pages. To set it to 16GB on a system
- * with a 4kB pagesize do:
- *
- * echo 4194304 > /proc/sys/kernel/shmall
- */
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <sys/types.h>
-#include <sys/ipc.h>
-#include <sys/shm.h>
-#include <sys/mman.h>
-
-#ifndef SHM_HUGETLB
-#define SHM_HUGETLB 04000
-#endif
-
-#define LENGTH (256UL*1024*1024)
-
-#define dprintf(x) printf(x)
-
-/* Only ia64 requires this */
-#ifdef __ia64__
-#define ADDR (void *)(0x8000000000000000UL)
-#define SHMAT_FLAGS (SHM_RND)
-#else
-#define ADDR (void *)(0x0UL)
-#define SHMAT_FLAGS (0)
-#endif
-
-int main(void)
-{
- int shmid;
- unsigned long i;
- char *shmaddr;
-
- shmid = shmget(2, LENGTH, SHM_HUGETLB | IPC_CREAT | SHM_R | SHM_W);
- if (shmid < 0) {
- perror("shmget");
- exit(1);
- }
- printf("shmid: 0x%x\n", shmid);
-
- shmaddr = shmat(shmid, ADDR, SHMAT_FLAGS);
- if (shmaddr == (char *)-1) {
- perror("Shared memory attach failure");
- shmctl(shmid, IPC_RMID, NULL);
- exit(2);
- }
- printf("shmaddr: %p\n", shmaddr);
-
- dprintf("Starting the writes:\n");
- for (i = 0; i < LENGTH; i++) {
- shmaddr[i] = (char)(i);
- if (!(i % (1024 * 1024)))
- dprintf(".");
- }
- dprintf("\n");
-
- dprintf("Starting the Check...");
- for (i = 0; i < LENGTH; i++)
- if (shmaddr[i] != (char)i) {
- printf("\nIndex %lu mismatched\n", i);
- exit(3);
- }
- dprintf("Done.\n");
-
- if (shmdt((const void *)shmaddr) != 0) {
- perror("Detach failure");
- shmctl(shmid, IPC_RMID, NULL);
- exit(4);
- }
-
- shmctl(shmid, IPC_RMID, NULL);
-
- return 0;
-}
diff --git a/vm/hugetlbfstest.c b/vm/hugetlbfstest.c
deleted file mode 100644
index ea40ff8..0000000
--- a/vm/hugetlbfstest.c
+++ /dev/null
@@ -1,84 +0,0 @@
-#define _GNU_SOURCE
-#include <assert.h>
-#include <fcntl.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <sys/mman.h>
-#include <sys/stat.h>
-#include <sys/types.h>
-#include <unistd.h>
-
-typedef unsigned long long u64;
-
-static size_t length = 1 << 24;
-
-static u64 read_rss(void)
-{
- char buf[4096], *s = buf;
- int i, fd;
- u64 rss;
-
- fd = open("/proc/self/statm", O_RDONLY);
- assert(fd > 2);
- memset(buf, 0, sizeof(buf));
- read(fd, buf, sizeof(buf) - 1);
- for (i = 0; i < 1; i++)
- s = strchr(s, ' ') + 1;
- rss = strtoull(s, NULL, 10);
- return rss << 12; /* assumes 4k pagesize */
-}
-
-static void do_mmap(int fd, int extra_flags, int unmap)
-{
- int *p;
- int flags = MAP_PRIVATE | MAP_POPULATE | extra_flags;
- u64 before, after;
-
- before = read_rss();
- p = mmap(NULL, length, PROT_READ | PROT_WRITE, flags, fd, 0);
- assert(p != MAP_FAILED ||
- !"mmap returned an unexpected error");
- after = read_rss();
- assert(llabs(after - before - length) < 0x40000 ||
- !"rss didn't grow as expected");
- if (!unmap)
- return;
- munmap(p, length);
- after = read_rss();
- assert(llabs(after - before) < 0x40000 ||
- !"rss didn't shrink as expected");
-}
-
-static int open_file(const char *path)
-{
- int fd, err;
-
- unlink(path);
- fd = open(path, O_CREAT | O_RDWR | O_TRUNC | O_EXCL
- | O_LARGEFILE | O_CLOEXEC, 0600);
- assert(fd > 2);
- unlink(path);
- err = ftruncate(fd, length);
- assert(!err);
- return fd;
-}
-
-int main(void)
-{
- int hugefd, fd;
-
- fd = open_file("/dev/shm/hugetlbhog");
- hugefd = open_file("/hugepages/hugetlbhog");
-
- system("echo 100 > /proc/sys/vm/nr_hugepages");
- do_mmap(-1, MAP_ANONYMOUS, 1);
- do_mmap(fd, 0, 1);
- do_mmap(-1, MAP_ANONYMOUS | MAP_HUGETLB, 1);
- do_mmap(hugefd, 0, 1);
- do_mmap(hugefd, MAP_HUGETLB, 1);
- /* Leak the last one to test do_exit() */
- do_mmap(-1, MAP_ANONYMOUS | MAP_HUGETLB, 0);
- printf("oll korrekt.\n");
- return 0;
-}
diff --git a/vm/map_hugetlb.c b/vm/map_hugetlb.c
deleted file mode 100644
index ac56639..0000000
--- a/vm/map_hugetlb.c
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
- * Example of using hugepage memory in a user application using the mmap
- * system call with MAP_HUGETLB flag. Before running this program make
- * sure the administrator has allocated enough default sized huge pages
- * to cover the 256 MB allocation.
- *
- * For ia64 architecture, Linux kernel reserves Region number 4 for hugepages.
- * That means the addresses starting with 0x800000... will need to be
- * specified. Specifying a fixed address is not required on ppc64, i386
- * or x86_64.
- */
-#include <stdlib.h>
-#include <stdio.h>
-#include <unistd.h>
-#include <sys/mman.h>
-#include <fcntl.h>
-
-#define LENGTH (256UL*1024*1024)
-#define PROTECTION (PROT_READ | PROT_WRITE)
-
-#ifndef MAP_HUGETLB
-#define MAP_HUGETLB 0x40000 /* arch specific */
-#endif
-
-/* Only ia64 requires this */
-#ifdef __ia64__
-#define ADDR (void *)(0x8000000000000000UL)
-#define FLAGS (MAP_PRIVATE | MAP_ANONYMOUS | MAP_HUGETLB | MAP_FIXED)
-#else
-#define ADDR (void *)(0x0UL)
-#define FLAGS (MAP_PRIVATE | MAP_ANONYMOUS | MAP_HUGETLB)
-#endif
-
-static void check_bytes(char *addr)
-{
- printf("First hex is %x\n", *((unsigned int *)addr));
-}
-
-static void write_bytes(char *addr)
-{
- unsigned long i;
-
- for (i = 0; i < LENGTH; i++)
- *(addr + i) = (char)i;
-}
-
-static int read_bytes(char *addr)
-{
- unsigned long i;
-
- check_bytes(addr);
- for (i = 0; i < LENGTH; i++)
- if (*(addr + i) != (char)i) {
- printf("Mismatch at %lu\n", i);
- return 1;
- }
- return 0;
-}
-
-int main(void)
-{
- void *addr;
- int ret;
-
- addr = mmap(ADDR, LENGTH, PROTECTION, FLAGS, 0, 0);
- if (addr == MAP_FAILED) {
- perror("mmap");
- exit(1);
- }
-
- printf("Returned address is %p\n", addr);
- check_bytes(addr);
- write_bytes(addr);
- ret = read_bytes(addr);
-
- munmap(addr, LENGTH);
-
- return ret;
-}
diff --git a/vm/run_vmtests b/vm/run_vmtests
deleted file mode 100644
index c87b681..0000000
--- a/vm/run_vmtests
+++ /dev/null
@@ -1,93 +0,0 @@
-#!/bin/bash
-#please run as root
-
-#we need 256M, below is the size in kB
-needmem=262144
-mnt=./huge
-exitcode=0
-
-#get pagesize and freepages from /proc/meminfo
-while read name size unit; do
- if [ "$name" = "HugePages_Free:" ]; then
- freepgs=$size
- fi
- if [ "$name" = "Hugepagesize:" ]; then
- pgsize=$size
- fi
-done < /proc/meminfo
-
-#set proper nr_hugepages
-if [ -n "$freepgs" ] && [ -n "$pgsize" ]; then
- nr_hugepgs=`cat /proc/sys/vm/nr_hugepages`
- needpgs=`expr $needmem / $pgsize`
- if [ $freepgs -lt $needpgs ]; then
- lackpgs=$(( $needpgs - $freepgs ))
- echo $(( $lackpgs + $nr_hugepgs )) > /proc/sys/vm/nr_hugepages
- if [ $? -ne 0 ]; then
- echo "Please run this test as root"
- exit 1
- fi
- fi
-else
- echo "no hugetlbfs support in kernel?"
- exit 1
-fi
-
-mkdir $mnt
-mount -t hugetlbfs none $mnt
-
-echo "--------------------"
-echo "running hugepage-mmap"
-echo "--------------------"
-./hugepage-mmap
-if [ $? -ne 0 ]; then
- echo "[FAIL]"
- exitcode=1
-else
- echo "[PASS]"
-fi
-
-shmmax=`cat /proc/sys/kernel/shmmax`
-shmall=`cat /proc/sys/kernel/shmall`
-echo 268435456 > /proc/sys/kernel/shmmax
-echo 4194304 > /proc/sys/kernel/shmall
-echo "--------------------"
-echo "running hugepage-shm"
-echo "--------------------"
-./hugepage-shm
-if [ $? -ne 0 ]; then
- echo "[FAIL]"
- exitcode=1
-else
- echo "[PASS]"
-fi
-echo $shmmax > /proc/sys/kernel/shmmax
-echo $shmall > /proc/sys/kernel/shmall
-
-echo "--------------------"
-echo "running map_hugetlb"
-echo "--------------------"
-./map_hugetlb
-if [ $? -ne 0 ]; then
- echo "[FAIL]"
- exitcode=1
-else
- echo "[PASS]"
-fi
-
-echo "--------------------"
-echo "running hugetlbfstest"
-echo "--------------------"
-./hugetlbfstest
-if [ $? -ne 0 ]; then
- echo "[FAIL]"
- exitcode=1
-else
- echo "[PASS]"
-fi
-
-#cleanup
-umount $mnt
-rm -rf $mnt
-echo $nr_hugepgs > /proc/sys/vm/nr_hugepages
-exit $exitcode
diff --git a/vm/thuge-gen.c b/vm/thuge-gen.c
deleted file mode 100644
index c879572..0000000
--- a/vm/thuge-gen.c
+++ /dev/null
@@ -1,254 +0,0 @@
-/* Test selecting other page sizes for mmap/shmget.
-
- Before running this huge pages for each huge page size must have been
- reserved.
- For large pages beyond MAX_ORDER (like 1GB on x86) boot options must be used.
- Also shmmax must be increased.
- And you need to run as root to work around some weird permissions in shm.
- And nothing using huge pages should run in parallel.
- When the program aborts you may need to clean up the shm segments with
- ipcrm -m by hand, like this
- sudo ipcs | awk '$1 == "0x00000000" {print $2}' | xargs -n1 sudo ipcrm -m
- (warning this will remove all if someone else uses them) */
-
-#define _GNU_SOURCE 1
-#include <sys/mman.h>
-#include <stdlib.h>
-#include <stdio.h>
-#include <sys/ipc.h>
-#include <sys/shm.h>
-#include <sys/stat.h>
-#include <glob.h>
-#include <assert.h>
-#include <unistd.h>
-#include <stdarg.h>
-#include <string.h>
-
-#define err(x) perror(x), exit(1)
-
-#define MAP_HUGE_2MB (21 << MAP_HUGE_SHIFT)
-#define MAP_HUGE_1GB (30 << MAP_HUGE_SHIFT)
-#define MAP_HUGE_SHIFT 26
-#define MAP_HUGE_MASK 0x3f
-#define MAP_HUGETLB 0x40000
-
-#define SHM_HUGETLB 04000 /* segment will use huge TLB pages */
-#define SHM_HUGE_SHIFT 26
-#define SHM_HUGE_MASK 0x3f
-#define SHM_HUGE_2MB (21 << SHM_HUGE_SHIFT)
-#define SHM_HUGE_1GB (30 << SHM_HUGE_SHIFT)
-
-#define NUM_PAGESIZES 5
-
-#define NUM_PAGES 4
-
-#define Dprintf(fmt...) // printf(fmt)
-
-unsigned long page_sizes[NUM_PAGESIZES];
-int num_page_sizes;
-
-int ilog2(unsigned long v)
-{
- int l = 0;
- while ((1UL << l) < v)
- l++;
- return l;
-}
-
-void find_pagesizes(void)
-{
- glob_t g;
- int i;
- glob("/sys/kernel/mm/hugepages/hugepages-*kB", 0, NULL, &g);
- assert(g.gl_pathc <= NUM_PAGESIZES);
- for (i = 0; i < g.gl_pathc; i++) {
- sscanf(g.gl_pathv[i], "/sys/kernel/mm/hugepages/hugepages-%lukB",
- &page_sizes[i]);
- page_sizes[i] <<= 10;
- printf("Found %luMB\n", page_sizes[i] >> 20);
- }
- num_page_sizes = g.gl_pathc;
- globfree(&g);
-}
-
-unsigned long default_huge_page_size(void)
-{
- unsigned long hps = 0;
- char *line = NULL;
- size_t linelen = 0;
- FILE *f = fopen("/proc/meminfo", "r");
- if (!f)
- return 0;
- while (getline(&line, &linelen, f) > 0) {
- if (sscanf(line, "Hugepagesize: %lu kB", &hps) == 1) {
- hps <<= 10;
- break;
- }
- }
- free(line);
- return hps;
-}
-
-void show(unsigned long ps)
-{
- char buf[100];
- if (ps == getpagesize())
- return;
- printf("%luMB: ", ps >> 20);
- fflush(stdout);
- snprintf(buf, sizeof buf,
- "cat /sys/kernel/mm/hugepages/hugepages-%lukB/free_hugepages",
- ps >> 10);
- system(buf);
-}
-
-unsigned long read_sysfs(int warn, char *fmt, ...)
-{
- char *line = NULL;
- size_t linelen = 0;
- char buf[100];
- FILE *f;
- va_list ap;
- unsigned long val = 0;
-
- va_start(ap, fmt);
- vsnprintf(buf, sizeof buf, fmt, ap);
- va_end(ap);
-
- f = fopen(buf, "r");
- if (!f) {
- if (warn)
- printf("missing %s\n", buf);
- return 0;
- }
- if (getline(&line, &linelen, f) > 0) {
- sscanf(line, "%lu", &val);
- }
- fclose(f);
- free(line);
- return val;
-}
-
-unsigned long read_free(unsigned long ps)
-{
- return read_sysfs(ps != getpagesize(),
- "/sys/kernel/mm/hugepages/hugepages-%lukB/free_hugepages",
- ps >> 10);
-}
-
-void test_mmap(unsigned long size, unsigned flags)
-{
- char *map;
- unsigned long before, after;
- int err;
-
- before = read_free(size);
- map = mmap(NULL, size*NUM_PAGES, PROT_READ|PROT_WRITE,
- MAP_PRIVATE|MAP_ANONYMOUS|MAP_HUGETLB|flags, 0, 0);
-
- if (map == (char *)-1) err("mmap");
- memset(map, 0xff, size*NUM_PAGES);
- after = read_free(size);
- Dprintf("before %lu after %lu diff %ld size %lu\n",
- before, after, before - after, size);
- assert(size == getpagesize() || (before - after) == NUM_PAGES);
- show(size);
- err = munmap(map, size);
- assert(!err);
-}
-
-void test_shmget(unsigned long size, unsigned flags)
-{
- int id;
- unsigned long before, after;
- int err;
-
- before = read_free(size);
- id = shmget(IPC_PRIVATE, size * NUM_PAGES, IPC_CREAT|0600|flags);
- if (id < 0) err("shmget");
-
- struct shm_info i;
- if (shmctl(id, SHM_INFO, (void *)&i) < 0) err("shmctl");
- Dprintf("alloc %lu res %lu\n", i.shm_tot, i.shm_rss);
-
-
- Dprintf("id %d\n", id);
- char *map = shmat(id, NULL, 0600);
- if (map == (char*)-1) err("shmat");
-
- shmctl(id, IPC_RMID, NULL);
-
- memset(map, 0xff, size*NUM_PAGES);
- after = read_free(size);
-
- Dprintf("before %lu after %lu diff %ld size %lu\n",
- before, after, before - after, size);
- assert(size == getpagesize() || (before - after) == NUM_PAGES);
- show(size);
- err = shmdt(map);
- assert(!err);
-}
-
-void sanity_checks(void)
-{
- int i;
- unsigned long largest = getpagesize();
-
- for (i = 0; i < num_page_sizes; i++) {
- if (page_sizes[i] > largest)
- largest = page_sizes[i];
-
- if (read_free(page_sizes[i]) < NUM_PAGES) {
- printf("Not enough huge pages for page size %lu MB, need %u\n",
- page_sizes[i] >> 20,
- NUM_PAGES);
- exit(0);
- }
- }
-
- if (read_sysfs(0, "/proc/sys/kernel/shmmax") < NUM_PAGES * largest) {
- printf("Please do echo %lu > /proc/sys/kernel/shmmax", largest * NUM_PAGES);
- exit(0);
- }
-
-#if defined(__x86_64__)
- if (largest != 1U<<30) {
- printf("No GB pages available on x86-64\n"
- "Please boot with hugepagesz=1G hugepages=%d\n", NUM_PAGES);
- exit(0);
- }
-#endif
-}
-
-int main(void)
-{
- int i;
- unsigned default_hps = default_huge_page_size();
-
- find_pagesizes();
-
- sanity_checks();
-
- for (i = 0; i < num_page_sizes; i++) {
- unsigned long ps = page_sizes[i];
- int arg = ilog2(ps) << MAP_HUGE_SHIFT;
- printf("Testing %luMB mmap with shift %x\n", ps >> 20, arg);
- test_mmap(ps, MAP_HUGETLB | arg);
- }
- printf("Testing default huge mmap\n");
- test_mmap(default_hps, SHM_HUGETLB);
-
- puts("Testing non-huge shmget");
- test_shmget(getpagesize(), 0);
-
- for (i = 0; i < num_page_sizes; i++) {
- unsigned long ps = page_sizes[i];
- int arg = ilog2(ps) << SHM_HUGE_SHIFT;
- printf("Testing %luMB shmget with shift %x\n", ps >> 20, arg);
- test_shmget(ps, SHM_HUGETLB | arg);
- }
- puts("default huge shmget");
- test_shmget(default_hps, SHM_HUGETLB);
-
- return 0;
-}