diff options
author | Mathieu Desnoyers <mathieu.desnoyers@efficios.com> | 2011-03-16 19:05:39 -0400 |
---|---|---|
committer | Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca> | 2011-03-16 19:05:39 -0400 |
commit | 76d3ec57cdc5cef205ea271dddc09abbcb26cb73 (patch) | |
tree | 01f0ee2b726d0b7e4379b409faffcb7556fc8ab2 /arch/arm/plat-omap | |
parent | 13fc41a743182902d2deca22d3de0c8eeaf753bb (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.h | 22 |
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; } |