* [RESEND][PATCH 1/2] stacktrace: add saved stack traces to backtrace self-test
@ 2008-06-27 16:04 Vegard Nossum
2008-06-27 16:08 ` Ingo Molnar
0 siblings, 1 reply; 5+ messages in thread
From: Vegard Nossum @ 2008-06-27 16:04 UTC (permalink / raw)
To: Andrew Morton, Ingo Molnar; +Cc: Arjan van de Ven, linux-kernel
Hi,
I'm not really sure to whom this goes. It seems that the original code
came through the x86 tree, although the code itself seems to be
entirely generic.
(The last time I sent it, it was to Andrew only, though he seemed to
be on holidays at the time. Now I have a patch #2 as well!)
Arjan, are there any objections to this?
(This is not intended for 2.6.26. In case that wasn't obvious, heh.)
Vegard
From: Vegard Nossum <vegard.nossum@gmail.com>
Date: Thu, 26 Jun 2008 13:27:35 +0200
Subject: [PATCH] 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>
---
kernel/backtracetest.c | 30 +++++++++++++++++++++++++++++-
lib/Kconfig.debug | 3 +++
2 files changed, 32 insertions(+), 1 deletions(-)
diff --git a/kernel/backtracetest.c b/kernel/backtracetest.c
index d1a7605..50f7abd 100644
--- a/kernel/backtracetest.c
+++ b/kernel/backtracetest.c
@@ -10,9 +10,10 @@
* of the License.
*/
+#include <linux/delay.h>
#include <linux/module.h>
#include <linux/sched.h>
-#include <linux/delay.h>
+#include <linux/stacktrace.h>
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");
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)
{
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");
dump_stack();
+ backtrace_test_saved();
+
init_timer(&backtrace_timer);
backtrace_timer.function = backtrace_test_timer;
mod_timer(&backtrace_timer, jiffies + 10);
diff --git a/lib/Kconfig.debug b/lib/Kconfig.debug
index d2099f4..4dac3c7 100644
--- a/lib/Kconfig.debug
+++ b/lib/Kconfig.debug
@@ -563,6 +563,9 @@ config BACKTRACE_SELF_TEST
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.
config LKDTM
--
1.5.4.1
^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [RESEND][PATCH 1/2] stacktrace: add saved stack traces to backtrace self-test
2008-06-27 16:04 [RESEND][PATCH 1/2] stacktrace: add saved stack traces to backtrace self-test Vegard Nossum
@ 2008-06-27 16:08 ` Ingo Molnar
2008-06-27 19:20 ` Ingo Molnar
0 siblings, 1 reply; 5+ messages in thread
From: Ingo Molnar @ 2008-06-27 16:08 UTC (permalink / raw)
To: Vegard Nossum; +Cc: Andrew Morton, Arjan van de Ven, linux-kernel
* Vegard Nossum <vegard.nossum@gmail.com> wrote:
> Hi,
>
> I'm not really sure to whom this goes. It seems that the original code
> came through the x86 tree, although the code itself seems to be
> entirely generic.
given that i've written the generic stacktrace code for lockdep, i guess
it comes to me - the only question would be into which branch ;-)
fortunately there's already a tip/core/stacktrace topic, hosting a
change for you as well:
Ingo Molnar (1):
debugging: make stacktrace independent from DEBUG_KERNEL
Johannes Berg (1):
stacktrace: don't crash on invalid stack trace structs
Vegard Nossum (1):
stacktrace: print_stack_trace() cleanup
i'll queue this one up there.
Ingo
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [RESEND][PATCH 1/2] stacktrace: add saved stack traces to backtrace self-test
2008-06-27 16:08 ` Ingo Molnar
@ 2008-06-27 19:20 ` Ingo Molnar
2008-06-27 19:29 ` Vegard Nossum
0 siblings, 1 reply; 5+ messages in thread
From: Ingo Molnar @ 2008-06-27 19:20 UTC (permalink / raw)
To: Vegard Nossum; +Cc: Andrew Morton, Arjan van de Ven, linux-kernel
FYI, it needed the fixlet below.
Ingo
------------->
commit 7bcebd2e3ee8435e2ff0f674a409f46961fda3cc
Author: Ingo Molnar <mingo@elte.hu>
Date: Fri Jun 27 21:20:17 2008 +0200
stacktrace: export print_stack_trace and save_stack_trace
fix:
ERROR: "print_stack_trace" [kernel/backtracetest.ko] undefined!
ERROR: "save_stack_trace" [kernel/backtracetest.ko] undefined!
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Conflicts:
Signed-off-by: Ingo Molnar <mingo@elte.hu>
diff --git a/arch/x86/kernel/stacktrace.c b/arch/x86/kernel/stacktrace.c
index c28c342..b7b483b 100644
--- a/arch/x86/kernel/stacktrace.c
+++ b/arch/x86/kernel/stacktrace.c
@@ -74,10 +74,4 @@ void save_stack_trace(struct stack_trace *trace)
if (trace->nr_entries < trace->max_entries)
trace->entries[trace->nr_entries++] = ULONG_MAX;
}
-
-void save_stack_trace_tsk(struct task_struct *tsk, struct stack_trace *trace)
-{
- dump_trace(tsk, NULL, NULL, 0, &save_stack_ops_nosched, trace);
- if (trace->nr_entries < trace->max_entries)
- trace->entries[trace->nr_entries++] = ULONG_MAX;
-}
+EXPORT_SYMBOL_GPL(save_stack_trace);
diff --git a/kernel/stacktrace.c b/kernel/stacktrace.c
index 7eaea9d..eda2f4c 100644
--- a/kernel/stacktrace.c
+++ b/kernel/stacktrace.c
@@ -21,4 +21,5 @@ void print_stack_trace(struct stack_trace *trace, int spaces)
print_ip_sym(trace->entries[i]);
}
}
+EXPORT_SYMBOL_GPL(print_stack_trace);
^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [RESEND][PATCH 1/2] stacktrace: add saved stack traces to backtrace self-test
2008-06-27 19:20 ` Ingo Molnar
@ 2008-06-27 19:29 ` Vegard Nossum
2008-06-30 7:01 ` Ingo Molnar
0 siblings, 1 reply; 5+ messages in thread
From: Vegard Nossum @ 2008-06-27 19:29 UTC (permalink / raw)
To: Ingo Molnar; +Cc: Andrew Morton, Arjan van de Ven, linux-kernel
On Fri, Jun 27, 2008 at 9:20 PM, Ingo Molnar <mingo@elte.hu> wrote:
>
> FYI, it needed the fixlet below.
>
> Ingo
>
Oh. I'm sorry :-(
(I'll admit that I've never worked with modules before. I'll try to
remember now.)
> ------------->
> commit 7bcebd2e3ee8435e2ff0f674a409f46961fda3cc
> Author: Ingo Molnar <mingo@elte.hu>
> Date: Fri Jun 27 21:20:17 2008 +0200
>
> stacktrace: export print_stack_trace and save_stack_trace
>
> fix:
>
> ERROR: "print_stack_trace" [kernel/backtracetest.ko] undefined!
> ERROR: "save_stack_trace" [kernel/backtracetest.ko] undefined!
>
> Signed-off-by: Ingo Molnar <mingo@elte.hu>
>
> Conflicts:
>
> Signed-off-by: Ingo Molnar <mingo@elte.hu>
>
> diff --git a/arch/x86/kernel/stacktrace.c b/arch/x86/kernel/stacktrace.c
> index c28c342..b7b483b 100644
> --- a/arch/x86/kernel/stacktrace.c
> +++ b/arch/x86/kernel/stacktrace.c
> @@ -74,10 +74,4 @@ void save_stack_trace(struct stack_trace *trace)
> if (trace->nr_entries < trace->max_entries)
> trace->entries[trace->nr_entries++] = ULONG_MAX;
> }
> -
> -void save_stack_trace_tsk(struct task_struct *tsk, struct stack_trace *trace)
> -{
> - dump_trace(tsk, NULL, NULL, 0, &save_stack_ops_nosched, trace);
> - if (trace->nr_entries < trace->max_entries)
> - trace->entries[trace->nr_entries++] = ULONG_MAX;
> -}
Why is this removed, though? (It seems unrelated, and that's a useful function.)
Vegard
--
"The animistic metaphor of the bug that maliciously sneaked in while
the programmer was not looking is intellectually dishonest as it
disguises that the error is the programmer's own creation."
-- E. W. Dijkstra, EWD1036
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [RESEND][PATCH 1/2] stacktrace: add saved stack traces to backtrace self-test
2008-06-27 19:29 ` Vegard Nossum
@ 2008-06-30 7:01 ` Ingo Molnar
0 siblings, 0 replies; 5+ messages in thread
From: Ingo Molnar @ 2008-06-30 7:01 UTC (permalink / raw)
To: Vegard Nossum; +Cc: Andrew Morton, Arjan van de Ven, linux-kernel
* Vegard Nossum <vegard.nossum@gmail.com> wrote:
> On Fri, Jun 27, 2008 at 9:20 PM, Ingo Molnar <mingo@elte.hu> wrote:
> >
> > FYI, it needed the fixlet below.
> >
> > Ingo
> >
>
> Oh. I'm sorry :-(
>
> (I'll admit that I've never worked with modules before. I'll try to
> remember now.)
i too work with bzImages most of the time. They are convenient
single-file objects that are easy to distribute and easy to use, and
they also have no Linux-distribution-flavor dependencies. (module load
order can be influenced by things like /etc/modprobe.conf and other
details - make reproduction harder and testing less conclusive, etc.)
> > ------------->
> > commit 7bcebd2e3ee8435e2ff0f674a409f46961fda3cc
> > Author: Ingo Molnar <mingo@elte.hu>
> > Date: Fri Jun 27 21:20:17 2008 +0200
> >
> > stacktrace: export print_stack_trace and save_stack_trace
> >
> > fix:
> >
> > ERROR: "print_stack_trace" [kernel/backtracetest.ko] undefined!
> > ERROR: "save_stack_trace" [kernel/backtracetest.ko] undefined!
> >
> > Signed-off-by: Ingo Molnar <mingo@elte.hu>
> >
> > Conflicts:
> >
> > Signed-off-by: Ingo Molnar <mingo@elte.hu>
> >
> > diff --git a/arch/x86/kernel/stacktrace.c b/arch/x86/kernel/stacktrace.c
> > index c28c342..b7b483b 100644
> > --- a/arch/x86/kernel/stacktrace.c
> > +++ b/arch/x86/kernel/stacktrace.c
> > @@ -74,10 +74,4 @@ void save_stack_trace(struct stack_trace *trace)
> > if (trace->nr_entries < trace->max_entries)
> > trace->entries[trace->nr_entries++] = ULONG_MAX;
> > }
> > -
> > -void save_stack_trace_tsk(struct task_struct *tsk, struct stack_trace *trace)
> > -{
> > - dump_trace(tsk, NULL, NULL, 0, &save_stack_ops_nosched, trace);
> > - if (trace->nr_entries < trace->max_entries)
> > - trace->entries[trace->nr_entries++] = ULONG_MAX;
> > -}
>
> Why is this removed, though? (It seems unrelated, and that's a useful
> function.)
that was an oversight - thanks - fixed it - updated commit below.
Ingo
---------------->
commit a73d1be0974856741a258928966b8a03ae6bb74f
Author: Ingo Molnar <mingo@elte.hu>
Date: Fri Jun 27 21:20:17 2008 +0200
stacktrace: fix modular build, export print_stack_trace and save_stack_trace
fix:
ERROR: "print_stack_trace" [kernel/backtracetest.ko] undefined!
ERROR: "save_stack_trace" [kernel/backtracetest.ko] undefined!
Signed-off-by: Ingo Molnar <mingo@elte.hu>
and fix:
Building modules, stage 2.
MODPOST 376 modules
ERROR: "print_stack_trace" [kernel/backtracetest.ko] undefined!
make[1]: *** [__modpost] Error 1
Signed-off-by: Ingo Molnar <mingo@elte.hu>
diff --git a/arch/x86/kernel/stacktrace.c b/arch/x86/kernel/stacktrace.c
index c28c342..a03e7f6 100644
--- a/arch/x86/kernel/stacktrace.c
+++ b/arch/x86/kernel/stacktrace.c
@@ -74,6 +74,7 @@ void save_stack_trace(struct stack_trace *trace)
if (trace->nr_entries < trace->max_entries)
trace->entries[trace->nr_entries++] = ULONG_MAX;
}
+EXPORT_SYMBOL_GPL(save_stack_trace);
void save_stack_trace_tsk(struct task_struct *tsk, struct stack_trace *trace)
{
@@ -81,3 +82,4 @@ void save_stack_trace_tsk(struct task_struct *tsk, struct stack_trace *trace)
if (trace->nr_entries < trace->max_entries)
trace->entries[trace->nr_entries++] = ULONG_MAX;
}
+EXPORT_SYMBOL_GPL(save_stack_trace_tsk);
diff --git a/kernel/stacktrace.c b/kernel/stacktrace.c
index 7eaea9d..94b527e 100644
--- a/kernel/stacktrace.c
+++ b/kernel/stacktrace.c
@@ -6,6 +6,7 @@
* Copyright (C) 2006 Red Hat, Inc., Ingo Molnar <mingo@redhat.com>
*/
#include <linux/sched.h>
+#include <linux/module.h>
#include <linux/kallsyms.h>
#include <linux/stacktrace.h>
@@ -21,4 +22,5 @@ void print_stack_trace(struct stack_trace *trace, int spaces)
print_ip_sym(trace->entries[i]);
}
}
+EXPORT_SYMBOL_GPL(print_stack_trace);
^ permalink raw reply related [flat|nested] 5+ messages in thread
end of thread, other threads:[~2008-06-30 7:02 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-06-27 16:04 [RESEND][PATCH 1/2] stacktrace: add saved stack traces to backtrace self-test Vegard Nossum
2008-06-27 16:08 ` Ingo Molnar
2008-06-27 19:20 ` Ingo Molnar
2008-06-27 19:29 ` Vegard Nossum
2008-06-30 7:01 ` Ingo Molnar
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.