aboutsummaryrefslogtreecommitdiff
path: root/arch/arm/common/bL_switcher.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/arm/common/bL_switcher.c')
-rw-r--r--arch/arm/common/bL_switcher.c17
1 files changed, 17 insertions, 0 deletions
diff --git a/arch/arm/common/bL_switcher.c b/arch/arm/common/bL_switcher.c
index e55b55170be..fd59d58fe28 100644
--- a/arch/arm/common/bL_switcher.c
+++ b/arch/arm/common/bL_switcher.c
@@ -19,6 +19,7 @@
#include <linux/cpumask.h>
#include <linux/kthread.h>
#include <linux/wait.h>
+#include <linux/time.h>
#include <linux/clockchips.h>
#include <linux/hrtimer.h>
#include <linux/tick.h>
@@ -32,10 +33,14 @@
#include <asm/smp_plat.h>
#include <asm/cacheflush.h>
+#include <asm/cputype.h>
#include <asm/suspend.h>
#include <asm/mcpm.h>
#include <asm/bL_switcher.h>
+#define CREATE_TRACE_POINTS
+#include <trace/events/power_cpu_migrate.h>
+
/*
* Use our own MPIDR accessors as the generic ones in asm/cputype.h have
@@ -51,6 +56,16 @@ static int read_mpidr(void)
}
/*
+ * Get a global nanosecond time stamp for tracing.
+ */
+static s64 get_ns(void)
+{
+ struct timespec ts;
+ getnstimeofday(&ts);
+ return timespec_to_ns(&ts);
+}
+
+/*
* bL switcher core code.
*/
@@ -201,6 +216,7 @@ static int bL_switch_to(unsigned int new_cluster_id)
*/
local_irq_disable();
local_fiq_disable();
+ trace_cpu_migrate_begin(get_ns(), mpidr & MPIDR_HWID_BITMASK);
/* redirect GIC's SGIs to our counterpart */
gic_migrate_target(bL_gic_id[cpuid][ib_cluster]);
@@ -250,6 +266,7 @@ static int bL_switch_to(unsigned int new_cluster_id)
tdev->evtdev->next_event, 1);
}
+ trace_cpu_migrate_finish(get_ns(), mpidr & MPIDR_HWID_BITMASK);
local_fiq_enable();
local_irq_enable();