All of lore.kernel.org
 help / color / mirror / Atom feed
From: Giuseppe CAVALLARO <peppe.cavallaro@st.com>
To: Sripathi Kodi <sripathik@in.ibm.com>
Cc: ltp-list@lists.sourceforge.net, amrith <amrith@linux.ibm.com>,
	Gowrishankar <gowrishankar.m@linux.vnet.ibm.com>,
	Sripathi Kodi <sripathik@linux.vnet.ibm.com>
Subject: Re: [LTP] [PATCH] compiling realtime tests for SH.
Date: Fri, 13 Nov 2009 08:40:50 +0100	[thread overview]
Message-ID: <4AFD0D82.6050302@st.com> (raw)
In-Reply-To: <20091112141814.4599b83a@sripathi.in.ibm.com>

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Sripathi Kodi wrote:
> On Mon, 09 Nov 2009 23:09:16 +0530
> Subrata Modak <subrata@linux.vnet.ibm.com> wrote:
> 
>> Hi Giuseppe,
>>
>> Thanks for the patch. Meanwhile i did not find the RT guys saying
>> anything about this patch.
>>
>> Gowri/Amrith/Sripathi,
>>
>> Any views on this patch ?
> 
> Hi Subrata,
> 
> I think separating out the tests that need TSC from the others is
> the right thing to do. In future it may be useful to do something
> similar for atomic_* functions as well.
> 
> In my opinion this patch would have been better split into 2
> parts: one that separates out TSC parts and the other that adds atomic
> functions for SH. That would make changelogs easier to search through
> in future.

if you like I can resend the patch splitted into two parts.
Let me know.
Regards,
Peppe

