aboutsummaryrefslogtreecommitdiffstats
path: root/target/linux/orion/patches/001-latencytop_support.patch
diff options
context:
space:
mode:
Diffstat (limited to 'target/linux/orion/patches/001-latencytop_support.patch')
-rw-r--r--target/linux/orion/patches/001-latencytop_support.patch82
1 files changed, 0 insertions, 82 deletions
diff --git a/target/linux/orion/patches/001-latencytop_support.patch b/target/linux/orion/patches/001-latencytop_support.patch
deleted file mode 100644
index a1fbc17f54..0000000000
--- a/target/linux/orion/patches/001-latencytop_support.patch
+++ /dev/null
@@ -1,82 +0,0 @@
-From: Nicolas Pitre <nico@cam.org>
-
-Signed-off-by: Nicolas Pitre <nico@marvell.com>
-Tested-by: Lennert Buytenhek <buytenh@marvell.com>
-Signed-off-by: Lennert Buytenhek <buytenh@marvell.com>
----
- arch/arm/Kconfig | 4 ++++
- arch/arm/kernel/stacktrace.c | 26 ++++++++++++++++++++++----
- 2 files changed, 26 insertions(+), 4 deletions(-)
-
---- a/arch/arm/Kconfig
-+++ b/arch/arm/Kconfig
-@@ -84,6 +84,10 @@
- bool
- default y
-
-+config HAVE_LATENCYTOP_SUPPORT
-+ bool
-+ default y
-+
- config LOCKDEP_SUPPORT
- bool
- default y
---- a/arch/arm/kernel/stacktrace.c
-+++ b/arch/arm/kernel/stacktrace.c
-@@ -36,6 +36,7 @@
- #ifdef CONFIG_STACKTRACE
- struct stack_trace_data {
- struct stack_trace *trace;
-+ unsigned int no_sched_functions;
- unsigned int skip;
- };
-
-@@ -43,27 +44,44 @@
- {
- struct stack_trace_data *data = d;
- struct stack_trace *trace = data->trace;
-+ unsigned long addr = frame->lr;
-
-+ if (data->no_sched_functions && in_sched_functions(addr))
-+ return 0;
- if (data->skip) {
- data->skip--;
- return 0;
- }
-
-- trace->entries[trace->nr_entries++] = frame->lr;
-+ trace->entries[trace->nr_entries++] = addr;
-
- return trace->nr_entries >= trace->max_entries;
- }
-
--void save_stack_trace(struct stack_trace *trace)
-+void save_stack_trace_tsk(struct task_struct *tsk, struct stack_trace *trace)
- {
- struct stack_trace_data data;
- unsigned long fp, base;
-
- data.trace = trace;
- data.skip = trace->skip;
-- base = (unsigned long)task_stack_page(current);
-- asm("mov %0, fp" : "=r" (fp));
-+ base = (unsigned long)task_stack_page(tsk);
-+
-+ if (tsk != current) {
-+ data.no_sched_functions = 1;
-+ fp = thread_saved_fp(tsk);
-+ } else {
-+ data.no_sched_functions = 0;
-+ asm("mov %0, fp" : "=r" (fp));
-+ }
-
- walk_stackframe(fp, base, base + THREAD_SIZE, save_trace, &data);
-+ if (trace->nr_entries < trace->max_entries)
-+ trace->entries[trace->nr_entries++] = ULONG_MAX;
-+}
-+
-+void save_stack_trace(struct stack_trace *trace)
-+{
-+ save_stack_trace_tsk(current, trace);
- }
- #endif