Mirror of the lttng-dev mailing list
 help / color / mirror / Atom feed
* [ltt-dev] [PATCH] Remove PowerPC specific time reading function
@ 2011-02-10  4:50 Yannick Brosseau
  2011-02-10 16:01 ` Mathieu Desnoyers
       [not found] ` <20110210160120.GA961@Krystal>
  0 siblings, 2 replies; 3+ messages in thread
From: Yannick Brosseau @ 2011-02-10  4:50 UTC (permalink / raw)


The PPC version of the trace_clock_read64 was using the TB register
which is not constant accross implementations. The currently
measured time base on PPC was not accurate.
So, for now, we rely on the CLOCK_MONOTONIC.

This patch remove a bunch of #ifdef for x86 and PPC, since we now rely on
the same base clock. It also fix the build on PPC that was currently broken

Signed-off-by: Yannick Brosseau <yannick.brosseau at gmail.com>
---
 include/ust/clock.h |   30 ++----------------------------
 1 files changed, 2 insertions(+), 28 deletions(-)

diff --git a/include/ust/clock.h b/include/ust/clock.h
index 04785fc..5e558f8 100644
--- a/include/ust/clock.h
+++ b/include/ust/clock.h
@@ -39,7 +39,6 @@
    precision and monotonicity.
 */
 
-#if __i386__ || __x86_64__
 /* Only available for x86 arch */
 #define CLOCK_TRACE_FREQ  14
 #define CLOCK_TRACE  15
@@ -47,36 +46,10 @@ union lttng_timespec {
 	struct timespec ts;
 	u64 lttng_ts;
 };
-#endif /* __i386__ || __x86_64__ */
 
 extern int ust_clock_source;
 
 /* Choosing correct trace clock */
-#if __PPC__
-static __inline__ u64 trace_clock_read64(void)
-{
-	unsigned long tb_l;
-	unsigned long tb_h;
-	unsigned long tb_h2;
-	u64 tb;
-
-	__asm__ (
-		"1:\n\t"
-		"mftbu %[rhigh]\n\t"
-		"mftb %[rlow]\n\t"
-		"mftbu %[rhigh2]\n\t"
-		"cmpw %[rhigh],%[rhigh2]\n\t"
-		"bne 1b\n\t"
-		: [rhigh] "=r" (tb_h), [rhigh2] "=r" (tb_h2), [rlow] "=r" (tb_l));
-
-	tb = tb_h;
-	tb <<= 32;
-	tb |= tb_l;
-
-	return tb;
-}
-
-#else	/* !__PPC__ */
 
 static __inline__ u64 trace_clock_read64(void)
 {
@@ -101,17 +74,18 @@ static __inline__ u64 trace_clock_read64(void)
 	return retval;
 }
 
-#endif /* __PPC__ */
 
 static __inline__ u64 trace_clock_frequency(void)
 {
 	struct timespec ts;
 	union lttng_timespec *lts = (union lttng_timespec *) &ts;
 
+#if __i386__ || __x86_64__
 	if (likely(ust_clock_source == CLOCK_TRACE)) {
 		clock_gettime(CLOCK_TRACE_FREQ, &ts);
 		return lts->lttng_ts;
 	}
+#endif
 	return 1000000000LL;
 }
 
-- 
1.7.2.3





^ permalink raw reply	[flat|nested] 3+ messages in thread

* [ltt-dev] [PATCH] Remove PowerPC specific time reading function
  2011-02-10  4:50 [ltt-dev] [PATCH] Remove PowerPC specific time reading function Yannick Brosseau
@ 2011-02-10 16:01 ` Mathieu Desnoyers
       [not found] ` <20110210160120.GA961@Krystal>
  1 sibling, 0 replies; 3+ messages in thread
From: Mathieu Desnoyers @ 2011-02-10 16:01 UTC (permalink / raw)


* Yannick Brosseau (yannick.brosseau at gmail.com) wrote:
> The PPC version of the trace_clock_read64 was using the TB register
> which is not constant accross implementations. The currently
> measured time base on PPC was not accurate.
> So, for now, we rely on the CLOCK_MONOTONIC.
> 
> This patch remove a bunch of #ifdef for x86 and PPC, since we now rely on
> the same base clock. It also fix the build on PPC that was currently broken

Merged, thanks !

We should do a 0.12 bugfix release soon. This is a major showstopper on
ppc.

Mathieu

> 
> Signed-off-by: Yannick Brosseau <yannick.brosseau at gmail.com>
> ---
>  include/ust/clock.h |   30 ++----------------------------
>  1 files changed, 2 insertions(+), 28 deletions(-)
> 
> diff --git a/include/ust/clock.h b/include/ust/clock.h
> index 04785fc..5e558f8 100644
> --- a/include/ust/clock.h
> +++ b/include/ust/clock.h
> @@ -39,7 +39,6 @@
>     precision and monotonicity.
>  */
>  
> -#if __i386__ || __x86_64__
>  /* Only available for x86 arch */
>  #define CLOCK_TRACE_FREQ  14
>  #define CLOCK_TRACE  15
> @@ -47,36 +46,10 @@ union lttng_timespec {
>  	struct timespec ts;
>  	u64 lttng_ts;
>  };
> -#endif /* __i386__ || __x86_64__ */
>  
>  extern int ust_clock_source;
>  
>  /* Choosing correct trace clock */
> -#if __PPC__
> -static __inline__ u64 trace_clock_read64(void)
> -{
> -	unsigned long tb_l;
> -	unsigned long tb_h;
> -	unsigned long tb_h2;
> -	u64 tb;
> -
> -	__asm__ (
> -		"1:\n\t"
> -		"mftbu %[rhigh]\n\t"
> -		"mftb %[rlow]\n\t"
> -		"mftbu %[rhigh2]\n\t"
> -		"cmpw %[rhigh],%[rhigh2]\n\t"
> -		"bne 1b\n\t"
> -		: [rhigh] "=r" (tb_h), [rhigh2] "=r" (tb_h2), [rlow] "=r" (tb_l));
> -
> -	tb = tb_h;
> -	tb <<= 32;
> -	tb |= tb_l;
> -
> -	return tb;
> -}
> -
> -#else	/* !__PPC__ */
>  
>  static __inline__ u64 trace_clock_read64(void)
>  {
> @@ -101,17 +74,18 @@ static __inline__ u64 trace_clock_read64(void)
>  	return retval;
>  }
>  
> -#endif /* __PPC__ */
>  
>  static __inline__ u64 trace_clock_frequency(void)
>  {
>  	struct timespec ts;
>  	union lttng_timespec *lts = (union lttng_timespec *) &ts;
>  
> +#if __i386__ || __x86_64__
>  	if (likely(ust_clock_source == CLOCK_TRACE)) {
>  		clock_gettime(CLOCK_TRACE_FREQ, &ts);
>  		return lts->lttng_ts;
>  	}
> +#endif
>  	return 1000000000LL;
>  }
>  
> -- 
> 1.7.2.3
> 
> 
> _______________________________________________
> 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



