git://git.onelab.eu
/
linux-2.6.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Fedora kernel-2.6.17-1.2142_FC4 patched with stable patch-2.6.17.4-vs2.0.2-rc26.diff
[linux-2.6.git]
/
arch
/
um
/
kernel
/
sysrq.c
diff --git
a/arch/um/kernel/sysrq.c
b/arch/um/kernel/sysrq.c
index
e630438
..
b331e97
100644
(file)
--- a/
arch/um/kernel/sysrq.c
+++ b/
arch/um/kernel/sysrq.c
@@
-3,6
+3,7
@@
* Licensed under the GPL
*/
* Licensed under the GPL
*/
+#include "linux/config.h"
#include "linux/sched.h"
#include "linux/kernel.h"
#include "linux/module.h"
#include "linux/sched.h"
#include "linux/kernel.h"
#include "linux/module.h"
@@
-12,14
+13,14
@@
#include "sysrq.h"
#include "user_util.h"
#include "sysrq.h"
#include "user_util.h"
-void show_trace(unsigned long * stack)
+/* Catch non-i386 SUBARCH's. */
+#if !defined(CONFIG_UML_X86) || defined(CONFIG_64BIT)
+void show_trace(struct task_struct *task, unsigned long * stack)
{
{
- /* XXX: Copy the CONFIG_FRAME_POINTER stack-walking backtrace from
- * arch/i386/kernel/traps.c, and then move this to sys-i386/sysrq.c.*/
unsigned long addr;
if (!stack) {
unsigned long addr;
if (!stack) {
-
stack = (unsigned long*) &stack;
+ stack = (unsigned long*) &stack;
WARN_ON(1);
}
WARN_ON(1);
}
@@
-35,6
+36,7
@@
void show_trace(unsigned long * stack)
}
printk("\n");
}
}
printk("\n");
}
+#endif
/*
* stack dumps generator - this is used by arch-independent code.
/*
* stack dumps generator - this is used by arch-independent code.
@@
-44,7
+46,7
@@
void dump_stack(void)
{
unsigned long stack;
{
unsigned long stack;
- show_trace(&stack);
+ show_trace(
current,
&stack);
}
EXPORT_SYMBOL(dump_stack);
}
EXPORT_SYMBOL(dump_stack);
@@
-59,10
+61,8
@@
void show_stack(struct task_struct *task, unsigned long *esp)
int i;
if (esp == NULL) {
int i;
if (esp == NULL) {
- if (task != current) {
+ if (task != current
&& task != NULL
) {
esp = (unsigned long *) KSTK_ESP(task);
esp = (unsigned long *) KSTK_ESP(task);
- /* Which one? No actual difference - just coding style.*/
- //esp = (unsigned long *) PT_REGS_IP(&task->thread.regs);
} else {
esp = (unsigned long *) &esp;
}
} else {
esp = (unsigned long *) &esp;
}
@@
-77,5
+77,6
@@
void show_stack(struct task_struct *task, unsigned long *esp)
printk("%08lx ", *stack++);
}
printk("%08lx ", *stack++);
}
- show_trace(esp);
+ printk("Call Trace: \n");
+ show_trace(task, esp);
}
}