|
@@ -5368,12 +5368,22 @@ int perf_event_init_task(struct task_struct *child)
|
|
|
return ret;
|
|
|
}
|
|
|
|
|
|
+static void __init perf_event_init_all_cpus(void)
|
|
|
+{
|
|
|
+ int cpu;
|
|
|
+ struct perf_cpu_context *cpuctx;
|
|
|
+
|
|
|
+ for_each_possible_cpu(cpu) {
|
|
|
+ cpuctx = &per_cpu(perf_cpu_context, cpu);
|
|
|
+ __perf_event_init_context(&cpuctx->ctx, NULL);
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
static void __cpuinit perf_event_init_cpu(int cpu)
|
|
|
{
|
|
|
struct perf_cpu_context *cpuctx;
|
|
|
|
|
|
cpuctx = &per_cpu(perf_cpu_context, cpu);
|
|
|
- __perf_event_init_context(&cpuctx->ctx, NULL);
|
|
|
|
|
|
spin_lock(&perf_resource_lock);
|
|
|
cpuctx->max_pertask = perf_max_events - perf_reserved_percpu;
|
|
@@ -5439,6 +5449,7 @@ static struct notifier_block __cpuinitdata perf_cpu_nb = {
|
|
|
|
|
|
void __init perf_event_init(void)
|
|
|
{
|
|
|
+ perf_event_init_all_cpus();
|
|
|
perf_cpu_notify(&perf_cpu_nb, (unsigned long)CPU_UP_PREPARE,
|
|
|
(void *)(long)smp_processor_id());
|
|
|
perf_cpu_notify(&perf_cpu_nb, (unsigned long)CPU_ONLINE,
|