From bdf5417eaad505f5c31eabd869ee03755319c90b Mon Sep 17 00:00:00 2001 From: Joel Sherrill Date: Tue, 10 Nov 2009 23:27:01 +0000 Subject: 2009-11-10 Jennifer Averett PR 1462/cpukit * rtems/include/rtems/rtems/ratemon.h, rtems/src/ratemonperiod.c: Fine tune previous patch after analysis in application. --- cpukit/ChangeLog | 6 ++++++ cpukit/rtems/include/rtems/rtems/ratemon.h | 12 ++++++++++-- cpukit/rtems/src/ratemonperiod.c | 25 +++++++++++++++---------- 3 files changed, 31 insertions(+), 12 deletions(-) diff --git a/cpukit/ChangeLog b/cpukit/ChangeLog index 8ddde13bbd..91a0477e31 100644 --- a/cpukit/ChangeLog +++ b/cpukit/ChangeLog @@ -1,3 +1,9 @@ +2009-11-10 Jennifer Averett + + PR 1462/cpukit + * rtems/include/rtems/rtems/ratemon.h, rtems/src/ratemonperiod.c: Fine + tune previous patch after analysis in application. + 2009-10-30 Glenn Humphrey PR pr1462/cpukit diff --git a/cpukit/rtems/include/rtems/rtems/ratemon.h b/cpukit/rtems/include/rtems/rtems/ratemon.h index 4a713ff7e2..03f6cb3c9a 100644 --- a/cpukit/rtems/include/rtems/rtems/ratemon.h +++ b/cpukit/rtems/include/rtems/rtems/ratemon.h @@ -413,7 +413,11 @@ void _Rate_monotonic_Initiate_statistics( (_the_period)->Statistics.min_wall_time.tv_nsec = 0x7fffffff; \ } while (0) #else - #define _Rate_monotonic_Reset_wall_time_statistics( _the_period ) + #define _Rate_monotonic_Reset_wall_time_statistics( _the_period ) \ + do { \ + /* set the minimum to a large value */ \ + (_the_period)->Statistics.min_wall_time = 0xffffffff; \ + } while (0) #endif /** @@ -429,7 +433,11 @@ void _Rate_monotonic_Initiate_statistics( (_the_period)->Statistics.min_cpu_time.tv_nsec = 0x7fffffff; \ } while (0) #else - #define _Rate_monotonic_Reset_cpu_use_statistics( _the_period ) + #define _Rate_monotonic_Reset_cpu_use_statistics( _the_period ) \ + do { \ + /* set the minimum to a large value */ \ + (_the_period)->Statistics.min_cpu_time = 0xffffffff; \ + } while (0) #endif /** diff --git a/cpukit/rtems/src/ratemonperiod.c b/cpukit/rtems/src/ratemonperiod.c index 6641802fff..e59a8a2c62 100644 --- a/cpukit/rtems/src/ratemonperiod.c +++ b/cpukit/rtems/src/ratemonperiod.c @@ -90,9 +90,6 @@ void _Rate_monotonic_Update_statistics( rtems_rate_monotonic_period_statistics *stats; rtems_thread_cpu_usage_t executed; rtems_rate_monotonic_period_time_t since_last_period; - #ifdef RTEMS_ENABLE_NANOSECOND_RATE_MONOTONIC_STATISTICS - rtems_rate_monotonic_period_time_t period_start; - #endif #if defined(RTEMS_ENABLE_NANOSECOND_RATE_MONOTONIC_STATISTICS) || \ defined(RTEMS_ENABLE_NANOSECOND_CPU_USAGE_STATISTICS) struct timespec uptime; @@ -112,7 +109,6 @@ void _Rate_monotonic_Update_statistics( /* * Update the counts. */ - stats = &the_period->Statistics; stats->count++; @@ -122,14 +118,14 @@ void _Rate_monotonic_Update_statistics( /* * Grab basic information for time statistics. */ - #ifdef RTEMS_ENABLE_NANOSECOND_RATE_MONOTONIC_STATISTICS - period_start = the_period->time_at_period; - _Timespec_Subtract( &period_start, &uptime, &since_last_period ); - the_period->time_at_period = uptime; + _Timespec_Subtract( + &the_period->time_at_period, + &uptime, + &since_last_period + ); #else since_last_period = _Watchdog_Ticks_since_boot - the_period->time_at_period; - the_period->time_at_period = _Watchdog_Ticks_since_boot; #endif #ifdef RTEMS_ENABLE_NANOSECOND_CPU_USAGE_STATISTICS @@ -155,6 +151,10 @@ void _Rate_monotonic_Update_statistics( ); } #else + /* partial period, cpu usage info reset while executing. Throw away */ + if (the_period->owner->cpu_time_used < + the_period->owner_executed_at_period) + return; executed = the_period->owner->cpu_time_used - the_period->owner_executed_at_period; #endif @@ -186,6 +186,11 @@ void _Rate_monotonic_Update_statistics( */ #ifndef RTEMS_ENABLE_NANOSECOND_RATE_MONOTONIC_STATISTICS + + /* Sanity check wall time */ + if ( since_last_period < executed) + since_last_period = executed; + stats->total_wall_time += since_last_period; if ( since_last_period < stats->min_wall_time ) @@ -329,7 +334,7 @@ rtems_status_code rtems_rate_monotonic_period( /* * Update statistics from the concluding period */ - _Rate_monotonic_Update_statistics( the_period ); + _Rate_monotonic_Initiate_statistics( the_period ); _ISR_Enable( level ); -- cgit v1.2.3