> Thanks,
> Sripathi.
> 
>> Regards--
>> Subrata
>>
>> ** Also, this fails to apply:
>> patching file testcases/realtime/func/async_handler/async_handler_tsc.c
>> Hunk #1 succeeded at 46 (offset 1 line).
>> Hunk #2 succeeded at 193 (offset 2 lines).
>> patching file testcases/realtime/func/measurement/preempt_timing.c
>> patching file testcases/realtime/func/measurement/rdtsc-latency.c
>> patching file testcases/realtime/include/librttest.h
>> Hunk #2 succeeded at 98 (offset 1 line).
>> Hunk #4 succeeded at 138 (offset 1 line).
>> Hunk #5 succeeded at 337 (offset 8 lines).
>> patching file testcases/realtime/include/libtsc.h
>> ---
>>
>> On Wed, 2009-11-04 at 16:48 +0100, Giuseppe CAVALLARO wrote:
>>> Hoping somebody will find useful it.
>>>
>>> Regards
>>> Peppe
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>> differences
>>> between files
>>> attachment
>>> (ltp-full-20090731-sh_RT.patch)
>>>
>>>
>>> [PATCH] compiling realtime tests for SH.
>>>
>>> This patch adds the atomi_add() define for __sh__;
>>> ltp realtime tests seem to show that it works.
>>>
>>> The patch also moves the tsc macros form the librttest.h
>>> to another header file (named libtsc.h).
>>>
>>> Without this I got the following error and no tests were built.
>>>
>>>  [snip]
>>>  In file included from librttest.c:43:
>>>  ../include/librttest.h:127:2: error: #error 
>>>  ../include/librttest.h:169:2: error: #error 
>>>  In file included from librttest.c:43:
>>>  ../include/librttest.h: In function ‘atomic_add’:
>>>  [snip]
>>>
>>> The tsc macros header is only included in the following tests
>>> (thus where necessary):
>>>
>>>  o async_handler_tsc.c
>>>  o preempt_timing.c
>>>  o rdtsc-latency.c
>>>
>>> Note1: instead of touching the make process the patch allows to build
>>> the tests above also for architecture that do not support tsc, yet.
>>> These tests will fail at run-time with ENOTSUP. A warning will
>>> appear while compiling as well.
>>> hmm, I do know if it is the right solution but it's simple and
>>> a good starting point for me.
>>>
>>> Note2: I've just started running this part of the ltp on stlinux
>>> targets so I cannot provide results and I don't know which
>>> tests will fail.
>>>
>>> Note3: realtime tests continues to build and apparently work on i386.
>>>
>>> Signed-off-by: Giuseppe Cavallaro <peppe.cavallaro@st.com>
>>>
>>> diff -urN
>>> ltp-full-20090731/testcases/realtime.orig/func/async_handler/async_handler_tsc.c ltp-full-20090731/testcases/realtime/func/async_handler/async_handler_tsc.c
>>> ---
>>> ltp-full-20090731/testcases/realtime.orig/func/async_handler/async_handler_tsc.c    2009-11-04 15:55:58.000000000 +0100
>>> +++
>>> ltp-full-20090731/testcases/realtime/func/async_handler/async_handler_tsc.c 2009-11-04 15:39:21.000000000 +0100
>>> @@ -45,6 +45,7 @@
>>>  #include <pthread.h>
>>>  #include <librttest.h>
>>>  #include <libstats.h>
>>> +#include <libtsc.h>
>>>
>>>  #define HANDLER_PRIO 98
>>>  #define SIGNAL_PRIO 99
>>> @@ -190,6 +191,11 @@
>>>  int main(int argc, char *argv[])
>>>  {
>>>         int signal_id, handler_id;
>>> +
>>> +#ifdef TSC_UNSUPPORTED
>>> +       printf("Error: test cannot be executed on an arch wihout
>>> TSC.\n");
>>> +       return ENOTSUP;
>>> +#endif
>>>         setup();
>>>
>>>         rt_init("h", parse_args, argc, argv);
>>> diff -urN
>>> ltp-full-20090731/testcases/realtime.orig/func/measurement/preempt_timing.c ltp-full-20090731/testcases/realtime/func/measurement/preempt_timing.c
>>> ---
>>> ltp-full-20090731/testcases/realtime.orig/func/measurement/preempt_timing.c 2009-11-04 15:55:58.000000000 +0100
>>> +++
>>> ltp-full-20090731/testcases/realtime/func/measurement/preempt_timing.c      2009-11-04 15:39:26.000000000 +0100
>>> @@ -52,7 +52,7 @@
>>>  #include <sys/mman.h>
>>>  #include <stdint.h>
>>>  #include <librttest.h>
>>> -
>>> +#include <libtsc.h>
>>>
>>>  #define ITERATIONS 1000000ULL
>>>  #define INTERVALS 10
>>> @@ -86,6 +86,12 @@
>>>         struct sched_param param;
>>>         cpu_set_t mask;
>>>         int err;
>>> +
>>> +#ifdef TSC_UNSUPPORTED
>>> +       printf("Error: test cannot be executed on an arch wihout
>>> TSC.\n");
>>> +       return ENOTSUP;
>>> +#endif
>>> +
>>>         max = avg = 0;
>>>         min = -1;
>>>         setup();
>>> diff -urN
>>> ltp-full-20090731/testcases/realtime.orig/func/measurement/rdtsc-latency.c ltp-full-20090731/testcases/realtime/func/measurement/rdtsc-latency.c
>>> ---
>>> ltp-full-20090731/testcases/realtime.orig/func/measurement/rdtsc-latency.c  2009-11-04 15:55:58.000000000 +0100
>>> +++
>>> ltp-full-20090731/testcases/realtime/func/measurement/rdtsc-latency.c       2009-11-04 15:38:49.000000000 +0100
>>> @@ -44,6 +44,7 @@
>>>  #include <errno.h>
>>>  #include <stdint.h>
>>>  #include <librttest.h>
>>> +#include <libtsc.h>
>>>
>>>  #define ITERATIONS 1000000
>>>
>>> @@ -101,6 +102,12 @@
>>>         unsigned long long deltas[ITERATIONS];
>>>         unsigned long long max, min, avg, tsc_a, tsc_b, tsc_period;
>>>         struct sched_param param;
>>> +
>>> +#ifdef TSC_UNSUPPORTED
>>> +       printf("Error: test cannot be executed on an arch wihout
>>> TSC.\n");
>>> +       return ENOTSUP;
>>> +#endif
>>> +
>>>         setup();
>>>
>>>         rt_init("h",parse_args,argc,argv);
>>> diff -urN
>>> ltp-full-20090731/testcases/realtime.orig/include/librttest.h
>>> ltp-full-20090731/testcases/realtime/include/librttest.h
>>> ---
>>> ltp-full-20090731/testcases/realtime.orig/include/librttest.h       2009-11-04 15:55:58.000000000 +0100
>>> +++
>>> ltp-full-20090731/testcases/realtime/include/librttest.h    2009-11-04
>>> 14:21:22.000000000 +0100
>>> @@ -36,6 +36,7 @@
>>>   *      2006-May-09: improved command line argument handling
>>>   *      2007-Jul-12: Added latency tracing functions -- Josh Triplett
>>>   *      2007-Jul-26: Renamed to librttest.h -- Josh Triplett
>>> + *      2009-Nov-4: TSC macros within another header -- Giuseppe
>>> Cavallaro
>>>   *
>>>
>>> *****************************************************************************/
>>>
>>> @@ -96,36 +97,7 @@
>>>  #define thread_quit(T) (((T)->flags) & THREAD_QUIT)
>>>
>>>  #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__)
>>> -#if defined(__powerpc64__)     /* 64bit version */
>>> -#define rdtscll(val)                                   \
>>> -       do
>>> {                                                            \
>>> -               __asm__ __volatile__ ("mfspr %0, 268" :
>>> "=r" (val));    \
>>> -       } while(0)
>>> -#else  /*__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)
>>> -#endif
>>> -#else
>>> -#error
>>> -#endif
>>>
>>>  extern pthread_mutex_t _buffer_mutex;
>>>  extern char * _print_buffer;
>>> @@ -135,7 +107,7 @@
>>>
>>>  /* function prototypes */
>>>
>>> -/* atomic_add - add integer to atomic variable
>>> +/* atomic_add - add integer to atomic variable and returns a value.
>>>   * i: integer value to add
>>>   * v: pointer of type atomic_t
>>>   */
>>> @@ -165,6 +137,20 @@
>>>         : "cc", "memory");
>>>
>>>         return t;
>>> +#elif defined(__sh__)
>>> +       unsigned long t;
>>> +
>>> +       __asm__ __volatile__ (
>>> +"1:     movli.l @%2, %0         ! atomic_add_return     \n"
>>> +"       add     %1, %0                           \n"
>>> +"       movco.l %0, @%2                                 \n"
>>> +"       bf      1b                                   \n"
>>> +"       synco                                     \n"
>>> +       : "=&z" (t)
>>> +       : "r" (i), "r" (&v->counter)
>>> +       : "t");
>>> +
>>> +       return t;
>>>  #else
>>>  #error
>>>  #endif
>>> @@ -343,7 +329,6 @@
>>>   */
>>>  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
>>> diff -urN ltp-full-20090731/testcases/realtime.orig/include/libtsc.h
>>> ltp-full-20090731/testcases/realtime/include/libtsc.h
>>> ---
>>> ltp-full-20090731/testcases/realtime.orig/include/libtsc.h  1970-01-01
>>> 01:00:00.000000000 +0100
>>> +++
>>> ltp-full-20090731/testcases/realtime/include/libtsc.h       2009-11-04
>>> 15:41:03.000000000 +0100
>>> @@ -0,0 +1,72 @@
>>> +/******************************************************************************
>>> + *
>>> + *   Copyright © International Business Machines  Corp., 2006-2008
>>> + *
>>> + *   This program is free software;  you can redistribute it and/or
>>> modify
>>> + *   it under the terms of the GNU General Public License as
>>> published by
>>> + *   the Free Software Foundation; either version 2 of the License,
>>> or
>>> + *   (at your option) any later version.
>>> + *
>>> + *   This program is distributed in the hope that it will be useful,
>>> + *   but WITHOUT ANY WARRANTY;  without even the implied warranty of
>>> + *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See
>>> + *   the GNU General Public License for more details.
>>> + *
>>> + *   You should have received a copy of the GNU General Public
>>> License
>>> + *   along with this program;  if not, write to the Free Software
>>> + *   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
>>> 02111-1307 USA
>>> + *
>>> + * NAME
>>> + *       libtsc.h
>>> + *
>>> + * DESCRIPTION
>>> + *
>>> + * USAGE:
>>> + *       To be included in some testcases.
>>> + *
>>> + * AUTHOR
>>> + *        Darren Hart <dvhltc@us.ibm.com>
>>> + *        Giuseppe Cavallaro <peppe.cavallarost.com>
>>> + *
>>> + * HISTORY
>>> + *      It directly comes from the librttest.h (see its HISTORY).
>>> + *
>>> +
>>> *****************************************************************************/
>>> +
>>> +#undef TSC_UNSUPPORTED
>>> +
>>> +/* TSC macros */
>>> +#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__)
>>> +#if defined(__powerpc64__)     /* 64bit version */
>>> +#define rdtscll(val)                                   \
>>> +       do
>>> {                                                            \
>>> +               __asm__ __volatile__ ("mfspr %0, 268" :
>>> "=r" (val));    \
>>> +       } while (0)
>>> +#else  /*__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)
>>> +#endif
>>> +#else
>>> +#warning TSC UNSUPPORTED
>>> +/* All tests will be compiled also for the
>>> + * architecture without TSC support (e.g. SH).
>>> + * At run-time these will fail with ENOTSUP.
>>> + */
>>> +#define rdtscll(val)   do {  } while (0)
>>> +#define TSC_UNSUPPORTED
>>> +#endif
>>> +
>>>
>>
>> ------------------------------------------------------------------------------
>> Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day 
>> trial. Simplify your report design, integration and deployment - and focus on 
>> what you do best, core application coding. Discover what's new with
>> Crystal Reports now.  http://p.sf.net/sfu/bobj-july
>> _______________________________________________
>> Ltp-list mailing list
>> Ltp-list@lists.sourceforge.net
>> https://lists.sourceforge.net/lists/listinfo/ltp-list
> 

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.9 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org

iEYEARECAAYFAkr9DXwACgkQ2Xo3j31MSSKO7wCgsH3KAqveTZfPlZhTeQDMLrMl
+w4An0XRbe7MZQa/Nk5Rs6D58rvIHIZk
=MRBR
-----END PGP SIGNATURE-----

------------------------------------------------------------------------------
Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day 
trial. Simplify your report design, integration and deployment - and focus on 
what you do best, core application coding. Discover what's new with
Crystal Reports now.  http://p.sf.net/sfu/bobj-july
_______________________________________________
Ltp-list mailing list
Ltp-list@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/ltp-list

  reply	other threads:[~2009-11-13  7:41 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-11-04 15:48 [LTP] [PATCH] compiling realtime tests for SH Giuseppe CAVALLARO
2009-11-09 17:39 ` Subrata Modak
2009-11-12  8:48   ` Sripathi Kodi
2009-11-13  7:40     ` Giuseppe CAVALLARO [this message]
2009-11-16  8:13       ` Subrata Modak
2009-11-16 10:53         ` Giuseppe CAVALLARO
2009-11-16 13:39           ` Subrata Modak

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=4AFD0D82.6050302@st.com \
    --to=peppe.cavallaro@st.com \
    --cc=amrith@linux.ibm.com \
    --cc=gowrishankar.m@linux.vnet.ibm.com \
    --cc=ltp-list@lists.sourceforge.net \
    --cc=sripathik@in.ibm.com \
    --cc=sripathik@linux.vnet.ibm.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.