static int __cpuinit bts_hotcpu_handler(struct notifier_block *nfb, unsigned long action, void *hcpu) { int cpu = (long)hcpu; switch (action) { case CPU_ONLINE: case CPU_DOWN_FAILED: /* The notification is sent with interrupts enabled. */ if (trace_hw_branches_enabled) { bts_trace_init_cpu(cpu); if (trace_hw_branches_suspended && likely(per_cpu(hwb_tracer, cpu))) ds_suspend_bts(per_cpu(hwb_tracer, cpu)); } break; case CPU_DOWN_PREPARE: /* The notification is sent with interrupts enabled. */ if (likely(per_cpu(hwb_tracer, cpu))) { ds_release_bts(per_cpu(hwb_tracer, cpu)); per_cpu(hwb_tracer, cpu) = NULL; } } return NOTIFY_DONE; }
static int bts_trace_init(struct trace_array *tr) { int cpu; hw_branch_trace = tr; trace_hw_branches_enabled = 0; get_online_cpus(); for_each_online_cpu(cpu) { bts_trace_init_cpu(cpu); if (likely(per_cpu(hwb_tracer, cpu))) trace_hw_branches_enabled = 1; } trace_hw_branches_suspended = 0; put_online_cpus(); /* If we could not enable tracing on a single cpu, we fail. */ return trace_hw_branches_enabled ? 0 : -EOPNOTSUPP; }
static int bts_trace_init(struct trace_array *tr) { int cpu; hw_branch_trace = tr; trace_hw_branches_enabled = 0; get_online_cpus(); for_each_online_cpu(cpu) { bts_trace_init_cpu(cpu); if (likely(per_cpu(tracer, cpu))) trace_hw_branches_enabled = 1; } trace_hw_branches_suspended = 0; put_online_cpus(); return trace_hw_branches_enabled ? 0 : -EOPNOTSUPP; }