[ltt-dev] [PATCH 2/3] ltt: rework trace clock code for SH

Giuseppe CAVALLARO peppe.cavallaro at st.com
Tue Apr 6 10:25:08 EDT 2010


Hi Mathieu,
I'm testing the lttng-0.198 on a Kernel 2.6.32.10 and it starts working
fine on my side (with the patches I've just sent).
I'm not sure if the clocksource_get_next is the right approach to use
but the idea could be not so bad and quite generic.
As usual welcome advice.

Regards
Giuseppe

Giuseppe CAVALLARO wrote:
> Trace clock definitions for SuperH are broken in the new Kernels.
> This patch reworks the 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.
> 
> Signed-off-by: Giuseppe Cavallaro <peppe.cavallaro at st.com>
> ---
>  arch/sh/include/asm/trace-clock.h |   22 ++++++++++++++--------
>  1 files changed, 14 insertions(+), 8 deletions(-)
> 
> diff --git a/arch/sh/include/asm/trace-clock.h b/arch/sh/include/asm/trace-clock.h
> index 7dfa042..667530b 100644
> --- a/arch/sh/include/asm/trace-clock.h
> +++ b/arch/sh/include/asm/trace-clock.h
> @@ -8,8 +8,7 @@
>  #ifndef _ASM_SH_TRACE_CLOCK_H
>  #define _ASM_SH_TRACE_CLOCK_H
>  
> -#include <linux/timer.h>
> -#include <asm/clock.h>
> +#include <linux/clocksource.h>
>  
>  /*
>   * Number of hardware clock bits. The higher order bits are expected to be 0.
> @@ -23,11 +22,15 @@
>  /* Expected maximum interrupt latency in ms : 15ms, *2 for security */
>  #define TC_EXPECTED_INTERRUPT_LATENCY	30
>  
> +static struct clocksource *clock;
> +
>  extern u64 trace_clock_read_synthetic_tsc(void);
>  
>  static inline u32 trace_clock_read32(void)
>  {
> -	return get_cycles();
> +	if (likely(clock))
> +		return (u32) clock->read(clock);
> +	return 0;
>  }
>  
>  static inline u64 trace_clock_read64(void)
> @@ -37,13 +40,16 @@ static inline u64 trace_clock_read64(void)
>  
>  static inline u64 trace_clock_frequency(void)
>  {
> -	u64 rate;
> -	struct clk *tmu1_clk;
> +	clock = clocksource_get_next();
>  
> -	tmu1_clk = clk_get(NULL, "tmu1_clk");
> -	rate = clk_get_rate(tmu1_clk);
> +	if (unlikely(!clock)) {
> +		pr_err("%s: clocksource not found\n", __func__);
> +		return 0;
> +	} else
> +		pr_debug("%s: %s clocksource found (rating: %d)\n",
> +			 __func__, clock->name,	clock->rating);
>  
> -	return rate;
> +	return (u64) (clock->rating * 1000000);
>  }
>  
>  static inline u32 trace_clock_freq_scale(void)





More information about the lttng-dev mailing list