aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--arch/arm/common/bL_switcher.c17
-rw-r--r--include/trace/events/power_cpu_migrate.h66
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 */
62static 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
16DECLARE_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>