mirror of
https://github.com/adulau/aha.git
synced 2024-12-28 03:36:19 +00:00
perfcounters: release CPU context when exiting task counters
If counters are exiting via do_exit() not via filp close, then the CPU context needs to be released - otherwise future percpu counter creations might fail. Signed-off-by: Ingo Molnar <mingo@elte.hu>
This commit is contained in:
parent
029af8c753
commit
0cc0c027d4
1 changed files with 12 additions and 2 deletions
|
@ -1273,8 +1273,19 @@ __perf_counter_exit_task(struct task_struct *child,
|
||||||
local_irq_disable();
|
local_irq_disable();
|
||||||
perf_flags = hw_perf_save_disable();
|
perf_flags = hw_perf_save_disable();
|
||||||
|
|
||||||
if (child_counter->state == PERF_COUNTER_STATE_ACTIVE)
|
if (child_counter->state == PERF_COUNTER_STATE_ACTIVE) {
|
||||||
|
struct perf_cpu_context *cpuctx;
|
||||||
|
|
||||||
|
cpuctx = &__get_cpu_var(perf_cpu_context);
|
||||||
|
|
||||||
child_counter->hw_ops->hw_perf_counter_disable(child_counter);
|
child_counter->hw_ops->hw_perf_counter_disable(child_counter);
|
||||||
|
child_counter->state = PERF_COUNTER_STATE_INACTIVE;
|
||||||
|
child_counter->oncpu = -1;
|
||||||
|
|
||||||
|
cpuctx->active_oncpu--;
|
||||||
|
child_ctx->nr_active--;
|
||||||
|
}
|
||||||
|
|
||||||
list_del_init(&child_counter->list_entry);
|
list_del_init(&child_counter->list_entry);
|
||||||
|
|
||||||
hw_perf_restore(perf_flags);
|
hw_perf_restore(perf_flags);
|
||||||
|
@ -1539,4 +1550,3 @@ static int __init perf_counter_sysfs_init(void)
|
||||||
&perfclass_attr_group);
|
&perfclass_attr_group);
|
||||||
}
|
}
|
||||||
device_initcall(perf_counter_sysfs_init);
|
device_initcall(perf_counter_sysfs_init);
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue