From 83e03321026504ee3ec69bf0a4790b82206f7a07 Mon Sep 17 00:00:00 2001 From: Antti P Miettinen Date: Wed, 28 Mar 2012 20:42:55 +0300 Subject: tracing: Add tracepoints for hotplug Simple trace points for measuring hotplug up/down times. Bug 960310 Change-Id: I1927aae6edb74cba7ca3e9522d138407b48325dc Signed-off-by: Antti P Miettinen Reviewed-on: http://git-master/r/92920 Reviewed-by: Automatic_Commit_Validation_User Reviewed-by: Satya Popuri Reviewed-by: Diwakar Tundlam Reviewed-by: Juha Tukkinen --- include/trace/events/power.h | 29 +++++++++++++++++++++++++++++ kernel/cpu.c | 7 +++++++ 2 files changed, 36 insertions(+) diff --git a/include/trace/events/power.h b/include/trace/events/power.h index 1bcc2a8c00e2..be2325339768 100644 --- a/include/trace/events/power.h +++ b/include/trace/events/power.h @@ -39,8 +39,37 @@ DEFINE_EVENT(cpu, cpu_idle, #define _PWR_EVENT_AVOID_DOUBLE_DEFINING #define PWR_EVENT_EXIT -1 + +enum { + POWER_CPU_UP_START, + POWER_CPU_UP_DONE, + POWER_CPU_DOWN_START, + POWER_CPU_DOWN_DONE, +}; + #endif +TRACE_EVENT(cpu_hotplug, + + TP_PROTO(unsigned int cpu_id, int state), + + TP_ARGS(cpu_id, state), + + TP_STRUCT__entry( + __field(u32, cpu_id) + __field(u32, state) + ), + + TP_fast_assign( + __entry->cpu_id = cpu_id; + __entry->state = state; + ), + + TP_printk("cpu_id=%lu, state=%lu", + (unsigned long)__entry->cpu_id, + (unsigned long)__entry->state) +); + DEFINE_EVENT(cpu, cpu_frequency, TP_PROTO(unsigned int frequency, unsigned int cpu_id), diff --git a/kernel/cpu.c b/kernel/cpu.c index eae3d9b39574..f9bb3d498fb4 100644 --- a/kernel/cpu.c +++ b/kernel/cpu.c @@ -16,6 +16,7 @@ #include #include #include +#include #ifdef CONFIG_SMP /* Serializes the updates to cpu_online_mask, cpu_present_mask */ @@ -274,6 +275,8 @@ int __ref cpu_down(unsigned int cpu) { int err; + trace_cpu_hotplug(cpu, POWER_CPU_DOWN_START); + cpu_maps_update_begin(); if (cpu_hotplug_disabled) { @@ -285,6 +288,7 @@ int __ref cpu_down(unsigned int cpu) out: cpu_maps_update_done(); + trace_cpu_hotplug(cpu, POWER_CPU_DOWN_DONE); return err; } EXPORT_SYMBOL(cpu_down); @@ -335,6 +339,8 @@ int __cpuinit cpu_up(unsigned int cpu) pg_data_t *pgdat; #endif + trace_cpu_hotplug(cpu, POWER_CPU_UP_START); + if (!cpu_possible(cpu)) { printk(KERN_ERR "can't online cpu %d because it is not " "configured as may-hotadd at boot time\n", cpu); @@ -378,6 +384,7 @@ int __cpuinit cpu_up(unsigned int cpu) out: cpu_maps_update_done(); + trace_cpu_hotplug(cpu, POWER_CPU_UP_DONE); return err; } -- cgit v1.2.3