tracing: Add tracepoints for hotplug
Antti P Miettinen [Wed, 28 Mar 2012 17:42:55 +0000 (20:42 +0300)]
Simple trace points for measuring hotplug up/down times.

Bug 960310

Change-Id: I1927aae6edb74cba7ca3e9522d138407b48325dc
Signed-off-by: Antti P Miettinen <amiettinen@nvidia.com>
Reviewed-on: http://git-master/r/92920
Reviewed-by: Automatic_Commit_Validation_User
Reviewed-by: Satya Popuri <spopuri@nvidia.com>
Reviewed-by: Diwakar Tundlam <dtundlam@nvidia.com>
Reviewed-by: Juha Tukkinen <jtukkinen@nvidia.com>

Rebase-Id: R9a5ff4f33d9d5f06ea7b4660a6567680398eefb1

include/trace/events/power.h
kernel/cpu.c

index 427acab..49703d4 100644 (file)
@@ -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),
index 198a388..d0a9b07 100644 (file)
@@ -19,6 +19,7 @@
 #include <linux/mutex.h>
 #include <linux/gfp.h>
 #include <linux/suspend.h>
+#include <trace/events/power.h>
 
 #include "smpboot.h"
 
@@ -349,6 +350,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) {
@@ -360,6 +363,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);
@@ -428,6 +432,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);
@@ -471,6 +477,7 @@ int __cpuinit cpu_up(unsigned int cpu)
 
 out:
        cpu_maps_update_done();
+       trace_cpu_hotplug(cpu, POWER_CPU_UP_DONE);
        return err;
 }
 EXPORT_SYMBOL_GPL(cpu_up);