]> www.pilppa.org Git - linux-2.6-omap-h63xx.git/commitdiff
sh: latencytop support.
authorPaul Mundt <lethal@linux-sh.org>
Fri, 12 Sep 2008 16:44:03 +0000 (01:44 +0900)
committerPaul Mundt <lethal@linux-sh.org>
Fri, 12 Sep 2008 16:44:03 +0000 (01:44 +0900)
Signed-off-by: Paul Mundt <lethal@linux-sh.org>
arch/sh/Kconfig
arch/sh/kernel/stacktrace.c

index acaba1bdd8a64daa95204f65b65a29b843330c6f..18a1cc8a6aa3d0a56598285cf7de9e97bd4483bf 100644 (file)
@@ -100,6 +100,10 @@ config STACKTRACE_SUPPORT
 config LOCKDEP_SUPPORT
        def_bool y
 
+config HAVE_LATENCYTOP_SUPPORT
+       def_bool y
+       depends on !SMP
+
 config ARCH_HAS_ILOG2_U32
        def_bool n
 
index 54d1f61aa00778c22cb55552e5fc18197e12d3b8..1a2a5eb76e41cd419182b358d24127758838a997 100644 (file)
@@ -3,7 +3,7 @@
  *
  * Stack trace management functions
  *
- *  Copyright (C) 2006  Paul Mundt
+ *  Copyright (C) 2006 - 2008  Paul Mundt
  *
  * This file is subject to the terms and conditions of the GNU General Public
  * License.  See the file "COPYING" in the main directory of this archive
@@ -36,3 +36,24 @@ void save_stack_trace(struct stack_trace *trace)
        }
 }
 EXPORT_SYMBOL_GPL(save_stack_trace);
+
+void save_stack_trace_tsk(struct task_struct *tsk, struct stack_trace *trace)
+{
+       unsigned long *sp = (unsigned long *)tsk->thread.sp;
+
+       while (!kstack_end(sp)) {
+               unsigned long addr = *sp++;
+
+               if (__kernel_text_address(addr)) {
+                       if (in_sched_functions(addr))
+                               break;
+                       if (trace->skip > 0)
+                               trace->skip--;
+                       else
+                               trace->entries[trace->nr_entries++] = addr;
+                       if (trace->nr_entries >= trace->max_entries)
+                               break;
+               }
+       }
+}
+EXPORT_SYMBOL_GPL(save_stack_trace_tsk);