summaryrefslogtreecommitdiff
path: root/arch/arm/plat-omap
diff options
context:
space:
mode:
authorMathieu Desnoyers <mathieu.desnoyers@efficios.com>2011-03-16 19:05:39 -0400
committerMathieu Desnoyers <mathieu.desnoyers@polymtl.ca>2011-03-16 19:05:39 -0400
commit76d3ec57cdc5cef205ea271dddc09abbcb26cb73 (patch)
tree01f0ee2b726d0b7e4379b409faffcb7556fc8ab2 /arch/arm/plat-omap
parent13fc41a743182902d2deca22d3de0c8eeaf753bb (diff)
omap-debug-trace-clock
OMAP debug trace clock Test if trace clock runs backward. Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
Diffstat (limited to 'arch/arm/plat-omap')
-rw-r--r--arch/arm/plat-omap/include/plat/trace-clock.h22
1 files changed, 22 insertions, 0 deletions
diff --git a/arch/arm/plat-omap/include/plat/trace-clock.h b/arch/arm/plat-omap/include/plat/trace-clock.h
index 2820eea001b..54c0cd3896c 100644
--- a/arch/arm/plat-omap/include/plat/trace-clock.h
+++ b/arch/arm/plat-omap/include/plat/trace-clock.h
@@ -87,6 +87,15 @@ extern u64 trace_clock_async_tsc_read(void);
*/
extern void _trace_clock_write_synthetic_tsc(u64 value);
+#ifdef CONFIG_DEBUG_TRACE_CLOCK
+DECLARE_PER_CPU(unsigned int, last_clock_nest);
+extern void trace_clock_debug(u64 value);
+#else
+static inline void trace_clock_debug(u64 value)
+{
+}
+#endif
+
static inline u32 read_ccnt(void)
{
u32 val;
@@ -109,6 +118,13 @@ static inline u64 trace_clock_read64(void)
struct pm_save_count *pm_count;
struct tc_cur_freq *cf;
u64 val;
+#ifdef CONFIG_DEBUG_TRACE_CLOCK
+ unsigned long flags;
+
+ local_irq_save(flags);
+ per_cpu(last_clock_nest, smp_processor_id())++;
+ barrier();
+#endif
preempt_disable();
pm_count = &per_cpu(pm_save_count, smp_processor_id());
@@ -118,8 +134,14 @@ static inline u64 trace_clock_read64(void)
* cf->mul_fact) >> 10) + cf->virt_base, cf->floor);
} else
val = _trace_clock_read_slow();
+ trace_clock_debug(val);
preempt_enable();
+#ifdef CONFIG_DEBUG_TRACE_CLOCK
+ barrier();
+ per_cpu(last_clock_nest, smp_processor_id())--;
+ local_irq_restore(flags);
+#endif
return val;
}