diff options
author | Ingo Molnar <mingo@elte.hu> | 2008-05-12 15:20:47 -0400 |
---|---|---|
committer | Thomas Gleixner <tglx@linutronix.de> | 2008-05-23 17:39:47 -0400 |
commit | 842af315e8b0adad58fc642eaa5e6f53525e0534 (patch) | |
tree | a547f73d80f81e5b833283fa3cde264f1014079a /kernel/trace | |
parent | a6dd24f8d00cbccb560b19a723e6fb9bdfb20799 (diff) |
ftrace: sysprof plugin improvement
add sample maximum depth.
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Diffstat (limited to 'kernel/trace')
-rw-r--r-- | kernel/trace/trace_sysprof.c | 9 |
1 files changed, 3 insertions, 6 deletions
diff --git a/kernel/trace/trace_sysprof.c b/kernel/trace/trace_sysprof.c index b78f12f77fca..7f6fcccffb88 100644 --- a/kernel/trace/trace_sysprof.c +++ b/kernel/trace/trace_sysprof.c | |||
@@ -23,6 +23,7 @@ static int __read_mostly tracer_enabled; | |||
23 | * 10 msecs for now: | 23 | * 10 msecs for now: |
24 | */ | 24 | */ |
25 | static const unsigned long sample_period = 1000000; | 25 | static const unsigned long sample_period = 1000000; |
26 | static const unsigned int sample_max_depth = 512; | ||
26 | 27 | ||
27 | /* | 28 | /* |
28 | * Per CPU hrtimers that do the profiling: | 29 | * Per CPU hrtimers that do the profiling: |
@@ -45,8 +46,6 @@ static int copy_stack_frame(const void __user *fp, struct stack_frame *frame) | |||
45 | return 1; | 46 | return 1; |
46 | } | 47 | } |
47 | 48 | ||
48 | #define SYSPROF_MAX_ADDRESSES 512 | ||
49 | |||
50 | static void timer_notify(struct pt_regs *regs, int cpu) | 49 | static void timer_notify(struct pt_regs *regs, int cpu) |
51 | { | 50 | { |
52 | const void __user *frame_pointer; | 51 | const void __user *frame_pointer; |
@@ -80,7 +79,7 @@ static void timer_notify(struct pt_regs *regs, int cpu) | |||
80 | 79 | ||
81 | frame_pointer = (void __user *)regs->bp; | 80 | frame_pointer = (void __user *)regs->bp; |
82 | 81 | ||
83 | for (i = 0; i < SYSPROF_MAX_ADDRESSES; i++) { | 82 | for (i = 0; i < sample_max_depth; i++) { |
84 | if (!copy_stack_frame(frame_pointer, &frame)) | 83 | if (!copy_stack_frame(frame_pointer, &frame)) |
85 | break; | 84 | break; |
86 | if ((unsigned long)frame_pointer < regs->sp) | 85 | if ((unsigned long)frame_pointer < regs->sp) |
@@ -93,7 +92,7 @@ static void timer_notify(struct pt_regs *regs, int cpu) | |||
93 | 92 | ||
94 | trace_special(tr, data, 2, current->pid, i); | 93 | trace_special(tr, data, 2, current->pid, i); |
95 | 94 | ||
96 | if (i == SYSPROF_MAX_ADDRESSES) | 95 | if (i == sample_max_depth) |
97 | trace_special(tr, data, -1, -1, -1); | 96 | trace_special(tr, data, -1, -1, -1); |
98 | } | 97 | } |
99 | 98 | ||
@@ -126,7 +125,6 @@ static void start_stack_timers(void) | |||
126 | for_each_online_cpu(cpu) { | 125 | for_each_online_cpu(cpu) { |
127 | set_cpus_allowed_ptr(current, &cpumask_of_cpu(cpu)); | 126 | set_cpus_allowed_ptr(current, &cpumask_of_cpu(cpu)); |
128 | start_stack_timer(cpu); | 127 | start_stack_timer(cpu); |
129 | printk(KERN_INFO "started sysprof timer on cpu%d\n", cpu); | ||
130 | } | 128 | } |
131 | set_cpus_allowed_ptr(current, &saved_mask); | 129 | set_cpus_allowed_ptr(current, &saved_mask); |
132 | } | 130 | } |
@@ -136,7 +134,6 @@ static void stop_stack_timer(int cpu) | |||
136 | struct hrtimer *hrtimer = &per_cpu(stack_trace_hrtimer, cpu); | 134 | struct hrtimer *hrtimer = &per_cpu(stack_trace_hrtimer, cpu); |
137 | 135 | ||
138 | hrtimer_cancel(hrtimer); | 136 | hrtimer_cancel(hrtimer); |
139 | printk(KERN_INFO "cancelled sysprof timer on cpu%d\n", cpu); | ||
140 | } | 137 | } |
141 | 138 | ||
142 | static void stop_stack_timers(void) | 139 | static void stop_stack_timers(void) |