stacktrace: add saved stack traces to backtrace self-test

This patch adds saved stack-traces to the backtrace suite of self-tests.

Note that we don't depend on or unconditionally enable CONFIG_STACKTRACE
because not all architectures may have it (and we still want to enable the
other tests for those architectures).

Cc: Arjan van de Ven <arjan@infradead.org>
Signed-off-by: Vegard Nossum <vegard.nossum@gmail.com>
Cc: Arjan van de Ven <arjan@infradead.org>
Cc: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
This commit is contained in:
Vegard Nossum 2008-06-27 18:04:48 +02:00 committed by Ingo Molnar
parent a5a242dcee
commit ad118c54a3
2 changed files with 32 additions and 1 deletions

View File

@ -10,9 +10,10 @@
* of the License. * of the License.
*/ */
#include <linux/delay.h>
#include <linux/module.h> #include <linux/module.h>
#include <linux/sched.h> #include <linux/sched.h>
#include <linux/delay.h> #include <linux/stacktrace.h>
static struct timer_list backtrace_timer; static struct timer_list backtrace_timer;
@ -22,6 +23,31 @@ static void backtrace_test_timer(unsigned long data)
printk("The following trace is a kernel self test and not a bug!\n"); printk("The following trace is a kernel self test and not a bug!\n");
dump_stack(); dump_stack();
} }
#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) static int backtrace_regression_test(void)
{ {
printk("====[ backtrace testing ]===========\n"); printk("====[ backtrace testing ]===========\n");
@ -29,6 +55,8 @@ static int backtrace_regression_test(void)
printk("The following trace is a kernel self test and not a bug!\n"); printk("The following trace is a kernel self test and not a bug!\n");
dump_stack(); dump_stack();
backtrace_test_saved();
init_timer(&backtrace_timer); init_timer(&backtrace_timer);
backtrace_timer.function = backtrace_test_timer; backtrace_timer.function = backtrace_test_timer;
mod_timer(&backtrace_timer, jiffies + 10); mod_timer(&backtrace_timer, jiffies + 10);

View File

@ -562,6 +562,9 @@ config BACKTRACE_SELF_TEST
for distributions or general kernels, but only for kernel for distributions or general kernels, but only for kernel
developers working on architecture code. 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. Say N if you are unsure.
config LKDTM config LKDTM