Remove rtems_rate_monotonic_postponed_job_count()

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: Add in the verification of the postponed job count for
rtems_rate_monotonic_get_status().

Update #2795.
This commit is contained in:
Kuan-Hsun Chen
2017-01-25 21:47:48 +01:00
committed by Sebastian Huber
parent 27bfcd88f7
commit d7feb8677d
6 changed files with 21 additions and 38 deletions

View File

@@ -23,7 +23,7 @@
/* COPYRIGHT (c) 1989-2009, 2016. /* COPYRIGHT (c) 1989-2009, 2016.
* On-Line Applications Research Corporation (OAR). * 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 * The license and distribution terms for this file may be
* found in the file LICENSE in this distribution or at * found in the file LICENSE in this distribution or at
@@ -182,6 +182,9 @@ typedef struct {
* then this field has no meaning. * then this field has no meaning.
*/ */
rtems_thread_cpu_usage_t executed_since_last_period; 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; } rtems_rate_monotonic_period_status;
/** /**
@@ -417,25 +420,6 @@ rtems_status_code rtems_rate_monotonic_period(
rtems_interval length 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 #ifdef __cplusplus

View File

@@ -9,6 +9,7 @@
* COPYRIGHT (c) 1989-2009. * COPYRIGHT (c) 1989-2009.
* On-Line Applications Research Corporation (OAR). * On-Line Applications Research Corporation (OAR).
* Copyright (c) 2016 embedded brains GmbH. * Copyright (c) 2016 embedded brains GmbH.
* Copyright (c) 2017 Kuan-Hsun Chen.
* *
* The license and distribution terms for this file may be * The license and distribution terms for this file may be
* found in the file LICENSE in this distribution or at * 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->owner = the_period->owner->Object.id;
period_status->state = the_period->state; period_status->state = the_period->state;
period_status->postponed_jobs_count = the_period->postponed_jobs;
if ( the_period->state == RATE_MONOTONIC_INACTIVE ) { if ( the_period->state == RATE_MONOTONIC_INACTIVE ) {
/* /*

View File

@@ -302,20 +302,6 @@ static rtems_status_code _Rate_monotonic_Block_while_expired(
return RTEMS_TIMEOUT; 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_status_code rtems_rate_monotonic_period(
rtems_id id, rtems_id id,
rtems_interval length rtems_interval length

View File

@@ -159,10 +159,18 @@ rtems_task Init(
statistics.missed_count statistics.missed_count
); );
} }
rtems_test_assert( statistics.missed_count == i ); 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(); TEST_END();
rtems_test_exit(0); rtems_test_exit(0);

View File

@@ -1,5 +1,6 @@
# COPYRIGHT (c) 1989-2009. # COPYRIGHT (c) 1989-2009.
# On-Line Applications Research Corporation (OAR). # On-Line Applications Research Corporation (OAR).
# COPYRIGHT (c) 2017 Kuan-Hsun Chen.
# #
# The license and distribution terms for this file may be # The license and distribution terms for this file may be
# found in the file LICENSE in this distribution or at # found in the file LICENSE in this distribution or at
@@ -21,3 +22,4 @@ concepts:
a period is initiated. a period is initiated.
+ Verify the correctness of the status values returned on an active period. + Verify the correctness of the status values returned on an active period.
+ Ensure the missed period count is properly maintained. + Ensure the missed period count is properly maintained.
+ Verify the correctness of the postponed job count.

View File

@@ -2,8 +2,9 @@
rtems_rate_monotonic_get_status - verify values of an inactive period 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 - check RTEMS_NOT_DEFINED
rtems_rate_monotonic_get_status - verify values of an active period rtems_rate_monotonic_get_status - verify values of an active period
wall time should be ~600000000 is 609216000 wall time should be ~600000000 is 609402399
cpu time should be ~100000000 is 109217000 cpu time should be ~100000000 is 109612659
rtems_rate_monotonic_cancel - OK rtems_rate_monotonic_cancel - OK
Testing statistics on missed periods Testing statistics on missed periods
rtems_rate_monotonic_get_status - verify value of a postponed jobs count
*** END OF TEST 69 *** *** END OF TEST 69 ***