summaryrefslogtreecommitdiffstats
path: root/cpukit/rtems/src/ratemongetstatus.c
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2021-10-12 08:26:39 +0200
committerSebastian Huber <sebastian.huber@embedded-brains.de>2021-10-25 08:01:02 +0200
commit0221da5f56353c9b238ef51d5a24802ba67b8c56 (patch)
tree4823b8d298eb678c20db4078c2ec8e1e13fa52e5 /cpukit/rtems/src/ratemongetstatus.c
parentscore: Optimize default idle task stack allocator (diff)
downloadrtems-0221da5f56353c9b238ef51d5a24802ba67b8c56.tar.bz2
rtems: Fix rate monotonic statistics
The rate monotonic period statistics were affected by rtems_cpu_usage_reset(). The logic to detect and work around a CPU usage reset was broken. The Thread_Contol::cpu_time_used is changed to contain the processor time used throughout the entire lifetime of the thread. The new member Thread_Contol::cpu_time_used_at_last_reset is added to contain the processor time used at the time of the last reset through rtems_cpu_usage_reset(). This decouples the resets of the CPU usage and the rate monotonic period statistics. Update #4528.
Diffstat (limited to 'cpukit/rtems/src/ratemongetstatus.c')
-rw-r--r--cpukit/rtems/src/ratemongetstatus.c28
1 files changed, 10 insertions, 18 deletions
diff --git a/cpukit/rtems/src/ratemongetstatus.c b/cpukit/rtems/src/ratemongetstatus.c
index 745b52f026..5b46a7a435 100644
--- a/cpukit/rtems/src/ratemongetstatus.c
+++ b/cpukit/rtems/src/ratemongetstatus.c
@@ -31,7 +31,6 @@ rtems_status_code rtems_rate_monotonic_get_status(
{
Rate_monotonic_Control *the_period;
ISR_lock_Context lock_context;
- rtems_status_code status;
if ( period_status == NULL ) {
return RTEMS_INVALID_ADDRESS;
@@ -54,35 +53,28 @@ rtems_status_code rtems_rate_monotonic_get_status(
*/
_Timespec_Set_to_zero( &period_status->since_last_period );
_Timespec_Set_to_zero( &period_status->executed_since_last_period );
- status = RTEMS_SUCCESSFUL;
} else {
Timestamp_Control wall_since_last_period;
Timestamp_Control cpu_since_last_period;
- bool valid_status;
/*
* Grab the current status.
*/
- valid_status = _Rate_monotonic_Get_status(
+ _Rate_monotonic_Get_status(
the_period,
&wall_since_last_period,
&cpu_since_last_period
);
- if ( valid_status ) {
- _Timestamp_To_timespec(
- &wall_since_last_period,
- &period_status->since_last_period
- );
- _Timestamp_To_timespec(
- &cpu_since_last_period,
- &period_status->executed_since_last_period
- );
- status = RTEMS_SUCCESSFUL;
- } else {
- status = RTEMS_NOT_DEFINED;
- }
+ _Timestamp_To_timespec(
+ &wall_since_last_period,
+ &period_status->since_last_period
+ );
+ _Timestamp_To_timespec(
+ &cpu_since_last_period,
+ &period_status->executed_since_last_period
+ );
}
_Rate_monotonic_Release( the_period, &lock_context );
- return status;
+ return RTEMS_SUCCESSFUL;
}