[PATCH 2/2] posix: add clock_nanosleep and tests

Joel Sherrill joel at rtems.org
Sat Jun 11 14:25:53 UTC 2016


Looks good except for the minor issue that in the nanosleep file there is
a mix of (X) and ( X ) for conditionals and method invocations. Fix that
and commit.

FWIW while your head is in clocks, the clock attribute on condition
variables
has been added but is not currently used. I don't know if it has a ticket
offhand.

--joel

On Thu, Jun 9, 2016 at 10:56 AM, Gedare Bloom <gedare at rtems.org> wrote:

> closes #2732
> ---
>  cpukit/posix/src/nanosleep.c                       |  55 ++++++++--
>  testsuites/psxtests/psxhdrs/Makefile.am            |   1 +
>  testsuites/psxtests/psxhdrs/time/clock_nanosleep.c |  35 +++++++
>  testsuites/psxtmtests/Makefile.am                  |   3 +
>  testsuites/psxtmtests/configure.ac                 |   3 +
>  .../psxtmtests/psxtmclocknanosleep01/Makefile.am   |  25 +++++
>  testsuites/psxtmtests/psxtmclocknanosleep01/init.c |  59 +++++++++++
>  .../psxtmclocknanosleep01.doc                      |  12 +++
>  .../psxtmtests/psxtmclocknanosleep02/Makefile.am   |  25 +++++
>  testsuites/psxtmtests/psxtmclocknanosleep02/init.c | 109
> ++++++++++++++++++++
>  .../psxtmclocknanosleep02.doc                      |  10 ++
>  .../psxtmtests/psxtmclocknanosleep03/Makefile.am   |  25 +++++
>  testsuites/psxtmtests/psxtmclocknanosleep03/init.c | 114
> +++++++++++++++++++++
>  .../psxtmclocknanosleep03.doc                      |  10 ++
>  14 files changed, 477 insertions(+), 9 deletions(-)
>  create mode 100644 testsuites/psxtests/psxhdrs/time/clock_nanosleep.c
>  create mode 100644 testsuites/psxtmtests/psxtmclocknanosleep01/Makefile.am
>  create mode 100644 testsuites/psxtmtests/psxtmclocknanosleep01/init.c
>  create mode 100644
> testsuites/psxtmtests/psxtmclocknanosleep01/psxtmclocknanosleep01.doc
>  create mode 100644 testsuites/psxtmtests/psxtmclocknanosleep02/Makefile.am
>  create mode 100644 testsuites/psxtmtests/psxtmclocknanosleep02/init.c
>  create mode 100644
> testsuites/psxtmtests/psxtmclocknanosleep02/psxtmclocknanosleep02.doc
>  create mode 100644 testsuites/psxtmtests/psxtmclocknanosleep03/Makefile.am
>  create mode 100644 testsuites/psxtmtests/psxtmclocknanosleep03/init.c
>  create mode 100644
> testsuites/psxtmtests/psxtmclocknanosleep03/psxtmclocknanosleep03.doc
>
> diff --git a/cpukit/posix/src/nanosleep.c b/cpukit/posix/src/nanosleep.c
> index 8fc86d6..dba5b02 100644
> --- a/cpukit/posix/src/nanosleep.c
> +++ b/cpukit/posix/src/nanosleep.c
> @@ -8,6 +8,8 @@
>  /*
>   *  COPYRIGHT (c) 1989-2015.
>   *  On-Line Applications Research Corporation (OAR).
> + *
> + *  Copyright (c) 2016. Gedare Bloom.
>   *
>   *  The license and distribution terms for this file may be
>   *  found in the file LICENSE in this distribution or at
> @@ -30,12 +32,10 @@
>  static Thread_queue_Control _Nanosleep_Pseudo_queue =
>    THREAD_QUEUE_INITIALIZER( "Nanosleep" );
>
> -/*
> - *  14.2.5 High Resolution Sleep, P1003.1b-1993, p. 269
> - */
> -int nanosleep(
> +static inline int nanosleep_helper(
>    const struct timespec  *rqtp,
> -  struct timespec        *rmtp
> +  struct timespec        *rmtp,
> +  Watchdog_Clock          clock
>  )
>  {
>    /*
> @@ -57,7 +57,7 @@ int nanosleep(
>     *         FSU and GNU/Linux pthreads shares this behavior.
>     */
>    if ( !_Timespec_Is_valid( rqtp ) )
> -    rtems_set_errno_and_return_minus_one( EINVAL );
> +    return EINVAL;
>
>    /*
>     * Convert the timespec delay into the appropriate number of clock
> ticks.
> @@ -93,7 +93,7 @@ int nanosleep(
>      executing,
>      STATES_DELAYING | STATES_INTERRUPTIBLE_BY_SIGNAL,
>      ticks,
> -    WATCHDOG_RELATIVE,
> +    clock,
>      1
>    );
>
> @@ -110,7 +110,7 @@ int nanosleep(
>    /*
>     * If the user wants the time remaining, do the conversion.
>     */
> -  if ( rmtp ) {
> +  if ( rmtp && clock == WATCHDOG_RELATIVE ) {
>      _Timespec_From_ticks( ticks, rmtp );
>    }
>
> @@ -122,8 +122,45 @@ int nanosleep(
>       *  If there is time remaining, then we were interrupted by a signal.
>       */
>      if ( ticks )
> -      rtems_set_errno_and_return_minus_one( EINTR );
> +      return EINTR;
>    #endif
>
>    return 0;
>  }
> +/*
> + *  14.2.5 High Resolution Sleep, P1003.1b-1993, p. 269
> + */
> +int nanosleep(
> +  const struct timespec  *rqtp,
> +  struct timespec        *rmtp
> +)
> +{
> +  int err = nanosleep_helper(rqtp, rmtp, WATCHDOG_RELATIVE);
> +  if (err) {
> +    rtems_set_errno_and_return_minus_one( err );
> +  }
> +  return 0;
> +}
> +
> +/*
> + * High Resolution Sleep with Specifiable Clock, IEEE Std 1003.1, 2001
> + */
> +int clock_nanosleep(
> +  clockid_t               clock_id,
> +  int                     flags,
> +  const struct timespec  *rqtp,
> +  struct timespec        *rmtp
> +)
> +{
> +  int err = 0;
> +  if ( clock_id == CLOCK_REALTIME || clock_id == CLOCK_MONOTONIC ) {
> +    if ( flags & TIMER_ABSTIME ) {
> +      err = nanosleep_helper(rqtp, rmtp, WATCHDOG_ABSOLUTE);
> +    } else {
> +      err = nanosleep_helper(rqtp, rmtp, WATCHDOG_RELATIVE);
> +    }
> +  } else {
> +    err = ENOTSUP;
> +  }
> +  return err;
> +}
> diff --git a/testsuites/psxtests/psxhdrs/Makefile.am
> b/testsuites/psxtests/psxhdrs/Makefile.am
> index 3eecd84..3c60f8d 100644
> --- a/testsuites/psxtests/psxhdrs/Makefile.am
> +++ b/testsuites/psxtests/psxhdrs/Makefile.am
> @@ -95,6 +95,7 @@ lib_a_SOURCES += time/clock.c
>  lib_a_SOURCES += time/clock_getcpuclockid.c
>  lib_a_SOURCES += time/clock_getres.c
>  lib_a_SOURCES += time/clock_gettime.c
> +lib_a_SOURCES += time/clock_nanosleep.c
>  lib_a_SOURCES += time/clock_settime.c
>  lib_a_SOURCES += time/ctime.c
>  lib_a_SOURCES += time/ctime_r.c
> diff --git a/testsuites/psxtests/psxhdrs/time/clock_nanosleep.c
> b/testsuites/psxtests/psxhdrs/time/clock_nanosleep.c
> new file mode 100644
> index 0000000..d13100d
> --- /dev/null
> +++ b/testsuites/psxtests/psxhdrs/time/clock_nanosleep.c
> @@ -0,0 +1,35 @@
> +/*
> + *  This test file is used to verify that the header files associated with
> + *  invoking this function are correct.
> + *
> + *  Copyright (c) 2016 Gedare Bloom.
> + *
> + *  The license and distribution terms for this file may be
> + *  found in the file LICENSE in this distribution or at
> + *  http://www.rtems.org/license/LICENSE.
> + */
> +
> +#ifdef HAVE_CONFIG_H
> +#include "config.h"
> +#endif
> +
> +#include <time.h>
> +
> +#ifndef _POSIX_TIMERS
> +#error "rtems is supposed to have clock_nanosleep"
> +#endif
> +
> +int test( void );
> +
> +int test( void )
> +{
> +  struct timespec rqtp;
> +  struct timespec rmtp;
> +  int             result;
> +
> +  rqtp.tv_sec = 0;
> +  rqtp.tv_nsec = 0;
> +  result = clock_nanosleep( CLOCK_REALTIME, 0, &rqtp, &rmtp );
> +
> +  return result;
> +}
> diff --git a/testsuites/psxtmtests/Makefile.am
> b/testsuites/psxtmtests/Makefile.am
> index c4276a4..e7e079a 100644
> --- a/testsuites/psxtmtests/Makefile.am
> +++ b/testsuites/psxtmtests/Makefile.am
> @@ -7,6 +7,9 @@ SUBDIRS += psxtmbarrier01
>  SUBDIRS += psxtmbarrier02
>  SUBDIRS += psxtmbarrier03
>  SUBDIRS += psxtmbarrier04
> +SUBDIRS += psxtmclocknanosleep01
> +SUBDIRS += psxtmclocknanosleep02
> +SUBDIRS += psxtmclocknanosleep03
>  SUBDIRS += psxtmcond01
>  SUBDIRS += psxtmcond02
>  SUBDIRS += psxtmcond03
> diff --git a/testsuites/psxtmtests/configure.ac b/testsuites/psxtmtests/
> configure.ac
> index 13cf945..b3ab540 100644
> --- a/testsuites/psxtmtests/configure.ac
> +++ b/testsuites/psxtmtests/configure.ac
> @@ -81,6 +81,9 @@ psxtmbarrier01/Makefile
>  psxtmbarrier02/Makefile
>  psxtmbarrier03/Makefile
>  psxtmbarrier04/Makefile
> +psxtmclocknanosleep01/Makefile
> +psxtmclocknanosleep02/Makefile
> +psxtmclocknanosleep03/Makefile
>  psxtmcond01/Makefile
>  psxtmcond02/Makefile
>  psxtmcond03/Makefile
> diff --git a/testsuites/psxtmtests/psxtmclocknanosleep01/Makefile.am
> b/testsuites/psxtmtests/psxtmclocknanosleep01/Makefile.am
> new file mode 100644
> index 0000000..2476b6b
> --- /dev/null
> +++ b/testsuites/psxtmtests/psxtmclocknanosleep01/Makefile.am
> @@ -0,0 +1,25 @@
> +
> +rtems_tests_PROGRAMS = psxtmclocknanosleep01
> +psxtmclocknanosleep01_SOURCES = init.c ../../tmtests/include/timesys.h \
> +    ../../support/src/tmtests_empty_function.c \
> +    ../../support/src/tmtests_support.c
> +
> +dist_rtems_tests_DATA = psxtmclocknanosleep01.doc
> +
> +include $(RTEMS_ROOT)/make/custom/@RTEMS_BSP at .cfg
> +include $(top_srcdir)/../automake/compile.am
> +include $(top_srcdir)/../automake/leaf.am
> +
> +OPERATION_COUNT = @OPERATION_COUNT@
> +AM_CPPFLAGS += -I$(top_srcdir)/../tmtests/include
> +AM_CPPFLAGS += -DOPERATION_COUNT=$(OPERATION_COUNT)
> +AM_CPPFLAGS += -I$(top_srcdir)/../support/include
> +
> +LINK_OBJS = $(psxtmclocknanosleep01_OBJECTS)
> +LINK_LIBS = $(psxtmclocknanosleep01_LDLIBS)
> +
> +psxtmclocknanosleep01$(EXEEXT): $(psxtmclocknanosleep01_OBJECTS)
> $(psxtmclocknanosleep01_DEPENDENCIES)
> +       @rm -f psxtmclocknanosleep01$(EXEEXT)
> +       $(make-exe)
> +
> +include $(top_srcdir)/../automake/local.am
> diff --git a/testsuites/psxtmtests/psxtmclocknanosleep01/init.c
> b/testsuites/psxtmtests/psxtmclocknanosleep01/init.c
> new file mode 100644
> index 0000000..86c1f5f
> --- /dev/null
> +++ b/testsuites/psxtmtests/psxtmclocknanosleep01/init.c
> @@ -0,0 +1,59 @@
> +/*
> + *  COPYRIGHT (c) 1989-2013.
> + *  On-Line Applications Research Corporation (OAR).
> + *
> + *  Copyright (c) 2016. Gedare Bloom.
> + *
> + *  The license and distribution terms for this file may be
> + *  found in the file LICENSE in this distribution or at
> + *  http://www.rtems.org/license/LICENSE.
> + */
> +
> +#ifdef HAVE_CONFIG_H
> +#include "config.h"
> +#endif
> +
> +#include <timesys.h>
> +#include <rtems/btimer.h>
> +#include "test_support.h"
> +
> +const char rtems_test_name[] = "PSXTMCLOCKNANOSLEEP 01";
> +
> +/* forward declarations to avoid warnings */
> +void *POSIX_Init(void *argument);
> +
> +void *POSIX_Init(
> +  void *argument
> +)
> +{
> +  benchmark_timer_t end_time;
> +  struct timespec sleepTime;
> +
> +  sleepTime.tv_sec = 0;
> +  sleepTime.tv_nsec = 0;
> +
> +  TEST_BEGIN();
> +
> +  benchmark_timer_initialize();
> +    clock_nanosleep( CLOCK_REALTIME, 0, &sleepTime, (struct  timespec *)
> NULL );
> +  end_time = benchmark_timer_read();
> +
> +  put_time( "nanosleep: yield", end_time, 1, 0, 0 );
> +
> +  TEST_END();
> +
> +  rtems_test_exit(0);
> +}
> +
> +/* configuration information */
> +
> +#define CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER
> +#define CONFIGURE_APPLICATION_NEEDS_TIMER_DRIVER
> +
> +#define CONFIGURE_MAXIMUM_POSIX_THREADS     1
> +#define CONFIGURE_POSIX_INIT_THREAD_TABLE
> +
> +#define CONFIGURE_INIT
> +
> +#include <rtems/confdefs.h>
> +/* end of file */
> diff --git
> a/testsuites/psxtmtests/psxtmclocknanosleep01/psxtmclocknanosleep01.doc
> b/testsuites/psxtmtests/psxtmclocknanosleep01/psxtmclocknanosleep01.doc
> new file mode 100644
> index 0000000..67370cf
> --- /dev/null
> +++ b/testsuites/psxtmtests/psxtmclocknanosleep01/psxtmclocknanosleep01.doc
> @@ -0,0 +1,12 @@
> +#  Copyright 2016. Gedare Bloom.
> +#
> +#  The license and distribution terms for this file may be
> +#  found in the file LICENSE in this distribution or at
> +#  http://www.rtems.org/license/LICENSE.
> +#
> +
> +This test benchmarks the following operations:
> +
> ++ Benchmark a call to clock_nanosleep() which yields
> +
> +
> diff --git a/testsuites/psxtmtests/psxtmclocknanosleep02/Makefile.am
> b/testsuites/psxtmtests/psxtmclocknanosleep02/Makefile.am
> new file mode 100644
> index 0000000..6e651eb
> --- /dev/null
> +++ b/testsuites/psxtmtests/psxtmclocknanosleep02/Makefile.am
> @@ -0,0 +1,25 @@
> +
> +rtems_tests_PROGRAMS = psxtmclocknanosleep02
> +psxtmclocknanosleep02_SOURCES = init.c ../../tmtests/include/timesys.h \
> +    ../../support/src/tmtests_empty_function.c \
> +    ../../support/src/tmtests_support.c
> +
> +dist_rtems_tests_DATA = psxtmclocknanosleep02.doc
> +
> +include $(RTEMS_ROOT)/make/custom/@RTEMS_BSP at .cfg
> +include $(top_srcdir)/../automake/compile.am
> +include $(top_srcdir)/../automake/leaf.am
> +
> +OPERATION_COUNT = @OPERATION_COUNT@
> +AM_CPPFLAGS += -I$(top_srcdir)/../tmtests/include
> +AM_CPPFLAGS += -DOPERATION_COUNT=$(OPERATION_COUNT)
> +AM_CPPFLAGS += -I$(top_srcdir)/../support/include
> +
> +LINK_OBJS = $(psxtmclocknanosleep02_OBJECTS)
> +LINK_LIBS = $(psxtmclocknanosleep02_LDLIBS)
> +
> +psxtmclocknanosleep02$(EXEEXT): $(psxtmclocknanosleep02_OBJECTS)
> $(psxtmclocknanosleep02_DEPENDENCIES)
> +       @rm -f psxtmclocknanosleep02$(EXEEXT)
> +       $(make-exe)
> +
> +include $(top_srcdir)/../automake/local.am
> diff --git a/testsuites/psxtmtests/psxtmclocknanosleep02/init.c
> b/testsuites/psxtmtests/psxtmclocknanosleep02/init.c
> new file mode 100644
> index 0000000..b35a82b
> --- /dev/null
> +++ b/testsuites/psxtmtests/psxtmclocknanosleep02/init.c
> @@ -0,0 +1,109 @@
> +/*
> + *  COPYRIGHT (c) 1989-2013.
> + *  On-Line Applications Research Corporation (OAR).
> + *
> + *  Copyright (c) 2016. Gedare Bloom.
> + *
> + *  The license and distribution terms for this file may be
> + *  found in the file LICENSE in this distribution or at
> + *  http://www.rtems.org/license/LICENSE.
> + */
> +
> +#ifdef HAVE_CONFIG_H
> +#include "config.h"
> +#endif
> +
> +#include <timesys.h>
> +#include <rtems/btimer.h>
> +#include "test_support.h"
> +
> +#include <pthread.h>
> +
> +const char rtems_test_name[] = "PSXTMCLOCKNANOSLEEP 02";
> +
> +/* forward declarations to avoid warnings */
> +void *POSIX_Init(void *argument);
> +void *Middle(void *argument);
> +void *Low(void *argument);
> +
> +void *Low(
> +  void *argument
> +)
> +{
> +  benchmark_timer_t end_time;
> +
> +  end_time = benchmark_timer_read();
> +
> +  put_time(
> +    "clock_nanosleep: blocking",
> +    end_time,
> +    OPERATION_COUNT,
> +    0,
> +    0
> +  );
> +
> +  TEST_END();
> +
> +  rtems_test_exit( 0 );
> +  return NULL;
> +}
> +
> +void *Middle(
> +  void *argument
> +)
> +{
> +  /* calling nanosleep */
> +  struct timespec sleepTime;
> +  sleepTime.tv_sec = 0;
> +  sleepTime.tv_nsec = 1;
> +
> +  clock_nanosleep(CLOCK_REALTIME, 0, &sleepTime, (struct  timespec *)
> NULL);
> +
> +  return NULL;
> +}
> +
> +void *POSIX_Init(
> +  void *argument
> +)
> +{
> +  int        i;
> +  int        status;
> +  pthread_t  threadId;
> +  struct timespec sleepTime;
> +  struct timespec remainder;
> +
> +  sleepTime.tv_sec = 0;
> +  sleepTime.tv_nsec = 1;
> +  remainder.tv_sec = 0;
> +  remainder.tv_nsec = 0;
> +
> +  TEST_BEGIN();
> +
> +  for ( i=0 ; i < OPERATION_COUNT - 1 ; i++ ) {
> +    status = pthread_create( &threadId, NULL, Middle, NULL );
> +    rtems_test_assert( !status );
> +  }
> +
> +  status = pthread_create( &threadId, NULL, Low, NULL );
> +  rtems_test_assert( !status );
> +
> +  /* start the timer and switch through all the other tasks */
> +  benchmark_timer_initialize();
> +  /* calling clock_nanosleep*/
> +  clock_nanosleep(CLOCK_REALTIME, 0, &sleepTime, &remainder);
> +
> +  return NULL;
> +}
> +
> +/* configuration information */
> +
> +#define CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER
> +#define CONFIGURE_APPLICATION_NEEDS_TIMER_DRIVER
> +
> +#define CONFIGURE_MAXIMUM_POSIX_THREADS     OPERATION_COUNT + 2
> +#define CONFIGURE_POSIX_INIT_THREAD_TABLE
> +
> +#define CONFIGURE_INIT
> +
> +#include <rtems/confdefs.h>
> +  /* end of file */
> diff --git
> a/testsuites/psxtmtests/psxtmclocknanosleep02/psxtmclocknanosleep02.doc
> b/testsuites/psxtmtests/psxtmclocknanosleep02/psxtmclocknanosleep02.doc
> new file mode 100644
> index 0000000..4724ae5
> --- /dev/null
> +++ b/testsuites/psxtmtests/psxtmclocknanosleep02/psxtmclocknanosleep02.doc
> @@ -0,0 +1,10 @@
> +#  Copyright (c) 2016. Gedare Bloom
> +#
> +#  The license and distribution terms for this file may be
> +#  found in the file LICENSE in this distribution or at
> +#  http://www.rtems.org/license/LICENSE.
> +#
> +
> +This test benchmarks the following operations:
> +
> ++ clock_nanosleep - blocking
> diff --git a/testsuites/psxtmtests/psxtmclocknanosleep03/Makefile.am
> b/testsuites/psxtmtests/psxtmclocknanosleep03/Makefile.am
> new file mode 100644
> index 0000000..1c8fb55
> --- /dev/null
> +++ b/testsuites/psxtmtests/psxtmclocknanosleep03/Makefile.am
> @@ -0,0 +1,25 @@
> +
> +rtems_tests_PROGRAMS = psxtmclocknanosleep03
> +psxtmclocknanosleep03_SOURCES = init.c ../../tmtests/include/timesys.h \
> +    ../../support/src/tmtests_empty_function.c \
> +    ../../support/src/tmtests_support.c
> +
> +dist_rtems_tests_DATA = psxtmclocknanosleep03.doc
> +
> +include $(RTEMS_ROOT)/make/custom/@RTEMS_BSP at .cfg
> +include $(top_srcdir)/../automake/compile.am
> +include $(top_srcdir)/../automake/leaf.am
> +
> +OPERATION_COUNT = @OPERATION_COUNT@
> +AM_CPPFLAGS += -I$(top_srcdir)/../tmtests/include
> +AM_CPPFLAGS += -DOPERATION_COUNT=$(OPERATION_COUNT)
> +AM_CPPFLAGS += -I$(top_srcdir)/../support/include
> +
> +LINK_OBJS = $(psxtmclocknanosleep03_OBJECTS)
> +LINK_LIBS = $(psxtmclocknanosleep03_LDLIBS)
> +
> +psxtmclocknanosleep03$(EXEEXT): $(psxtmclocknanosleep03_OBJECTS)
> $(psxtmclocknanosleep03_DEPENDENCIES)
> +       @rm -f psxtmclocknanosleep03$(EXEEXT)
> +       $(make-exe)
> +
> +include $(top_srcdir)/../automake/local.am
> diff --git a/testsuites/psxtmtests/psxtmclocknanosleep03/init.c
> b/testsuites/psxtmtests/psxtmclocknanosleep03/init.c
> new file mode 100644
> index 0000000..ccceada
> --- /dev/null
> +++ b/testsuites/psxtmtests/psxtmclocknanosleep03/init.c
> @@ -0,0 +1,114 @@
> +/*
> + *  COPYRIGHT (c) 1989-2013.
> + *  On-Line Applications Research Corporation (OAR).
> + *
> + *  Copyright (c) 2016. Gedare Bloom.
> + *
> + *  The license and distribution terms for this file may be
> + *  found in the file LICENSE in this distribution or at
> + *  http://www.rtems.org/license/LICENSE.
> + */
> +
> +#ifdef HAVE_CONFIG_H
> +#include "config.h"
> +#endif
> +
> +#include <timesys.h>
> +#include <rtems/btimer.h>
> +#include "test_support.h"
> +
> +#include <pthread.h>
> +
> +const char rtems_test_name[] = "PSXTMCLOCKNANOSLEEP 03";
> +
> +/* forward declarations to avoid warnings */
> +void *POSIX_Init(void *argument);
> +void *Middle(void *argument);
> +void *Low(void *argument);
> +
> +void *Low(
> +  void *argument
> +)
> +{
> +  benchmark_timer_t end_time;
> +
> +  end_time = benchmark_timer_read();
> +
> +  put_time(
> +    "clock_nanosleep: blocking",
> +    end_time,
> +    OPERATION_COUNT,
> +    0,
> +    0
> +  );
> +
> +  TEST_END();
> +
> +  rtems_test_exit( 0 );
> +  return NULL;
> +}
> +
> +void *Middle(
> +  void *argument
> +)
> +{
> +  /* calling nanosleep */
> +  struct timespec sleepTime;
> +  sleepTime.tv_sec = 0;
> +  sleepTime.tv_nsec = 1;
> +
> +  clock_nanosleep(
> +    CLOCK_REALTIME,
> +    TIMER_ABSTIME,
> +    &sleepTime,
> +    (struct timespec *) NULL
> +  );
> +
> +  return NULL;
> +}
> +
> +void *POSIX_Init(
> +  void *argument
> +)
> +{
> +  int        i;
> +  int        status;
> +  pthread_t  threadId;
> +  struct timespec sleepTime;
> +  struct timespec remainder;
> +
> +  sleepTime.tv_sec = 0;
> +  sleepTime.tv_nsec = 1;
> +  remainder.tv_sec = 0;
> +  remainder.tv_nsec = 0;
> +
> +  TEST_BEGIN();
> +
> +  for ( i=0 ; i < OPERATION_COUNT - 1 ; i++ ) {
> +    status = pthread_create( &threadId, NULL, Middle, NULL );
> +    rtems_test_assert( !status );
> +  }
> +
> +  status = pthread_create( &threadId, NULL, Low, NULL );
> +  rtems_test_assert( !status );
> +
> +  /* start the timer and switch through all the other tasks */
> +  benchmark_timer_initialize();
> +  /* calling clock_nanosleep*/
> +  clock_nanosleep(CLOCK_REALTIME, TIMER_ABSTIME, &sleepTime, &remainder);
> +
> +  return NULL;
> +}
> +
> +/* configuration information */
> +
> +#define CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER
> +#define CONFIGURE_APPLICATION_NEEDS_TIMER_DRIVER
> +
> +#define CONFIGURE_MAXIMUM_POSIX_THREADS     OPERATION_COUNT + 2
> +#define CONFIGURE_POSIX_INIT_THREAD_TABLE
> +
> +#define CONFIGURE_INIT
> +
> +#include <rtems/confdefs.h>
> +  /* end of file */
> diff --git
> a/testsuites/psxtmtests/psxtmclocknanosleep03/psxtmclocknanosleep03.doc
> b/testsuites/psxtmtests/psxtmclocknanosleep03/psxtmclocknanosleep03.doc
> new file mode 100644
> index 0000000..8ea20f6
> --- /dev/null
> +++ b/testsuites/psxtmtests/psxtmclocknanosleep03/psxtmclocknanosleep03.doc
> @@ -0,0 +1,10 @@
> +#  Copyright (c) 2016. Gedare Bloom
> +#
> +#  The license and distribution terms for this file may be
> +#  found in the file LICENSE in this distribution or at
> +#  http://www.rtems.org/license/LICENSE.
> +#
> +
> +This test benchmarks the following operations:
> +
> ++ clock_nanosleep - blocking with TIMER_ABSTIME
> --
> 1.9.1
>
> _______________________________________________
> devel mailing list
> devel at rtems.org
> http://lists.rtems.org/mailman/listinfo/devel
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.rtems.org/pipermail/devel/attachments/20160611/f6bfd595/attachment-0001.html>


More information about the devel mailing list