Add a variable named "count" in rtems_rate_monotonic_period_status structure. Revise rtems_rate_monotonic_get_status() for the postponed job count.
sptests/sp69: Revise Add in the verification of the postponed job count for rtems_rate_monotonic_get_status(). Update #2795. --- cpukit/rtems/include/rtems/rtems/ratemon.h | 24 ++++-------------------- cpukit/rtems/src/ratemongetstatus.c | 2 ++ cpukit/rtems/src/ratemonperiod.c | 16 +--------------- testsuites/sptests/sp69/init.c | 8 ++++++++ testsuites/sptests/sp69/sp69.doc | 2 ++ testsuites/sptests/sp69/sp69.scn | 5 +++-- 6 files changed, 20 insertions(+), 37 deletions(-) diff --git a/cpukit/rtems/include/rtems/rtems/ratemon.h b/cpukit/rtems/include/rtems/rtems/ratemon.h index 54ddd05..5616ee9 100644 --- a/cpukit/rtems/include/rtems/rtems/ratemon.h +++ b/cpukit/rtems/include/rtems/rtems/ratemon.h @@ -23,7 +23,7 @@ /* COPYRIGHT (c) 1989-2009, 2016. * On-Line Applications Research Corporation (OAR). - * COPYRIGHT (c) 2016 Kuan-Hsun Chen. + * COPYRIGHT (c) 2016-2017 Kuan-Hsun Chen. * * The license and distribution terms for this file may be * found in the file LICENSE in this distribution or at @@ -182,6 +182,9 @@ typedef struct { * then this field has no meaning. */ rtems_thread_cpu_usage_t executed_since_last_period; + + /** This is the count of postponed jobs of this period. */ + uint32_t postponed_jobs_count; } rtems_rate_monotonic_period_status; /** @@ -417,25 +420,6 @@ rtems_status_code rtems_rate_monotonic_period( rtems_interval length ); -/** - * @brief Return the number of postponed jobs - * - * This is a helper function for runtime monitoring to return - * the number of postponed jobs in this given period. This number - * is only increased by the corresponding watchdog, - * and is decreased by RMS manager with the postponed job releasing. - * - * @param[in] id is the period id - * - * @retval This helper function returns the number of postponed - * jobs with a given period_id. - * - */ -uint32_t rtems_rate_monotonic_postponed_job_count( - rtems_id period_id -); - - /**@}*/ #ifdef __cplusplus diff --git a/cpukit/rtems/src/ratemongetstatus.c b/cpukit/rtems/src/ratemongetstatus.c index 403c6ed..4e6b964 100644 --- a/cpukit/rtems/src/ratemongetstatus.c +++ b/cpukit/rtems/src/ratemongetstatus.c @@ -9,6 +9,7 @@ * COPYRIGHT (c) 1989-2009. * On-Line Applications Research Corporation (OAR). * Copyright (c) 2016 embedded brains GmbH. + * Copyright (c) 2017 Kuan-Hsun Chen. * * The license and distribution terms for this file may be * found in the file LICENSE in this distribution or at @@ -43,6 +44,7 @@ rtems_status_code rtems_rate_monotonic_get_status( period_status->owner = the_period->owner->Object.id; period_status->state = the_period->state; + period_status->postponed_jobs_count = the_period->postponed_jobs; if ( the_period->state == RATE_MONOTONIC_INACTIVE ) { /* diff --git a/cpukit/rtems/src/ratemonperiod.c b/cpukit/rtems/src/ratemonperiod.c index 97547e2..5b5d1dc 100644 --- a/cpukit/rtems/src/ratemonperiod.c +++ b/cpukit/rtems/src/ratemonperiod.c @@ -9,7 +9,7 @@ * COPYRIGHT (c) 1989-2010. * On-Line Applications Research Corporation (OAR). * Copyright (c) 2016 embedded brains GmbH. - * COPYRIGHT (c) 2016 Kuan-Hsun Chen. + * COPYRIGHT (c) 2016-2017 Kuan-Hsun Chen. * * The license and distribution terms for this file may be * found in the file LICENSE in this distribution or at @@ -302,20 +302,6 @@ static rtems_status_code _Rate_monotonic_Block_while_expired( return RTEMS_TIMEOUT; } -uint32_t rtems_rate_monotonic_postponed_job_count( rtems_id period_id ) -{ - Rate_monotonic_Control *the_period; - ISR_lock_Context lock_context; - uint32_t jobs; - - the_period = _Rate_monotonic_Get( period_id, &lock_context ); - _Assert( the_period != NULL ); - - jobs = the_period->postponed_jobs; - _Rate_monotonic_Release( the_period, &lock_context ); - return jobs; -} - rtems_status_code rtems_rate_monotonic_period( rtems_id id, rtems_interval length diff --git a/testsuites/sptests/sp69/init.c b/testsuites/sptests/sp69/init.c index ac6f58c..c38beb8 100644 --- a/testsuites/sptests/sp69/init.c +++ b/testsuites/sptests/sp69/init.c @@ -162,6 +162,14 @@ rtems_task Init( rtems_test_assert( statistics.missed_count == i ); } + + /* Check the status */ + status = rtems_rate_monotonic_get_status( period_id, &period_status ); + directive_failed( status, "rate_monotonic_get_status" ); + puts( + "rtems_rate_monotonic_get_status - verify value of a postponed jobs count" + ); + rtems_test_assert( period_status.postponed_jobs_count == 3 ); TEST_END(); diff --git a/testsuites/sptests/sp69/sp69.doc b/testsuites/sptests/sp69/sp69.doc index fbf0e4e..60aacb8 100644 --- a/testsuites/sptests/sp69/sp69.doc +++ b/testsuites/sptests/sp69/sp69.doc @@ -1,5 +1,6 @@ # COPYRIGHT (c) 1989-2009. # On-Line Applications Research Corporation (OAR). +# COPYRIGHT (c) 2017 Kuan-Hsun Chen. # # The license and distribution terms for this file may be # found in the file LICENSE in this distribution or at @@ -21,3 +22,4 @@ concepts: a period is initiated. + Verify the correctness of the status values returned on an active period. + Ensure the missed period count is properly maintained. ++ Verify the correctness of the postponed job count. diff --git a/testsuites/sptests/sp69/sp69.scn b/testsuites/sptests/sp69/sp69.scn index 654eea0..e102d22 100644 --- a/testsuites/sptests/sp69/sp69.scn +++ b/testsuites/sptests/sp69/sp69.scn @@ -2,8 +2,9 @@ rtems_rate_monotonic_get_status - verify values of an inactive period rtems_rate_monotonic_get_status - check RTEMS_NOT_DEFINED rtems_rate_monotonic_get_status - verify values of an active period -wall time should be ~600000000 is 609216000 -cpu time should be ~100000000 is 109217000 +wall time should be ~600000000 is 609402399 +cpu time should be ~100000000 is 109612659 rtems_rate_monotonic_cancel - OK Testing statistics on missed periods +rtems_rate_monotonic_get_status - verify value of a postponed jobs count *** END OF TEST 69 *** -- 1.9.1 _______________________________________________ devel mailing list devel@rtems.org http://lists.rtems.org/mailman/listinfo/devel