diff options
-rw-r--r-- | arch/arm/common/bL_switcher.c | 17 | ||||
-rw-r--r-- | include/trace/events/power_cpu_migrate.h | 66 |
2 files changed, 83 insertions, 0 deletions
diff --git a/arch/arm/common/bL_switcher.c b/arch/arm/common/bL_switcher.c index dc53eb8dcc81..7002de360d23 100644 --- a/arch/arm/common/bL_switcher.c +++ b/arch/arm/common/bL_switcher.c | |||
@@ -20,6 +20,7 @@ | |||
20 | #include <linux/cpumask.h> | 20 | #include <linux/cpumask.h> |
21 | #include <linux/kthread.h> | 21 | #include <linux/kthread.h> |
22 | #include <linux/wait.h> | 22 | #include <linux/wait.h> |
23 | #include <linux/time.h> | ||
23 | #include <linux/clockchips.h> | 24 | #include <linux/clockchips.h> |
24 | #include <linux/hrtimer.h> | 25 | #include <linux/hrtimer.h> |
25 | #include <linux/tick.h> | 26 | #include <linux/tick.h> |
@@ -33,10 +34,14 @@ | |||
33 | #include <linux/moduleparam.h> | 34 | #include <linux/moduleparam.h> |
34 | 35 | ||
35 | #include <asm/smp_plat.h> | 36 | #include <asm/smp_plat.h> |
37 | #include <asm/cputype.h> | ||
36 | #include <asm/suspend.h> | 38 | #include <asm/suspend.h> |
37 | #include <asm/mcpm.h> | 39 | #include <asm/mcpm.h> |
38 | #include <asm/bL_switcher.h> | 40 | #include <asm/bL_switcher.h> |
39 | 41 | ||
42 | #define CREATE_TRACE_POINTS | ||
43 | #include <trace/events/power_cpu_migrate.h> | ||
44 | |||
40 | 45 | ||
41 | /* | 46 | /* |
42 | * Use our own MPIDR accessors as the generic ones in asm/cputype.h have | 47 | * Use our own MPIDR accessors as the generic ones in asm/cputype.h have |
@@ -52,6 +57,16 @@ static int read_mpidr(void) | |||
52 | } | 57 | } |
53 | 58 | ||
54 | /* | 59 | /* |
60 | * Get a global nanosecond time stamp for tracing. | ||
61 | */ | ||
62 | static s64 get_ns(void) | ||
63 | { | ||
64 | struct timespec ts; | ||
65 | getnstimeofday(&ts); | ||
66 | return timespec_to_ns(&ts); | ||
67 | } | ||
68 | |||
69 | /* | ||
55 | * bL switcher core code. | 70 | * bL switcher core code. |
56 | */ | 71 | */ |
57 | 72 | ||
@@ -208,6 +223,7 @@ static int bL_switch_to(unsigned int new_cluster_id) | |||
208 | */ | 223 | */ |
209 | local_irq_disable(); | 224 | local_irq_disable(); |
210 | local_fiq_disable(); | 225 | local_fiq_disable(); |
226 | trace_cpu_migrate_begin(get_ns(), ob_mpidr); | ||
211 | 227 | ||
212 | /* redirect GIC's SGIs to our counterpart */ | 228 | /* redirect GIC's SGIs to our counterpart */ |
213 | gic_migrate_target(bL_gic_id[ib_cpu][ib_cluster]); | 229 | gic_migrate_target(bL_gic_id[ib_cpu][ib_cluster]); |
@@ -250,6 +266,7 @@ static int bL_switch_to(unsigned int new_cluster_id) | |||
250 | tdev->evtdev->next_event, 1); | 266 | tdev->evtdev->next_event, 1); |
251 | } | 267 | } |
252 | 268 | ||
269 | trace_cpu_migrate_finish(get_ns(), ib_mpidr); | ||
253 | local_fiq_enable(); | 270 | local_fiq_enable(); |
254 | local_irq_enable(); | 271 | local_irq_enable(); |
255 | 272 | ||
diff --git a/include/trace/events/power_cpu_migrate.h b/include/trace/events/power_cpu_migrate.h new file mode 100644 index 000000000000..3694af0f5bc5 --- /dev/null +++ b/include/trace/events/power_cpu_migrate.h | |||
@@ -0,0 +1,66 @@ | |||
1 | #undef TRACE_SYSTEM | ||
2 | #define TRACE_SYSTEM power | ||
3 | |||
4 | #if !defined(_TRACE_POWER_CPU_MIGRATE_H) || defined(TRACE_HEADER_MULTI_READ) | ||
5 | #define _TRACE_POWER_CPU_MIGRATE_H | ||
6 | |||
7 | #include <linux/tracepoint.h> | ||
8 | |||
9 | #define __cpu_migrate_proto \ | ||
10 | TP_PROTO(u64 timestamp, \ | ||
11 | u32 cpu_hwid) | ||
12 | #define __cpu_migrate_args \ | ||
13 | TP_ARGS(timestamp, \ | ||
14 | cpu_hwid) | ||
15 | |||
16 | DECLARE_EVENT_CLASS(cpu_migrate, | ||
17 | |||
18 | __cpu_migrate_proto, | ||
19 | __cpu_migrate_args, | ||
20 | |||
21 | TP_STRUCT__entry( | ||
22 | __field(u64, timestamp ) | ||
23 | __field(u32, cpu_hwid ) | ||
24 | ), | ||
25 | |||
26 | TP_fast_assign( | ||
27 | __entry->timestamp = timestamp; | ||
28 | __entry->cpu_hwid = cpu_hwid; | ||
29 | ), | ||
30 | |||
31 | TP_printk("timestamp=%llu cpu_hwid=0x%08lX", | ||
32 | (unsigned long long)__entry->timestamp, | ||
33 | (unsigned long)__entry->cpu_hwid | ||
34 | ) | ||
35 | ); | ||
36 | |||
37 | #define __define_cpu_migrate_event(name) \ | ||
38 | DEFINE_EVENT(cpu_migrate, cpu_migrate_##name, \ | ||
39 | __cpu_migrate_proto, \ | ||
40 | __cpu_migrate_args \ | ||
41 | ) | ||
42 | |||
43 | __define_cpu_migrate_event(begin); | ||
44 | __define_cpu_migrate_event(finish); | ||
45 | |||
46 | #undef __define_cpu_migrate | ||
47 | #undef __cpu_migrate_proto | ||
48 | #undef __cpu_migrate_args | ||
49 | |||
50 | /* This file can get included multiple times, TRACE_HEADER_MULTI_READ at top */ | ||
51 | #ifndef _PWR_CPU_MIGRATE_EVENT_AVOID_DOUBLE_DEFINING | ||
52 | #define _PWR_CPU_MIGRATE_EVENT_AVOID_DOUBLE_DEFINING | ||
53 | |||
54 | /* | ||
55 | * Set from_phys_cpu and to_phys_cpu to CPU_MIGRATE_ALL_CPUS to indicate | ||
56 | * a whole-cluster migration: | ||
57 | */ | ||
58 | #define CPU_MIGRATE_ALL_CPUS 0x80000000U | ||
59 | #endif | ||
60 | |||
61 | #endif /* _TRACE_POWER_CPU_MIGRATE_H */ | ||
62 | |||
63 | /* This part must be outside protection */ | ||
64 | #undef TRACE_INCLUDE_FILE | ||
65 | #define TRACE_INCLUDE_FILE power_cpu_migrate | ||
66 | #include <trace/define_trace.h> | ||