On Thu, 2008-07-24 at 08:11 -0700, Darren Hart wrote: > On Wed, 2008-07-23 at 15:23 +0200, Gilles Carry wrote: > > From: gilles.carry <gilles.carry> > > > > The same TSC read (rdtscll) macros and tsc_minus where implemented in three > > different tests. > > This patch put all this into librttest.* > > > > Signed-off-by: Gilles Carry <[EMAIL PROTECTED]> > > Cc: Tim Chavez <[EMAIL PROTECTED]> > > Acked-by: Darren Hart <[EMAIL PROTECTED]>
Committed. Regards-- Subrata > > > > > --- > > .../func/async_handler/async_handler_tsc.c | 33 > > ------------------- > > .../realtime/func/measurement/preempt_timing.c | 20 ----------- > > .../realtime/func/measurement/rdtsc-latency.c | 34 > > -------------------- > > testcases/realtime/include/librttest.h | 26 +++++++++++++++ > > testcases/realtime/lib/librttest.c | 13 +++++++ > > 5 files changed, 39 insertions(+), 87 deletions(-) > > > > diff --git a/testcases/realtime/func/async_handler/async_handler_tsc.c > > b/testcases/realtime/func/async_handler/async_handler_tsc.c > > index 07ecf3d..d93e9a7 100644 > > --- a/testcases/realtime/func/async_handler/async_handler_tsc.c > > +++ b/testcases/realtime/func/async_handler/async_handler_tsc.c > > @@ -70,27 +70,6 @@ atomic_t step; > > pthread_cond_t cond = PTHREAD_COND_INITIALIZER; > > pthread_mutex_t mutex; > > > > -#define ULL_MAX 18446744073709551615ULL // (1 << 64) - 1 > > -#if defined(__i386__) > > -#define rdtscll(val) __asm__ __volatile__("rdtsc" : "=A" (val)) > > -#elif defined(__x86_64__) > > -#define rdtscll(val) \ > > - do { \ > > - uint32_t low, high; \ > > - __asm__ __volatile__ ("rdtsc" : "=a" (low), "=d" (high)); \ > > - val = (uint64_t)high << 32 | low; \ > > - } while(0) > > -#elif defined(__powerpc__) /* 32bit version */ > > -#define rdtscll(val) > > \ > > - do { \ > > - uint32_t tbhi, tblo ; \ > > - __asm__ __volatile__ ("mftbu %0" : "=r" (tbhi)); \ > > - __asm__ __volatile__ ("mftbl %0" : "=r" (tblo)); \ > > - val = 1000 * ((uint64_t) tbhi << 32) | tblo; \ > > - } while(0) > > -#else > > -#error > > -#endif > > > > static int run_jvmsim=0; > > > > @@ -119,18 +98,6 @@ int parse_args(int c, char *v) > > return handled; > > } > > > > -/* return difference in microseconds */ > > -unsigned long long tsc_minus(unsigned long long tsc_start, unsigned long > > long tsc_end) > > -{ > > - unsigned long long delta; > > - if (tsc_start < tsc_end) > > - delta = tsc_end - tsc_start; > > - else { > > - delta = ULL_MAX - (tsc_end - tsc_start) + 1; > > - printf("TSC wrapped, delta=%llu\n", delta); > > - } > > - return delta; > > -} > > > > /* calculate the tsc period */ > > unsigned long long tsc_period_ps(void) > > diff --git a/testcases/realtime/func/measurement/preempt_timing.c > > b/testcases/realtime/func/measurement/preempt_timing.c > > index 989b97b..b0e24d4 100644 > > --- a/testcases/realtime/func/measurement/preempt_timing.c > > +++ b/testcases/realtime/func/measurement/preempt_timing.c > > @@ -55,26 +55,6 @@ > > #include <librttest.h> > > #include <libjvmsim.h> > > > > -#if defined(__i386__) > > -#define rdtscll(val) __asm__ __volatile__("rdtsc" : "=A" (val)) > > -#elif defined(__x86_64__) > > -#define rdtscll(val) \ > > - do { \ > > - uint32_t low, high; \ > > - __asm__ __volatile__ ("rdtsc" : "=a" (low), "=d" (high)); \ > > - val = (uint64_t)high << 32 | low; \ > > - } while(0) > > -#elif defined(__powerpc__) /* 32bit version */ > > -#define rdtscll(val) > > \ > > - do { \ > > - uint32_t tbhi, tblo ; \ > > - __asm__ __volatile__ ("mftbu %0" : "=r" (tbhi)); \ > > - __asm__ __volatile__ ("mftbl %0" : "=r" (tblo)); \ > > - val = 1000 * ((uint64_t) tbhi <<32) | tblo; \ > > - } while(0) > > -#else > > -#error > > -#endif > > > > #define ITERATIONS 1000000ULL > > #define INTERVALS 10 > > diff --git a/testcases/realtime/func/measurement/rdtsc-latency.c > > b/testcases/realtime/func/measurement/rdtsc-latency.c > > index 38883c4..1d266fb 100644 > > --- a/testcases/realtime/func/measurement/rdtsc-latency.c > > +++ b/testcases/realtime/func/measurement/rdtsc-latency.c > > @@ -46,28 +46,6 @@ > > #include <librttest.h> > > > > #define ITERATIONS 1000000 > > -#define ULL_MAX 18446744073709551615ULL // (1 << 64) - 1 > > - > > -#if defined(__i386__) > > -#define rdtscll(val) __asm__ __volatile__("rdtsc" : "=A" (val)) > > -#elif defined(__x86_64__) > > -#define rdtscll(val) \ > > - do { \ > > - uint32_t low, high; \ > > - __asm__ __volatile__ ("rdtsc" : "=a" (low), "=d" (high)); \ > > - val = (uint64_t)high << 32 | low; \ > > - } while(0) > > -#elif defined(__powerpc__) /* 32 bit version */ > > -#define rdtscll(val) > > \ > > - do { \ > > - uint32_t tbhi, tblo ; \ > > - __asm__ __volatile__ ("mftbu %0" : "=r" (tbhi)); \ > > - __asm__ __volatile__ ("mftbl %0" : "=r" (tblo)); \ > > - val = 1000 * ((uint64_t) tbhi <<32) | tblo; \ > > - } while(0) > > -#else > > -#error > > -#endif > > > > void usage(void) > > { > > @@ -100,18 +78,6 @@ unsigned long long tv_minus(struct timeval *tv_start, > > struct timeval *tv_end) > > return nsecs; > > } > > > > -/* return difference in microseconds */ > > -unsigned long long tsc_minus(unsigned long long tsc_start, unsigned long > > long tsc_end) > > -{ > > - unsigned long long delta; > > - if (tsc_start < tsc_end) > > - delta = tsc_end - tsc_start; > > - else { > > - delta = ULL_MAX - (tsc_end - tsc_start) + 1; > > - printf("TSC wrapped, delta=%llu\n", delta); > > - } > > - return delta; > > -} > > > > /* calculate the tsc period */ > > unsigned long long tsc_period_ps(void) > > diff --git a/testcases/realtime/include/librttest.h > > b/testcases/realtime/include/librttest.h > > index 16e1ec9..8f1b362 100644 > > --- a/testcases/realtime/include/librttest.h > > +++ b/testcases/realtime/include/librttest.h > > @@ -96,6 +96,29 @@ typedef struct { volatile int counter; } atomic_t; > > > > #define PRINT_BUFFER_SIZE (1024*1024*4) > > > > +/* TSC macros */ > > +#define ULL_MAX 18446744073709551615ULL // (1 << 64) - 1 > > +#if defined(__i386__) > > +#define rdtscll(val) __asm__ __volatile__("rdtsc" : "=A" (val)) > > +#elif defined(__x86_64__) > > +#define rdtscll(val) \ > > + do { \ > > + uint32_t low, high; \ > > + __asm__ __volatile__ ("rdtsc" : "=a" (low), "=d" (high)); \ > > + val = (uint64_t)high << 32 | low; \ > > + } while(0) > > +#elif defined(__powerpc__) /* 32bit version */ > > +#define rdtscll(val) > > \ > > + do { \ > > + uint32_t tbhi, tblo ; \ > > + __asm__ __volatile__ ("mftbu %0" : "=r" (tbhi)); \ > > + __asm__ __volatile__ ("mftbl %0" : "=r" (tblo)); \ > > + val = 1000 * ((uint64_t) tbhi << 32) | tblo; \ > > + } while(0) > > +#else > > +#error > > +#endif > > + > > extern pthread_mutex_t _buffer_mutex; > > extern char * _print_buffer; > > extern int _print_buffer_offset; > > @@ -312,6 +335,9 @@ void nsec_to_ts(nsec_t ns, struct timespec *ts); > > */ > > int ts_to_nsec(struct timespec *ts, nsec_t *ns); > > > > +/* return difference in microseconds */ > > +unsigned long long tsc_minus(unsigned long long tsc_start, unsigned long > > long tsc_end); > > + > > /* rt_nanosleep: sleep for ns nanoseconds using clock_nanosleep > > */ > > void rt_nanosleep(nsec_t ns); > > diff --git a/testcases/realtime/lib/librttest.c > > b/testcases/realtime/lib/librttest.c > > index 20cb7a1..2fc2513 100644 > > --- a/testcases/realtime/lib/librttest.c > > +++ b/testcases/realtime/lib/librttest.c > > @@ -398,6 +398,19 @@ void nsec_to_ts(nsec_t ns, struct timespec *ts) > > ts->tv_nsec = ns%NS_PER_SEC; > > } > > > > +/* return difference in microseconds */ > > +unsigned long long tsc_minus(unsigned long long tsc_start, unsigned long > > long tsc_end) > > +{ > > + unsigned long long delta; > > + if (tsc_start < tsc_end) > > + delta = tsc_end - tsc_start; > > + else { > > + delta = ULL_MAX - (tsc_end - tsc_start) + 1; > > + printf("TSC wrapped, delta=%llu\n", delta); > > + } > > + return delta; > > +} > > + > > void rt_nanosleep_until(nsec_t ns) { > > struct timespec ts_sleep, ts_rem; > > int rc; ------------------------------------------------------------------------- This SF.Net email is sponsored by the Moblin Your Move Developer's challenge Build the coolest Linux based applications with Moblin SDK & win great prizes Grand prize is a trip for two to an Open Source event anywhere in the world http://moblin-contest.org/redirect.php?banner_id=100&url=/ _______________________________________________ Ltp-list mailing list Ltp-list@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/ltp-list