]> pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - arch/arm/kernel/stacktrace.c
KVM: ppc: add lwzx/stwz emulation
[linux-2.6-omap-h63xx.git] / arch / arm / kernel / stacktrace.c
index 77ef35efaa8d3e05642c3f3e1887030f6f4ca6bc..ae31deb2d0653a6a8fe57b000fb2827de9acdf13 100644 (file)
@@ -1,3 +1,4 @@
+#include <linux/module.h>
 #include <linux/sched.h>
 #include <linux/stacktrace.h>
 
@@ -12,7 +13,7 @@ int walk_stackframe(unsigned long fp, unsigned long low, unsigned long high,
                /*
                 * Check current frame pointer is within bounds
                 */
-               if ((fp - 12) < low || fp + 4 >= high)
+               if (fp < (low + 12) || fp + 4 >= high)
                        break;
 
                frame = (struct stackframe *)(fp - 12);
@@ -30,6 +31,7 @@ int walk_stackframe(unsigned long fp, unsigned long low, unsigned long high,
 
        return 0;
 }
+EXPORT_SYMBOL(walk_stackframe);
 
 #ifdef CONFIG_STACKTRACE
 struct stack_trace_data {
@@ -52,21 +54,15 @@ static int save_trace(struct stackframe *frame, void *d)
        return trace->nr_entries >= trace->max_entries;
 }
 
-void save_stack_trace(struct stack_trace *trace, struct task_struct *task)
+void save_stack_trace(struct stack_trace *trace)
 {
        struct stack_trace_data data;
        unsigned long fp, base;
 
        data.trace = trace;
        data.skip = trace->skip;
-
-       if (task) {
-               base = (unsigned long)task_stack_page(task);
-               fp = 0; /* FIXME */
-       } else {
-               base = (unsigned long)task_stack_page(current);
-               asm("mov %0, fp" : "=r" (fp));
-       }
+       base = (unsigned long)task_stack_page(current);
+       asm("mov %0, fp" : "=r" (fp));
 
        walk_stackframe(fp, base, base + THREAD_SIZE, save_trace, &data);
 }