[ltt-dev] [PATCH] ltt: rework trace clock code for SH (version 2)

Mathieu Desnoyers compudj at krystal.dyndns.org
Wed Apr 7 10:36:53 EDT 2010


* Giuseppe CAVALLARO (peppe.cavallaro at st.com) wrote:
> LTTng trace clock definitions for SuperH were broken for the new Kernels.
> The patch reviews this code using the clocksource API to handle trace clock.
> For example, on ST Kernels the TMU channel 1 continues to be used as
> clocksource and all works fine for LTT (tested on SH4 STM platforms based).
> Concerning the TMU frequency, it comes from the module_clk clock available
> on SuperH platforms.
> 
> Signed-off-by: Giuseppe Cavallaro <peppe.cavallaro at st.com>
> ---
>  arch/sh/include/asm/trace-clock.h |   26 ++++++++++++++++++++------
>  1 files changed, 20 insertions(+), 6 deletions(-)
> 
> diff --git a/arch/sh/include/asm/trace-clock.h b/arch/sh/include/asm/trace-clock.h
> index 7dfa042..14a00e2 100644
> --- a/arch/sh/include/asm/trace-clock.h
> +++ b/arch/sh/include/asm/trace-clock.h
> @@ -8,7 +8,7 @@
>  #ifndef _ASM_SH_TRACE_CLOCK_H
>  #define _ASM_SH_TRACE_CLOCK_H
>  
> -#include <linux/timer.h>
> +#include <linux/clocksource.h>
>  #include <asm/clock.h>
>  
>  /*
> @@ -23,11 +23,18 @@
>  /* Expected maximum interrupt latency in ms : 15ms, *2 for security */
>  #define TC_EXPECTED_INTERRUPT_LATENCY	30
>  
> +static struct clocksource *clksrc;

static definitions in headers are prohibited by the kernel coding style.
You will probably need to create a trace-clock.c with a proper "init"
function.

> +
>  extern u64 trace_clock_read_synthetic_tsc(void);
>  
>  static inline u32 trace_clock_read32(void)
>  {
> -	return get_cycles();
> +	u32 value = 0;
> +
> +	if (likely(clksrc))
> +		value = (u32) clksrc->read(clksrc);
> +
> +	return value;
>  }
>  
>  static inline u64 trace_clock_read64(void)
> @@ -37,11 +44,18 @@ static inline u64 trace_clock_read64(void)
>  
>  static inline u64 trace_clock_frequency(void)
>  {
> -	u64 rate;
> -	struct clk *tmu1_clk;
> +	u64 rate = 0;
> +	struct clk *clk;
> +
> +	/* Get the Clock rate for the TMU channels */
> +	clk = clk_get(NULL, "module_clk");
> +	if (likely(clk))
> +		rate = clk_get_rate(clk) / 4;
>  
> -	tmu1_clk = clk_get(NULL, "tmu1_clk");
> -	rate = clk_get_rate(tmu1_clk);
> +	/* Get the clocksource needed to read the timer counter register */

How can you be sure that this will select the sh_tmu_clocksource_read
clocksource ? (even in future kernel versions ?)

Thanks,

Mathieu

> +	clksrc = clocksource_get_next();
> +	if (unlikely(!clksrc))
> +		pr_err("%s: no clocksource found\n", __func__);
>  
>  	return rate;
>  }
> -- 
> 1.6.0.4
> 
> 
> _______________________________________________
> ltt-dev mailing list
> ltt-dev at lists.casi.polymtl.ca
> http://lists.casi.polymtl.ca/cgi-bin/mailman/listinfo/ltt-dev
> 

-- 
Mathieu Desnoyers
Operating System Efficiency R&D Consultant
EfficiOS Inc.
http://www.efficios.com




More information about the lttng-dev mailing list