diff options
author | Ananth N Mavinakayanahalli <ananth@in.ibm.com> | 2008-07-28 23:33:09 +0530 |
---|---|---|
committer | Sam Ravnborg <sam@ravnborg.org> | 2008-07-28 21:40:03 +0200 |
commit | 94a97a3018e55a27d1c29e011b3c38fee01a967f (patch) | |
tree | ce1edbc48bc78202cc58a6e288fa1e0f83da3e0b /tests | |
parent | 4fb97424637787ef193977cdd4ac95e9b18602e2 (diff) |
Move backtrace selftests to tests/
Move backtrace selftests to tests/
Signed-off-by: Ananth N Mavinakayanahalli <ananth@in.ibm.com>
Signed-off-by: Sam Ravnborg <sam@ravnborg.org>
Diffstat (limited to 'tests')
-rw-r--r-- | tests/Kconfig | 15 | ||||
-rw-r--r-- | tests/Makefile | 1 | ||||
-rw-r--r-- | tests/backtracetest.c | 91 |
3 files changed, 107 insertions, 0 deletions
diff --git a/tests/Kconfig b/tests/Kconfig index 15ad628bb6fa..2432161f0694 100644 --- a/tests/Kconfig +++ b/tests/Kconfig @@ -83,4 +83,19 @@ config KPROBES_SANITY_TEST Say N if you are unsure. +config BACKTRACE_SELF_TEST + tristate "Self test for the backtrace code" + depends on DEBUG_KERNEL + default n + help + This option provides a kernel module that can be used to test + the kernel stack backtrace code. This option is not useful + for distributions or general kernels, but only for kernel + developers working on architecture code. + + Note that if you want to also test saved backtraces, you will + have to enable STACKTRACE as well. + + Say N if you are unsure. + endif # KERNEL_TESTS diff --git a/tests/Makefile b/tests/Makefile index 455cd12c607c..1d56a9ea5993 100644 --- a/tests/Makefile +++ b/tests/Makefile @@ -7,3 +7,4 @@ obj-$(CONFIG_RCU_TORTURE_TEST) += rcutorture.o obj-$(CONFIG_RT_MUTEX_TESTER) += rtmutex-tester.o obj-$(CONFIG_LKDTM) += lkdtm.o obj-$(CONFIG_KPROBES_SANITY_TEST) += test_kprobes.o +obj-$(CONFIG_BACKTRACE_SELF_TEST) += backtracetest.o diff --git a/tests/backtracetest.c b/tests/backtracetest.c new file mode 100644 index 000000000000..a5e026bc45c4 --- /dev/null +++ b/tests/backtracetest.c @@ -0,0 +1,91 @@ +/* + * Simple stack backtrace regression test module + * + * (C) Copyright 2008 Intel Corporation + * Author: Arjan van de Ven <arjan@linux.intel.com> + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; version 2 + * of the License. + */ + +#include <linux/completion.h> +#include <linux/delay.h> +#include <linux/interrupt.h> +#include <linux/module.h> +#include <linux/sched.h> +#include <linux/stacktrace.h> + +static void backtrace_test_normal(void) +{ + printk("Testing a backtrace from process context.\n"); + printk("The following trace is a kernel self test and not a bug!\n"); + + dump_stack(); +} + +static DECLARE_COMPLETION(backtrace_work); + +static void backtrace_test_irq_callback(unsigned long data) +{ + dump_stack(); + complete(&backtrace_work); +} + +static DECLARE_TASKLET(backtrace_tasklet, &backtrace_test_irq_callback, 0); + +static void backtrace_test_irq(void) +{ + printk("Testing a backtrace from irq context.\n"); + printk("The following trace is a kernel self test and not a bug!\n"); + + init_completion(&backtrace_work); + tasklet_schedule(&backtrace_tasklet); + wait_for_completion(&backtrace_work); +} + +#ifdef CONFIG_STACKTRACE +static void backtrace_test_saved(void) +{ + struct stack_trace trace; + unsigned long entries[8]; + + printk("Testing a saved backtrace.\n"); + printk("The following trace is a kernel self test and not a bug!\n"); + + trace.nr_entries = 0; + trace.max_entries = ARRAY_SIZE(entries); + trace.entries = entries; + trace.skip = 0; + + save_stack_trace(&trace); + print_stack_trace(&trace, 0); +} +#else +static void backtrace_test_saved(void) +{ + printk("Saved backtrace test skipped.\n"); +} +#endif + +static int backtrace_regression_test(void) +{ + printk("====[ backtrace testing ]===========\n"); + + backtrace_test_normal(); + backtrace_test_irq(); + backtrace_test_saved(); + + printk("====[ end of backtrace testing ]====\n"); + return 0; +} + +static void exitf(void) +{ +} + +module_init(backtrace_regression_test); +module_exit(exitf); +MODULE_LICENSE("GPL"); +MODULE_AUTHOR("Arjan van de Ven <arjan@linux.intel.com>"); |