---
include/linux/sched.h | 7 +++++--
kernel/latency_trace.c | 18 +++++++++++-------
2 files changed, 16 insertions(+), 9 deletions(-)
diff --git a/include/linux/sched.h b/include/linux/sched.h
index 8ebb43c..233d26c 100644
--- a/include/linux/sched.h
+++ b/include/linux/sched.h
@@ -1306,10 +1306,13 @@ struct task_struct {
#endif
#define MAX_PREEMPT_TRACE 25
+#define MAX_PREEMPT_TRACE_DEPTH 5
#ifdef CONFIG_PREEMPT_TRACE
- unsigned long preempt_trace_eip[MAX_PREEMPT_TRACE];
- unsigned long preempt_trace_parent_eip[MAX_PREEMPT_TRACE];
+ struct {
+ struct stack_trace trace;
+ unsigned long data[MAX_PREEMPT_TRACE_DEPTH];
+ } preempt_trace[MAX_PREEMPT_TRACE];
#endif
#define MAX_LOCK_STACK MAX_PREEMPT_TRACE
diff --git a/kernel/latency_trace.c b/kernel/latency_trace.c
index 1113744..9b83262 100644
--- a/kernel/latency_trace.c
+++ b/kernel/latency_trace.c
@@ -2049,8 +2049,15 @@ void notrace add_preempt_count(unsigned int val)
if (val <= 10) {
unsigned int idx = preempt_count() & PREEMPT_MASK;
if (idx < MAX_PREEMPT_TRACE) {
- current->preempt_trace_eip[idx] = eip;
- current->preempt_trace_parent_eip[idx] = parent_eip;
+ struct stack_trace *trace;
+
+ trace = ¤t->preempt_trace[idx].trace;
+ trace->nr_entries = 0;
+ trace->max_entries = MAX_PREEMPT_TRACE_DEPTH;
+ trace->skip = 0;
+ trace->entries = current->preempt_trace[idx].data;
+
+ save_stack_trace(trace);
}
}
#endif
@@ -2708,11 +2715,8 @@ static void print_preempt_trace(struct task_struct *task)
printk("| %d-level deep critical section nesting:\n", lim);
printk("----------------------------------------\n");
for (i = 1; i <= lim; i++) {
- printk(".. [<%08lx>] .... ", task->preempt_trace_eip[i]);
- print_symbol("%s\n", task->preempt_trace_eip[i]);
- printk(".....[<%08lx>] .. ( <= ",
- task->preempt_trace_parent_eip[i]);
- print_symbol("%s)\n", task->preempt_trace_parent_eip[i]);
+ printk(" ---- Critial Section #%d ----\n", i);
+ print_stack_trace(&task->preempt_trace[i].trace, 5);
}
printk("\n");
}
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
[Index of Archives]
[Kernel Newbies]
[Netfilter]
[Bugtraq]
[Photo]
[Stuff]
[Gimp]
[Yosemite News]
[MIPS Linux]
[ARM Linux]
[Linux Security]
[Linux RAID]
[Video 4 Linux]
[Linux for the blind]
[Linux Resources]