aboutsummaryrefslogtreecommitdiffstats
path: root/kernel/trace/trace_hw_branches.c
diff options
context:
space:
mode:
authorMarkus Metzger <markus.t.metzger@intel.com>2009-02-24 07:55:18 -0500
committerIngo Molnar <mingo@elte.hu>2009-02-24 12:23:34 -0500
commit5e01cb695d29619dd551bac7d6aa4ef1dc8ebc95 (patch)
tree441e5401fe99fbf75468b3245c77db34fc6aef58 /kernel/trace/trace_hw_branches.c
parenta7f4463e0300b5135c0f0caf7c34a0529405f986 (diff)
x86, ftrace: fix section mismatch in hw-branch-tracer
Fix an invalid memory reference problem when cpu hotplug support is disabled and the hw-branch-tracer is set as current tracer. Initializing the tracer calls bts_trace_init() which has already been freed at this time. Reported-by: Frederic Weisbecker <fweisbec@gmail.com> Signed-off-by: Markus Metzger <markus.t.metzger@intel.com> Signed-off-by: Ingo Molnar <mingo@elte.hu>
Diffstat (limited to 'kernel/trace/trace_hw_branches.c')
-rw-r--r--kernel/trace/trace_hw_branches.c7
1 files changed, 3 insertions, 4 deletions
diff --git a/kernel/trace/trace_hw_branches.c b/kernel/trace/trace_hw_branches.c
index 3561aace075c..3335e807144b 100644
--- a/kernel/trace/trace_hw_branches.c
+++ b/kernel/trace/trace_hw_branches.c
@@ -127,20 +127,18 @@ static struct notifier_block bts_hotcpu_notifier __cpuinitdata = {
127 .notifier_call = bts_hotcpu_handler 127 .notifier_call = bts_hotcpu_handler
128}; 128};
129 129
130static int __cpuinit bts_trace_init(struct trace_array *tr) 130static int bts_trace_init(struct trace_array *tr)
131{ 131{
132 hw_branch_trace = tr; 132 hw_branch_trace = tr;
133 133
134 register_hotcpu_notifier(&bts_hotcpu_notifier);
135 bts_trace_start(tr); 134 bts_trace_start(tr);
136 135
137 return 0; 136 return 0;
138} 137}
139 138
140static void __cpuinit bts_trace_reset(struct trace_array *tr) 139static void bts_trace_reset(struct trace_array *tr)
141{ 140{
142 bts_trace_stop(tr); 141 bts_trace_stop(tr);
143 unregister_hotcpu_notifier(&bts_hotcpu_notifier);
144} 142}
145 143
146static void bts_trace_print_header(struct seq_file *m) 144static void bts_trace_print_header(struct seq_file *m)
@@ -299,6 +297,7 @@ struct tracer bts_tracer __read_mostly =
299 297
300__init static int init_bts_trace(void) 298__init static int init_bts_trace(void)
301{ 299{
300 register_hotcpu_notifier(&bts_hotcpu_notifier);
302 return register_tracer(&bts_tracer); 301 return register_tracer(&bts_tracer);
303} 302}
304device_initcall(init_bts_trace); 303device_initcall(init_bts_trace);