diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2018-12-05 08:05:54 +0100 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2018-12-07 14:22:00 +0100 |
commit | 03e86553d2839c123fa79ed382ea3ee10bede78c (patch) | |
tree | 50ec0e07dffc2889bd292ffcca81bcb9e7017114 | |
parent | psxtests/Makefile.am: Fix ticket number for ucontext.h (diff) | |
download | rtems-03e86553d2839c123fa79ed382ea3ee10bede78c.tar.bz2 |
tests: Fix rtems_test_spin_until_next_tick()
This bug surfaced due to sporadic failures in sptimecounter02. Adjust
rtems_test_spin_for_ticks() to include the partial tick in the argument
value.
-rw-r--r-- | testsuites/sptests/spedfsched04/init.c | 2 | ||||
-rw-r--r-- | testsuites/support/include/test_support.h | 6 | ||||
-rw-r--r-- | testsuites/support/src/spin.c | 20 |
3 files changed, 13 insertions, 15 deletions
diff --git a/testsuites/sptests/spedfsched04/init.c b/testsuites/sptests/spedfsched04/init.c index e751e2425e..8625f85a86 100644 --- a/testsuites/sptests/spedfsched04/init.c +++ b/testsuites/sptests/spedfsched04/init.c @@ -65,6 +65,8 @@ static rtems_task Task( status = rtems_rate_monotonic_create( Task_name[ argument ], &RM_period ); directive_failed( status, "rtems_rate_monotonic_create" ); + rtems_test_spin_until_next_tick(); + while ( FOREVER ) { status = rtems_rate_monotonic_period( RM_period, Periods[ argument ] ); diff --git a/testsuites/support/include/test_support.h b/testsuites/support/include/test_support.h index 017444ca9d..9c30b3967e 100644 --- a/testsuites/support/include/test_support.h +++ b/testsuites/support/include/test_support.h @@ -11,6 +11,7 @@ #define __TEST_SUPPORT_h #include <stdarg.h> +#include <rtems.h> #ifdef __cplusplus extern "C" { @@ -28,9 +29,10 @@ const char *Get_Too_Long_Name(void); const char *Get_Longest_Name(void); /* - * Spin for specified number of ticks. + * Spin for specified number of ticks. The first tick we spin through is a + * partial one. */ -void rtems_test_spin_for_ticks(int ticks); +void rtems_test_spin_for_ticks(rtems_interval ticks); /* * Spin until the next clock tick diff --git a/testsuites/support/src/spin.c b/testsuites/support/src/spin.c index 5b6d3d484e..57c4e323d5 100644 --- a/testsuites/support/src/spin.c +++ b/testsuites/support/src/spin.c @@ -17,21 +17,15 @@ /* * Burn CPU for specified number of ticks */ -void rtems_test_spin_for_ticks(int ticks) +void rtems_test_spin_for_ticks(rtems_interval ticks) { - rtems_interval start; - rtems_interval now; + rtems_interval start; + rtems_interval now; start = rtems_clock_get_ticks_since_boot(); do { now = rtems_clock_get_ticks_since_boot(); - /* - * Spin for <= ticks so we spin >= number of ticks. - * The first tick we spin through is a partial one. - * So you sping "ticks" number of ticks plus a partial - * one. - */ - } while ( (now-start) <= ticks ); + } while ( now - start < ticks ); } /* @@ -39,11 +33,11 @@ void rtems_test_spin_for_ticks(int ticks) */ void rtems_test_spin_until_next_tick( void ) { - rtems_interval start; - rtems_interval now; + rtems_interval start; + rtems_interval now; start = rtems_clock_get_ticks_since_boot(); do { now = rtems_clock_get_ticks_since_boot(); - } while ( now != start ); + } while ( now == start ); } |