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>
This commit is contained in:
Родитель
a7f4463e03
Коммит
5e01cb695d
|
@ -127,20 +127,18 @@ static struct notifier_block bts_hotcpu_notifier __cpuinitdata = {
|
||||||
.notifier_call = bts_hotcpu_handler
|
.notifier_call = bts_hotcpu_handler
|
||||||
};
|
};
|
||||||
|
|
||||||
static int __cpuinit bts_trace_init(struct trace_array *tr)
|
static int bts_trace_init(struct trace_array *tr)
|
||||||
{
|
{
|
||||||
hw_branch_trace = tr;
|
hw_branch_trace = tr;
|
||||||
|
|
||||||
register_hotcpu_notifier(&bts_hotcpu_notifier);
|
|
||||||
bts_trace_start(tr);
|
bts_trace_start(tr);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void __cpuinit bts_trace_reset(struct trace_array *tr)
|
static void bts_trace_reset(struct trace_array *tr)
|
||||||
{
|
{
|
||||||
bts_trace_stop(tr);
|
bts_trace_stop(tr);
|
||||||
unregister_hotcpu_notifier(&bts_hotcpu_notifier);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void bts_trace_print_header(struct seq_file *m)
|
static void bts_trace_print_header(struct seq_file *m)
|
||||||
|
@ -299,6 +297,7 @@ struct tracer bts_tracer __read_mostly =
|
||||||
|
|
||||||
__init static int init_bts_trace(void)
|
__init static int init_bts_trace(void)
|
||||||
{
|
{
|
||||||
|
register_hotcpu_notifier(&bts_hotcpu_notifier);
|
||||||
return register_tracer(&bts_tracer);
|
return register_tracer(&bts_tracer);
|
||||||
}
|
}
|
||||||
device_initcall(init_bts_trace);
|
device_initcall(init_bts_trace);
|
||||||
|
|
Загрузка…
Ссылка в новой задаче