^ permalink raw reply	[flat|nested] 3+ messages in thread

* [ltt-dev] [PATCH] Remove PowerPC specific time reading function
       [not found] ` <20110210160120.GA961@Krystal>
@ 2011-02-10 17:54   ` Mathieu Desnoyers
  0 siblings, 0 replies; 3+ messages in thread
From: Mathieu Desnoyers @ 2011-02-10 17:54 UTC (permalink / raw)


* Mathieu Desnoyers (compudj at krystal.dyndns.org) wrote:
> * Yannick Brosseau (yannick.brosseau at gmail.com) wrote:
> > The PPC version of the trace_clock_read64 was using the TB register
> > which is not constant accross implementations. The currently
> > measured time base on PPC was not accurate.
> > So, for now, we rely on the CLOCK_MONOTONIC.
> > 
> > This patch remove a bunch of #ifdef for x86 and PPC, since we now rely on
> > the same base clock. It also fix the build on PPC that was currently broken
> 
> Merged, thanks !
> 
> We should do a 0.12 bugfix release soon. This is a major showstopper on
> ppc.

We should hold the 0.12 release until I finish fixing lots of format
string bugs I found in the source.

Mathieu

> 
> Mathieu
> 
> > 
> > Signed-off-by: Yannick Brosseau <yannick.brosseau at gmail.com>
> > ---
> >  include/ust/clock.h |   30 ++----------------------------
> >  1 files changed, 2 insertions(+), 28 deletions(-)
> > 
> > diff --git a/include/ust/clock.h b/include/ust/clock.h
> > index 04785fc..5e558f8 100644
> > --- a/include/ust/clock.h
> > +++ b/include/ust/clock.h
> > @@ -39,7 +39,6 @@
> >     precision and monotonicity.
> >  */
> >  
> > -#if __i386__ || __x86_64__
> >  /* Only available for x86 arch */
> >  #define CLOCK_TRACE_FREQ  14
> >  #define CLOCK_TRACE  15
> > @@ -47,36 +46,10 @@ union lttng_timespec {
> >  	struct timespec ts;
> >  	u64 lttng_ts;
> >  };
> > -#endif /* __i386__ || __x86_64__ */
> >  
> >  extern int ust_clock_source;
> >  
> >  /* Choosing correct trace clock */
> > -#if __PPC__
> > -static __inline__ u64 trace_clock_read64(void)
> > -{
> > -	unsigned long tb_l;
> > -	unsigned long tb_h;
> > -	unsigned long tb_h2;
> > -	u64 tb;
> > -
> > -	__asm__ (
> > -		"1:\n\t"
> > -		"mftbu %[rhigh]\n\t"
> > -		"mftb %[rlow]\n\t"
> > -		"mftbu %[rhigh2]\n\t"
> > -		"cmpw %[rhigh],%[rhigh2]\n\t"
> > -		"bne 1b\n\t"
> > -		: [rhigh] "=r" (tb_h), [rhigh2] "=r" (tb_h2), [rlow] "=r" (tb_l));
> > -
> > -	tb = tb_h;
> > -	tb <<= 32;
> > -	tb |= tb_l;
> > -
> > -	return tb;
> > -}
> > -
> > -#else	/* !__PPC__ */
> >  
> >  static __inline__ u64 trace_clock_read64(void)
> >  {
> > @@ -101,17 +74,18 @@ static __inline__ u64 trace_clock_read64(void)
> >  	return retval;
> >  }
> >  
> > -#endif /* __PPC__ */
> >  
> >  static __inline__ u64 trace_clock_frequency(void)
> >  {
> >  	struct timespec ts;
> >  	union lttng_timespec *lts = (union lttng_timespec *) &ts;
> >  
> > +#if __i386__ || __x86_64__
> >  	if (likely(ust_clock_source == CLOCK_TRACE)) {
> >  		clock_gettime(CLOCK_TRACE_FREQ, &ts);
> >  		return lts->lttng_ts;
> >  	}
> > +#endif
> >  	return 1000000000LL;
> >  }
> >  
> > -- 
> > 1.7.2.3
> > 
> > 
> > _______________________________________________
> > 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

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




^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2011-02-10 17:54 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2011-02-10  4:50 [ltt-dev] [PATCH] Remove PowerPC specific time reading function Yannick Brosseau
2011-02-10 16:01 ` Mathieu Desnoyers
     [not found] ` <20110210160120.GA961@Krystal>
2011-02-10 17:54   ` Mathieu Desnoyers

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox