On Mon, 2009-08-24 at 15:12 -0700, Darren Hart wrote: 
> Use librttest arg parsing and init_pi_mutex
> 
> This patch converts pthread_cond_many to use the librttest infrastructure
> for argument parsing and mutex initialization.  The default behavior of the
> test changes from using a non-pi mutex to a pi mutex.  This is because -p
> defaults to 1 in librttest.  We could update run.sh with -p0, but I feel
> inside a realtime testsuite this test should be using PI mutexes anyway.
> 
> Signed-off-by: Darren Hart <[email protected]>

OK. Thanks.

Regards--
Subrata

> Acked-by: Gowrishankar <[email protected]>
> CC: Paul McKenney <[email protected]>
> 
> Index: realtime/perf/latency/pthread_cond_many.c
> ===================================================================
> --- realtime.orig/perf/latency/pthread_cond_many.c    2009-08-03 
> 14:47:01.000000000 -0700
> +++ realtime/perf/latency/pthread_cond_many.c 2009-08-03 14:51:01.000000000 
> -0700
> @@ -24,12 +24,12 @@
>   *
>   * USAGE:
>   *      Use run_auto.sh script in current directory to build and run test.
> - *      Use "-j" to enable jvm simulator.
>   *
>   * AUTHOR
>   *      Paul E. McKenney <[email protected]>
>   *
>   * HISTORY
> + *      librttest parsing, threading, and mutex initialization - Darren Hart
>   *
>   *
>   
> *****************************************************************************/
> @@ -46,10 +46,12 @@
>  #include <librttest.h>
>  #include <libstats.h>
>  #define PASS_US 100
> -pthread_mutex_t child_mutex = PTHREAD_MUTEX_INITIALIZER;
> +pthread_mutex_t child_mutex;
>  volatile int *child_waiting = NULL;
>  double endtime;
>  pthread_cond_t *condlist = NULL;
> +int iterations = 0;
> +int nthreads = 0;
>  int realtime = 0;
>  int broadcast_flag = 0;
>  unsigned long latency = 0;
> @@ -242,42 +244,68 @@
>       printf("Standard Deviation: %f\n", stats_stddev(&dat));
>  }
> 
> -void
> -usage(char *progname)
> +void usage(void)
>  {
> -     fprintf(stderr,
> -             "Usage: %s [--realtime] [--broadcast] iterations nthreads\n",
> -             progname);
> -     printf("currently options are not supported\n");
> -     exit(-1);
> +     rt_help();
> +     printf("pthread_cond_many specific options:\n");
> +     printf("  -r,--realtime   run with realtime priority\n");
> +     printf("  -b,--broadcast  use cond_broadcast instead of cond_signal\n");
> +     printf("  -iITERATIONS    iterations (required)\n");
> +     printf("  -nNTHREADS      number of threads (required)\n");
> +     printf("deprecated unnamed arguments:\n");
> +     printf("  pthread_cond_many [options] iterations nthreads\n");
> +}
> +
> +int parse_args(int c, char *v)
> +{
> +     int handled;
> +        switch (c) {
> +             case 'h':
> +                     usage();
> +                     exit(0);
> +                case 'a':
> +                     broadcast_flag = 1;
> +                        break;
> +             case 'i':
> +                     iterations = atoi(v);
> +                     break;
> +             case 'n':
> +                     nthreads = atoi(v);
> +                     break;
> +             case 'r':
> +                     realtime = 1;
> +                     break;
> +                default:
> +                        handled = 0;
> +                        break;
> +        }
> +        return handled;
>  }
> 
>  int
>  main(int argc, char *argv[])
>  {
> -     int i = 1;
> -     long iter;
> -     long nthreads;
> +     struct option longopts[] = {
> +             {"broadcast", 0, NULL, 'a'},
> +             {"realtime", 0, NULL, 'r'},
> +             {NULL, 0, NULL, 0},
> +     };
>       setup();
> 
> -     while (i < argc) {
> -             if (strcmp(argv[i], "--realtime") == 0) {
> -                     realtime = 1;
> -                     i++;
> -             } else if (strcmp(argv[i], "--broadcast") == 0) {
> -                     broadcast_flag = 1;
> -                     i++;
> -             } else if (argv[i][0] == '-') {
> -                     usage(argv[0]);
> -             } else {
> -                     break;
> -             }
> -     }
> -     if (argc - i < 2) {
> -             usage(argv[0]);
> +     init_pi_mutex(&child_mutex);
> +     rt_init_long("ahi:n:r", longopts, parse_args, argc, argv);
> +
> +     /* Legacy command line arguments support, overrides getopt args. */
> +     if (optind < argc)
> +             iterations = strtol(argv[optind++], NULL, 0);
> +     if (optind < argc)
> +             nthreads = strtol(argv[optind++], NULL, 0);
> +
> +     /* Ensure we have the required arguments. */
> +     if (iterations == 0 || nthreads == 0) {
> +             usage();
> +             exit(1);
>       }
> -     iter = strtol(argv[i], NULL, 0);
> -     nthreads = strtol(argv[i + 1], NULL, 0);
> 
>       child_waiting = (int *)malloc(sizeof(*child_waiting) * nthreads);
>       condlist = (pthread_cond_t *)malloc(sizeof(*condlist) * nthreads);
> @@ -285,7 +313,7 @@
>               fprintf(stderr, "Out of memory\n");
>               exit(-1);
>       }
> -     test_signal(iter, nthreads);
> +     test_signal(iterations, nthreads);
>       printf("\nCriteria: latencies < %d us\n", PASS_US);
>       printf("Result: %s\n", fail ? "FAIL" : "PASS");
>       return 0;
> Index: realtime/perf/latency/run.sh
> ===================================================================
> --- realtime.orig/perf/latency/run.sh 2009-08-03 14:47:01.000000000 -0700
> +++ realtime/perf/latency/run.sh      2009-08-03 14:47:33.000000000 -0700
> @@ -35,11 +35,11 @@
>  rm -f $nthread.$iter.$nproc.*.out
> 
>  i=0
> -./pthread_cond_many --realtime  --broadcast $iter $nthread > 
> $nthread.$iter.$nproc.$i.out &
> +./pthread_cond_many --realtime --broadcast -i $iter -n $nthread > 
> $nthread.$iter.$nproc.$i.out &
>  i=1
>  while test $i -lt $nproc
>  do
> -        ./pthread_cond_many --broadcast $iter $nthread > 
> $nthread.$iter.$nproc.$i.out &
> +        ./pthread_cond_many --broadcast -i $iter -n $nthread > 
> $nthread.$iter.$nproc.$i.out &
>          i=`expr $i + 1`
>  done
>  wait


------------------------------------------------------------------------------
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
[email protected]
https://lists.sourceforge.net/lists/listinfo/ltp-list

Reply via email to