[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-0002.html>
More information about the devel
mailing list