[PATCH] Remove use ticks for statistics configure option.

Joel Sherrill joel.sherrill at oarcorp.com
Wed Jun 3 17:42:19 UTC 2015


Are there any comments on this patch? If not, I
am going to push it.

On 5/27/2015 10:16 AM, Joel Sherrill wrote:
> This was obsolete and broken based upon recent time keeping changes.
>
> Thie build option was previously enabled by adding
> USE_TICKS_FOR_STATISTICS=1 to the configure command line.
>
> This propagated into the code as preprocessor conditionals
> using the __RTEMS_USE_TICKS_FOR_STATISTICS__ conditional.
> ---
>   cpukit/configure.ac                            |    5 --
>   cpukit/libcsupport/src/__times.c               |   68 ++++++++----------
>   cpukit/libmisc/cpuuse/cpuusagedata.c           |    6 +--
>   cpukit/libmisc/cpuuse/cpuusagereport.c         |   90 ++++--------------------
>   cpukit/libmisc/cpuuse/cpuusagereset.c          |   26 +++-----
>   cpukit/libmisc/cpuuse/cpuusagetop.c            |   35 ++--------
>   cpukit/libmisc/cpuuse/cpuuse.h                 |   10 +--
>   cpukit/rtems/include/rtems/rtems/ratemon.h     |   16 +---
>   cpukit/rtems/include/rtems/rtems/ratemonimpl.h |   52 +++++---------
>   cpukit/rtems/include/rtems/rtems/types.h       |    6 +--
>   cpukit/rtems/src/ratemongetstatistics.c        |   21 ++----
>   cpukit/rtems/src/ratemongetstatus.c            |   32 +++------
>   cpukit/rtems/src/ratemonperiod.c               |   85 +++++++++-------------
>   cpukit/rtems/src/ratemonreportstatistics.c     |   65 +++--------------
>   cpukit/score/include/rtems/score/thread.h      |    8 +--
>   cpukit/score/src/schedulerdefaulttick.c        |    7 --
>   cpukit/score/src/threaddispatch.c              |   15 +---
>   cpukit/score/src/threadinitialize.c            |    6 +--
>   testsuites/sptests/sp69/init.c                 |   64 ++++++-----------
>   19 files changed, 175 insertions(+), 442 deletions(-)
>
> diff --git a/cpukit/configure.ac b/cpukit/configure.ac
> index 46942c9..c2b8e8d 100644
> --- a/cpukit/configure.ac
> +++ b/cpukit/configure.ac
> @@ -240,11 +240,6 @@ RTEMS_CPUOPT([RTEMS_VERSION],
>     ["]_RTEMS_VERSION["],
>     [RTEMS version string])
>
> -RTEMS_CPUOPT([__RTEMS_USE_TICKS_FOR_STATISTICS__],
> -  [test x"${USE_TICKS_FOR_STATISTICS}" = x"1"],
> -  [1],
> -  [disable nanosecond granularity for statistics])
> -
>   ## Header file differences that need to be known in .h after install
>   RTEMS_CPUOPT([__RTEMS_HAVE_SYS_CPUSET_H__],
>     [test x"${ac_cv_header_sys_cpuset_h}" = x"yes"],
> diff --git a/cpukit/libcsupport/src/__times.c b/cpukit/libcsupport/src/__times.c
> index 895ee6b..e5ec411 100644
> --- a/cpukit/libcsupport/src/__times.c
> +++ b/cpukit/libcsupport/src/__times.c
> @@ -31,9 +31,7 @@
>   #include <errno.h>
>   #include <rtems/seterr.h>
>   #include <rtems/score/todimpl.h>
> -#ifndef __RTEMS_USE_TICKS_FOR_STATISTICS__
> -  #include <rtems/score/timestamp.h>
> -#endif
> +#include <rtems/score/timestamp.h>
>   #include <rtems/score/threadimpl.h>
>
>   /**
> @@ -63,41 +61,35 @@ clock_t _times(
>      *  of ticks since boot and the number of ticks executed by this
>      *  this thread.
>      */
> -
> -  #ifndef __RTEMS_USE_TICKS_FOR_STATISTICS__
> -    {
> -      Timestamp_Control  per_tick;
> -      uint32_t           ticks_of_executing;
> -      uint32_t           fractional_ticks;
> -      Per_CPU_Control   *cpu_self;
> -
> -      _Timestamp_Set(
> -        &per_tick,
> -        rtems_configuration_get_microseconds_per_tick() /
> -            TOD_MICROSECONDS_PER_SECOND,
> -        (rtems_configuration_get_nanoseconds_per_tick() %
> -            TOD_NANOSECONDS_PER_SECOND)
> -      );
> -
> -      cpu_self = _Thread_Dispatch_disable();
> -      executing = _Thread_Executing;
> -      _Thread_Update_cpu_time_used(
> -        executing,
> -        &_Thread_Time_of_last_context_switch
> -      );
> -      _Timestamp_Divide(
> -        &executing->cpu_time_used,
> -        &per_tick,
> -        &ticks_of_executing,
> -        &fractional_ticks
> -      );
> -      _Thread_Dispatch_enable( cpu_self );
> -      ptms->tms_utime = ticks_of_executing * us_per_tick;
> -    }
> -  #else
> -    executing = _Thread_Get_executing();
> -    ptms->tms_utime  = executing->cpu_time_used * us_per_tick;
> -  #endif
> +  {
> +    Timestamp_Control  per_tick;
> +    uint32_t           ticks_of_executing;
> +    uint32_t           fractional_ticks;
> +    Per_CPU_Control   *cpu_self;
> +
> +    _Timestamp_Set(
> +      &per_tick,
> +      rtems_configuration_get_microseconds_per_tick() /
> +         TOD_MICROSECONDS_PER_SECOND,
> +      (rtems_configuration_get_nanoseconds_per_tick() %
> +         TOD_NANOSECONDS_PER_SECOND)
> +    );
> +
> +    cpu_self = _Thread_Dispatch_disable();
> +    executing = _Thread_Executing;
> +    _Thread_Update_cpu_time_used(
> +      executing,
> +      &_Thread_Time_of_last_context_switch
> +    );
> +    _Timestamp_Divide(
> +      &executing->cpu_time_used,
> +      &per_tick,
> +      &ticks_of_executing,
> +      &fractional_ticks
> +    );
> +    _Thread_Dispatch_enable( cpu_self );
> +    ptms->tms_utime = ticks_of_executing * us_per_tick;
> +  }
>     ptms->tms_stime  = ticks * us_per_tick;
>     ptms->tms_cutime = 0;
>     ptms->tms_cstime = 0;
> diff --git a/cpukit/libmisc/cpuuse/cpuusagedata.c b/cpukit/libmisc/cpuuse/cpuusagedata.c
> index ea24db5..661b97e 100644
> --- a/cpukit/libmisc/cpuuse/cpuusagedata.c
> +++ b/cpukit/libmisc/cpuuse/cpuusagedata.c
> @@ -22,8 +22,4 @@
>
>   #include <rtems/cpuuse.h>
>
> -#ifndef __RTEMS_USE_TICKS_FOR_STATISTICS__
> -  Timestamp_Control  CPU_usage_Uptime_at_last_reset;
> -#else
> -  uint32_t           CPU_usage_Ticks_at_last_reset;
> -#endif
> +Timestamp_Control  CPU_usage_Uptime_at_last_reset;
> diff --git a/cpukit/libmisc/cpuuse/cpuusagereport.c b/cpukit/libmisc/cpuuse/cpuusagereport.c
> index 5cba819..98b5f8b 100644
> --- a/cpukit/libmisc/cpuuse/cpuusagereport.c
> +++ b/cpukit/libmisc/cpuuse/cpuusagereport.c
> @@ -44,12 +44,8 @@ void rtems_cpu_usage_report_with_plugin(
>     Objects_Information *information;
>     char                 name[13];
>     uint32_t             ival, fval;
> -  #ifndef __RTEMS_USE_TICKS_FOR_STATISTICS__
> -    Timestamp_Control  uptime, total, ran, uptime_at_last_reset;
> -    uint32_t seconds, nanoseconds;
> -  #else
> -    uint32_t           total_units = 0;
> -  #endif
> +  Timestamp_Control  uptime, total, ran, uptime_at_last_reset;
> +  uint32_t seconds, nanoseconds;
>
>     if ( !print )
>       return;
> @@ -59,38 +55,15 @@ void rtems_cpu_usage_report_with_plugin(
>      *  the number of "ticks" we gave credit for to give the user a rough
>      *  guideline as to what each number means proportionally.
>      */
> -  #ifndef __RTEMS_USE_TICKS_FOR_STATISTICS__
> -    _Timestamp_Set_to_zero( &total );
> -    uptime_at_last_reset = CPU_usage_Uptime_at_last_reset;
> -  #else
> -    for ( api_index = 1 ; api_index <= OBJECTS_APIS_LAST ; api_index++ ) {
> -      #if !defined(RTEMS_POSIX_API) || defined(RTEMS_DEBUG)
> -        if ( !_Objects_Information_table[ api_index ] )
> -          continue;
> -      #endif
> -
> -      information = _Objects_Information_table[ api_index ][ 1 ];
> -      if ( information ) {
> -        for ( i=1 ; i <= information->maximum ; i++ ) {
> -          the_thread = (Thread_Control *)information->local_table[ i ];
> -
> -          if ( the_thread )
> -            total_units += the_thread->cpu_time_used;
> -        }
> -      }
> -    }
> -  #endif
> +  _Timestamp_Set_to_zero( &total );
> +  uptime_at_last_reset = CPU_usage_Uptime_at_last_reset;
>
>     (*print)(
>        context,
>        "-------------------------------------------------------------------------------\n"
>        "                              CPU USAGE BY THREAD\n"
>        "------------+----------------------------------------+---------------+---------\n"
> -     #ifndef __RTEMS_USE_TICKS_FOR_STATISTICS__
> -       " ID         | NAME                                   | SECONDS       | PERCENT\n"
> -     #else
> -       " ID         | NAME                                   | TICKS         | PERCENT\n"
> -     #endif
> +     " ID         | NAME                                   | SECONDS       | PERCENT\n"
>        "------------+----------------------------------------+---------------+---------\n"
>     );
>
> @@ -117,7 +90,6 @@ void rtems_cpu_usage_report_with_plugin(
>             name
>           );
>
> -        #ifndef __RTEMS_USE_TICKS_FOR_STATISTICS__
>           {
>             Timestamp_Control last;
>
> @@ -150,52 +122,20 @@ void rtems_cpu_usage_report_with_plugin(
>               ival, fval
>             );
>           }
> -        #else
> -         if (total_units) {
> -            uint64_t ival_64;
> -
> -            ival_64 = the_thread->cpu_time_used;
> -            ival_64 *= 100000;
> -            ival = ival_64 / total_units;
> -          } else {
> -            ival = 0;
> -          }
> -
> -          fval = ival % 1000;
> -          ival /= 1000;
> -          (*print)( context,
> -            "%14" PRIu32 " |%4" PRIu32 ".%03" PRIu32 "\n",
> -            the_thread->cpu_time_used,
> -            ival,
> -            fval
> -          );
> -        #endif
>         }
>       }
>     }
>
> -  #ifndef __RTEMS_USE_TICKS_FOR_STATISTICS__
> -    seconds = _Timestamp_Get_seconds( &total );
> -    nanoseconds = _Timestamp_Get_nanoseconds( &total ) /
> -      TOD_NANOSECONDS_PER_MICROSECOND;
> -    (*print)(
> -       context,
> -       "------------+----------------------------------------+---------------+---------\n"
> -       " TIME SINCE LAST CPU USAGE RESET IN SECONDS:                    %7" PRIu32 ".%06" PRIu32 "\n"
> -       "-------------------------------------------------------------------------------\n",
> -       seconds, nanoseconds
> -    );
> -  #else
> -    (*print)(
> -       context,
> -       "------------+----------------------------------------+---------------+---------\n"
> -       " TICKS SINCE LAST SYSTEM RESET:                                 %14" PRIu32 "\n"
> -       " TOTAL UNITS:                                                   %14" PRIu32 "\n"
> -       "-------------------------------------------------------------------------------\n",
> -       _Watchdog_Ticks_since_boot - CPU_usage_Ticks_at_last_reset,
> -       total_units
> -    );
> -  #endif
> +  seconds = _Timestamp_Get_seconds( &total );
> +  nanoseconds = _Timestamp_Get_nanoseconds( &total ) /
> +    TOD_NANOSECONDS_PER_MICROSECOND;
> +  (*print)(
> +     context,
> +     "------------+----------------------------------------+---------------+---------\n"
> +     " TIME SINCE LAST CPU USAGE RESET IN SECONDS:                    %7" PRIu32 ".%06" PRIu32 "\n"
> +     "-------------------------------------------------------------------------------\n",
> +     seconds, nanoseconds
> +  );
>   }
>
>   void rtems_cpu_usage_report( void )
> diff --git a/cpukit/libmisc/cpuuse/cpuusagereset.c b/cpukit/libmisc/cpuuse/cpuusagereset.c
> index a167e85..e6c429e 100644
> --- a/cpukit/libmisc/cpuuse/cpuusagereset.c
> +++ b/cpukit/libmisc/cpuuse/cpuusagereset.c
> @@ -27,11 +27,7 @@ static void CPU_usage_Per_thread_handler(
>     Thread_Control *the_thread
>   )
>   {
> -  #ifndef __RTEMS_USE_TICKS_FOR_STATISTICS__
> -    _Timestamp_Set_to_zero( &the_thread->cpu_time_used );
> -  #else
> -    the_thread->cpu_time_used = 0;
> -  #endif
> +  _Timestamp_Set_to_zero( &the_thread->cpu_time_used );
>   }
>
>   /*
> @@ -39,21 +35,17 @@ static void CPU_usage_Per_thread_handler(
>    */
>   void rtems_cpu_usage_reset( void )
>   {
> -  #ifndef __RTEMS_USE_TICKS_FOR_STATISTICS__
> -    uint32_t cpu_count;
> -    uint32_t cpu_index;
> +  uint32_t cpu_count;
> +  uint32_t cpu_index;
>
> -    _TOD_Get_uptime( &CPU_usage_Uptime_at_last_reset );
> +  _TOD_Get_uptime( &CPU_usage_Uptime_at_last_reset );
>
> -    cpu_count = rtems_get_processor_count();
> -    for ( cpu_index = 0 ; cpu_index < cpu_count ; ++cpu_index ) {
> -      Per_CPU_Control *cpu = _Per_CPU_Get_by_index( cpu_index );
> +  cpu_count = rtems_get_processor_count();
> +  for ( cpu_index = 0 ; cpu_index < cpu_count ; ++cpu_index ) {
> +    Per_CPU_Control *cpu = _Per_CPU_Get_by_index( cpu_index );
>
> -      cpu->time_of_last_context_switch = CPU_usage_Uptime_at_last_reset;
> -    }
> -  #else
> -    CPU_usage_Ticks_at_last_reset = _Watchdog_Ticks_since_boot;
> -  #endif
> +    cpu->time_of_last_context_switch = CPU_usage_Uptime_at_last_reset;
> +  }
>
>     rtems_iterate_over_all_threads(CPU_usage_Per_thread_handler);
>   }
> diff --git a/cpukit/libmisc/cpuuse/cpuusagetop.c b/cpukit/libmisc/cpuuse/cpuusagetop.c
> index e4a47fe..eaa192a 100644
> --- a/cpukit/libmisc/cpuuse/cpuusagetop.c
> +++ b/cpukit/libmisc/cpuuse/cpuusagetop.c
> @@ -144,31 +144,14 @@ static inline bool less_than_uint32_t( uint32_t * lhs, uint32_t * rhs )
>       return false;
>   }
>
> -#ifndef __RTEMS_USE_TICKS_FOR_STATISTICS__
> -  #define CPU_usage_Equal_to( _lhs, _rhs ) \
> -          _Timestamp_Equal_to( _lhs, _rhs )
> -#else
> -  #define CPU_usage_Equal_to( _lhs, _rhs ) \
> -          equal_to_uint32_t( _lhs, _rhs )
> -#endif
> +#define CPU_usage_Equal_to( _lhs, _rhs ) \
> +       _Timestamp_Equal_to( _lhs, _rhs )
>
> -#ifndef __RTEMS_USE_TICKS_FOR_STATISTICS__
> -  #define CPU_usage_Set_to_zero( _time ) \
> -         _Timestamp_Set_to_zero( _time )
> -#else
> -  #define CPU_usage_Set_to_zero( _time ) \
> -       do { \
> -         *_time = 0; \
> -       } while (0)
> -#endif
> +#define CPU_usage_Set_to_zero( _time ) \
> +       _Timestamp_Set_to_zero( _time )
>
> -#ifndef __RTEMS_USE_TICKS_FOR_STATISTICS__
> -  #define CPU_usage_Less_than( _lhs, _rhs ) \
> -        _Timestamp_Less_than( _lhs, _rhs )
> -#else
> -  #define CPU_usage_Less_than( _lhs, _rhs ) \
> -         less_than_uint32_t( _lhs, _rhs )
> -#endif
> +#define CPU_usage_Less_than( _lhs, _rhs ) \
> +      _Timestamp_Less_than( _lhs, _rhs )
>
>   static void
>   print_memsize(rtems_cpu_usage_data* data, const uint32_t size, const char* label)
> @@ -581,11 +564,6 @@ void rtems_cpu_usage_top_with_plugin(
>     rtems_printk_plugin_t  print
>   )
>   {
> -#ifdef __RTEMS_USE_TICKS_FOR_STATISTICS__
> -  if ( !print )
> -    return;
> -  (*print)(context, "error: tick kernels not supported\n");
> -#else
>     rtems_status_code      sc;
>     rtems_task_priority    priority;
>     rtems_name             name;
> @@ -714,7 +692,6 @@ void rtems_cpu_usage_top_with_plugin(
>         rtems_event_send(id, RTEMS_EVENT_1);
>       }
>     }
> -#endif
>   }
>
>   void rtems_cpu_usage_top( void )
> diff --git a/cpukit/libmisc/cpuuse/cpuuse.h b/cpukit/libmisc/cpuuse/cpuuse.h
> index 662d905..1e26019 100644
> --- a/cpukit/libmisc/cpuuse/cpuuse.h
> +++ b/cpukit/libmisc/cpuuse/cpuuse.h
> @@ -25,9 +25,7 @@
>   #include <rtems.h>
>   #include <rtems/bspIo.h>
>
> -#ifndef __RTEMS_USE_TICKS_FOR_STATISTICS__
> -  #include <rtems/score/timestamp.h>
> -#endif
> +#include <rtems/score/timestamp.h>
>
>   /**
>    *  @defgroup libmisc_cpuuse CPU Usage
> @@ -39,11 +37,7 @@
>   extern "C" {
>   #endif
>
> -#ifndef __RTEMS_USE_TICKS_FOR_STATISTICS__
> -  extern Timestamp_Control  CPU_usage_Uptime_at_last_reset;
> -#else
> -  extern uint32_t           CPU_usage_Ticks_at_last_reset;
> -#endif
> +extern Timestamp_Control  CPU_usage_Uptime_at_last_reset;
>
>   /*
>    * rtems_cpu_usage_report_with_handler
> diff --git a/cpukit/rtems/include/rtems/rtems/ratemon.h b/cpukit/rtems/include/rtems/rtems/ratemon.h
> index 8701639..3f8ed8b 100644
> --- a/cpukit/rtems/include/rtems/rtems/ratemon.h
> +++ b/cpukit/rtems/include/rtems/rtems/ratemon.h
> @@ -62,25 +62,17 @@ extern "C" {
>    *  This is the public type used for the rate monotonic timing
>    *  statistics.
>    */
> -#ifndef __RTEMS_USE_TICKS_FOR_STATISTICS__
> -  #include <rtems/score/timespec.h>
> +#include <rtems/score/timespec.h>
>
> -  typedef struct timespec rtems_rate_monotonic_period_time_t;
> -#else
> -  typedef uint32_t rtems_rate_monotonic_period_time_t;
> -#endif
> +typedef struct timespec rtems_rate_monotonic_period_time_t;
>
>   /**
>    *  This is the internal type used for the rate monotonic timing
>    *  statistics.
>    */
> -#ifndef __RTEMS_USE_TICKS_FOR_STATISTICS__
> -  #include <rtems/score/timestamp.h>
> +#include <rtems/score/timestamp.h>
>
> -  typedef Timestamp_Control Rate_monotonic_Period_time_t;
> -#else
> -  typedef uint32_t Rate_monotonic_Period_time_t;
> -#endif
> +typedef Timestamp_Control Rate_monotonic_Period_time_t;
>
>   /**
>    *  The following enumerated type defines the states in which a
> diff --git a/cpukit/rtems/include/rtems/rtems/ratemonimpl.h b/cpukit/rtems/include/rtems/rtems/ratemonimpl.h
> index 1489e57..b3aa1cf 100644
> --- a/cpukit/rtems/include/rtems/rtems/ratemonimpl.h
> +++ b/cpukit/rtems/include/rtems/rtems/ratemonimpl.h
> @@ -201,46 +201,30 @@ void _Rate_monotonic_Initiate_statistics(
>    *
>    *  This method resets the statistics information for a period instance.
>    */
> -#ifndef __RTEMS_USE_TICKS_FOR_STATISTICS__
> -  #define _Rate_monotonic_Reset_wall_time_statistics( _the_period ) \
> -     do { \
> -        /* set the minimums to a large value */ \
> -        _Timestamp_Set( \
> -          &(_the_period)->Statistics.min_wall_time, \
> -          0x7fffffff, \
> -          0x7fffffff \
> -        ); \
> -     } while (0)
> -#else
> -  #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
> +#define _Rate_monotonic_Reset_wall_time_statistics( _the_period ) \
> +   do { \
> +      /* set the minimums to a large value */ \
> +      _Timestamp_Set( \
> +       &(_the_period)->Statistics.min_wall_time, \
> +       0x7fffffff, \
> +       0x7fffffff \
> +      ); \
> +   } while (0)
>
>   /**
>    *  @brief Rate_monotonic_Reset_cpu_use_statistics
>    *
>    *  This helper method resets the period CPU usage statistics structure.
>    */
> -#ifndef __RTEMS_USE_TICKS_FOR_STATISTICS__
> -  #define _Rate_monotonic_Reset_cpu_use_statistics( _the_period ) \
> -     do { \
> -        /* set the minimums to a large value */ \
> -        _Timestamp_Set( \
> -          &(_the_period)->Statistics.min_cpu_time, \
> -          0x7fffffff, \
> -          0x7fffffff \
> -        ); \
> -     } while (0)
> -#else
> -  #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
> +#define _Rate_monotonic_Reset_cpu_use_statistics( _the_period ) \
> +   do { \
> +      /* set the minimums to a large value */ \
> +      _Timestamp_Set( \
> +       &(_the_period)->Statistics.min_cpu_time, \
> +       0x7fffffff, \
> +       0x7fffffff \
> +      ); \
> +   } while (0)
>
>   /**
>    *  @brief Rate_monotonic_Reset_statistics
> diff --git a/cpukit/rtems/include/rtems/rtems/types.h b/cpukit/rtems/include/rtems/rtems/types.h
> index fb88116..9789476 100644
> --- a/cpukit/rtems/include/rtems/rtems/types.h
> +++ b/cpukit/rtems/include/rtems/rtems/types.h
> @@ -124,11 +124,7 @@ typedef Watchdog_Interval rtems_interval;
>    * When using nanoseconds granularity timing, RTEMS may internally use a
>    * variety of representations.
>    */
> -#ifndef __RTEMS_USE_TICKS_FOR_STATISTICS__
> -  typedef struct timespec rtems_thread_cpu_usage_t;
> -#else
> -  typedef uint32_t rtems_thread_cpu_usage_t;
> -#endif
> +typedef struct timespec rtems_thread_cpu_usage_t;
>
>   /**
>    * @brief Data structure to manage and manipulate calendar
> diff --git a/cpukit/rtems/src/ratemongetstatistics.c b/cpukit/rtems/src/ratemongetstatistics.c
> index d106f04..6644562 100644
> --- a/cpukit/rtems/src/ratemongetstatistics.c
> +++ b/cpukit/rtems/src/ratemongetstatistics.c
> @@ -46,21 +46,12 @@ rtems_status_code rtems_rate_monotonic_get_statistics(
>         src = &the_period->Statistics;
>         dst->count        = src->count;
>         dst->missed_count = src->missed_count;
> -      #ifndef __RTEMS_USE_TICKS_FOR_STATISTICS__
> -        _Timestamp_To_timespec( &src->min_cpu_time,   &dst->min_cpu_time );
> -        _Timestamp_To_timespec( &src->max_cpu_time,   &dst->max_cpu_time );
> -        _Timestamp_To_timespec( &src->total_cpu_time, &dst->total_cpu_time );
> -        _Timestamp_To_timespec( &src->min_wall_time,   &dst->min_wall_time );
> -        _Timestamp_To_timespec( &src->max_wall_time,   &dst->max_wall_time );
> -        _Timestamp_To_timespec( &src->total_wall_time, &dst->total_wall_time );
> -      #else
> -        dst->min_cpu_time    = src->min_cpu_time;
> -        dst->max_cpu_time    = src->max_cpu_time;
> -        dst->total_cpu_time  = src->total_cpu_time;
> -        dst->min_wall_time   = src->min_wall_time;
> -        dst->max_wall_time   = src->max_wall_time;
> -        dst->total_wall_time = src->total_wall_time;
> -      #endif
> +      _Timestamp_To_timespec( &src->min_cpu_time,   &dst->min_cpu_time );
> +      _Timestamp_To_timespec( &src->max_cpu_time,   &dst->max_cpu_time );
> +      _Timestamp_To_timespec( &src->total_cpu_time, &dst->total_cpu_time );
> +      _Timestamp_To_timespec( &src->min_wall_time,   &dst->min_wall_time );
> +      _Timestamp_To_timespec( &src->max_wall_time,   &dst->max_wall_time );
> +      _Timestamp_To_timespec( &src->total_wall_time, &dst->total_wall_time );
>
>         _Objects_Put( &the_period->Object );
>         return RTEMS_SUCCESSFUL;
> diff --git a/cpukit/rtems/src/ratemongetstatus.c b/cpukit/rtems/src/ratemongetstatus.c
> index 37d524d..b61e234 100644
> --- a/cpukit/rtems/src/ratemongetstatus.c
> +++ b/cpukit/rtems/src/ratemongetstatus.c
> @@ -24,10 +24,7 @@
>   #include <rtems/score/isr.h>
>   #include <rtems/rtems/ratemonimpl.h>
>   #include <rtems/score/thread.h>
> -
> -#ifndef __RTEMS_USE_TICKS_FOR_STATISTICS__
> -  #include <rtems/score/timespec.h>
> -#endif
> +#include <rtems/score/timespec.h>
>
>   rtems_status_code rtems_rate_monotonic_get_status(
>     rtems_id                            id,
> @@ -54,14 +51,8 @@ rtems_status_code rtems_rate_monotonic_get_status(
>          *  If the period is inactive, there is no information.
>          */
>         if ( status->state == RATE_MONOTONIC_INACTIVE ) {
> -        #ifndef __RTEMS_USE_TICKS_FOR_STATISTICS__
> -          _Timespec_Set_to_zero( &status->since_last_period );
> -          _Timespec_Set_to_zero( &status->executed_since_last_period );
> -        #else
> -          status->since_last_period = 0;
> -          status->executed_since_last_period = 0;
> -        #endif
> -
> +       _Timespec_Set_to_zero( &status->since_last_period );
> +       _Timespec_Set_to_zero( &status->executed_since_last_period );
>         } else {
>
>           /*
> @@ -76,17 +67,12 @@ rtems_status_code rtems_rate_monotonic_get_status(
>             return RTEMS_NOT_DEFINED;
>           }
>
> -        #ifndef __RTEMS_USE_TICKS_FOR_STATISTICS__
> -          _Timestamp_To_timespec(
> -            &since_last_period, &status->since_last_period
> -          );
> -          _Timestamp_To_timespec(
> -            &executed, &status->executed_since_last_period
> -          );
> -        #else
> -          status->since_last_period = since_last_period;
> -          status->executed_since_last_period = executed;
> -        #endif
> +       _Timestamp_To_timespec(
> +         &since_last_period, &status->since_last_period
> +       );
> +       _Timestamp_To_timespec(
> +         &executed, &status->executed_since_last_period
> +       );
>         }
>
>         _Objects_Put( &the_period->Object );
> diff --git a/cpukit/rtems/src/ratemonperiod.c b/cpukit/rtems/src/ratemonperiod.c
> index ca278fb..6aefaba 100644
> --- a/cpukit/rtems/src/ratemonperiod.c
> +++ b/cpukit/rtems/src/ratemonperiod.c
> @@ -30,67 +30,50 @@ bool _Rate_monotonic_Get_status(
>     Thread_CPU_usage_t            *cpu_since_last_period
>   )
>   {
> -  #ifndef __RTEMS_USE_TICKS_FOR_STATISTICS__
> -    Timestamp_Control        uptime;
> -  #endif
> -    Thread_Control          *owning_thread = the_period->owner;
> -    Thread_CPU_usage_t       used;
> +  Timestamp_Control        uptime;
> +  Thread_Control          *owning_thread = the_period->owner;
> +  Thread_CPU_usage_t       used;
>
>     /*
>      *  Determine elapsed wall time since period initiated.
>      */
> -  #ifndef __RTEMS_USE_TICKS_FOR_STATISTICS__
> -    _TOD_Get_uptime( &uptime );
> -    _Timestamp_Subtract(
> -      &the_period->time_period_initiated, &uptime, wall_since_last_period
> -    );
> -  #else
> -    *wall_since_last_period =
> -      _Watchdog_Ticks_since_boot - the_period->time_period_initiated;
> -  #endif
> +  _TOD_Get_uptime( &uptime );
> +  _Timestamp_Subtract(
> +    &the_period->time_period_initiated, &uptime, wall_since_last_period
> +  );
>
>     /*
>      *  Determine cpu usage since period initiated.
>      */
>     used = owning_thread->cpu_time_used;
>
> -  #ifndef __RTEMS_USE_TICKS_FOR_STATISTICS__
> -    if (owning_thread == _Thread_Executing) {
> +  if (owning_thread == _Thread_Executing) {
>
> -      Thread_CPU_usage_t ran;
> +    Thread_CPU_usage_t ran;
>
> -      /* How much time time since last context switch */
> -      _Timestamp_Subtract(
> -        &_Thread_Time_of_last_context_switch, &uptime, &ran
> -      );
> +    /* How much time time since last context switch */
> +    _Timestamp_Subtract(
> +      &_Thread_Time_of_last_context_switch, &uptime, &ran
> +    );
>
> -      /* cpu usage += ran */
> -      _Timestamp_Add_to( &used, &ran );
> +    /* cpu usage += ran */
> +    _Timestamp_Add_to( &used, &ran );
>
> -      /*
> -       *  The cpu usage info was reset while executing.  Can't
> -       *  determine a status.
> -       */
> -      if (_Timestamp_Less_than(&used, &the_period->cpu_usage_period_initiated))
> -        return false;
> +    /*
> +     *  The cpu usage info was reset while executing.  Can't
> +     *  determine a status.
> +     */
> +    if (_Timestamp_Less_than(&used, &the_period->cpu_usage_period_initiated))
> +      return false;
>
> -       /* used = current cpu usage - cpu usage at start of period */
> -      _Timestamp_Subtract(
> -         &the_period->cpu_usage_period_initiated,
> -         &used,
> -         cpu_since_last_period
> -      );
> -    }
> -  #else
> -      /*
> -       *  The cpu usage info was reset while executing.  Can't
> -       *  determine a status.
> -       */
> -      if (used < the_period->cpu_usage_period_initiated)
> -        return false;
> +     /* used = current cpu usage - cpu usage at start of period */
> +    _Timestamp_Subtract(
> +       &the_period->cpu_usage_period_initiated,
> +       &used,
> +       cpu_since_last_period
> +    );
> +  }
>
> -      *cpu_since_last_period = used - the_period->cpu_usage_period_initiated;
> -  #endif
>     return true;
>   }
>
> diff --git a/cpukit/rtems/src/ratemonreportstatistics.c b/cpukit/rtems/src/ratemonreportstatistics.c
> index 0b1a320..856d431 100644
> --- a/cpukit/rtems/src/ratemonreportstatistics.c
> +++ b/cpukit/rtems/src/ratemonreportstatistics.c
> @@ -23,12 +23,10 @@
>
>   #include <inttypes.h>
>
> -#ifndef __RTEMS_USE_TICKS_FOR_STATISTICS__
> -  /* We print to 1/10's of milliseconds */
> -  #define NANOSECONDS_DIVIDER 1000
> -  #define PERCENT_FMT     "%04" PRId32
> -  #define NANOSECONDS_FMT "%06" PRId32
> -#endif
> +/* We print to 1/10's of milliseconds */
> +#define NANOSECONDS_DIVIDER 1000
> +#define PERCENT_FMT     "%04" PRId32
> +#define NANOSECONDS_FMT "%06" PRId32
>
>   void rtems_rate_monotonic_report_statistics_with_plugin(
>     void                  *context,
> @@ -45,10 +43,8 @@ void rtems_rate_monotonic_report_statistics_with_plugin(
>       return;
>
>     (*print)( context, "Period information by period\n" );
> -  #ifndef __RTEMS_USE_TICKS_FOR_STATISTICS__
> -    (*print)( context, "--- CPU times are in seconds ---\n" );
> -    (*print)( context, "--- Wall times are in seconds ---\n" );
> -  #endif
> +  (*print)( context, "--- CPU times are in seconds ---\n" );
> +  (*print)( context, "--- Wall times are in seconds ---\n" );
>   /*
>   Layout by columns -- in memory of Hollerith :)
>
> @@ -62,25 +58,11 @@ ididididid NNNN ccccc mmmmmm X
>   1234567890123456789012345678901234567890123456789012345678901234567890123456789\
>   \n");
>   */
> -  (*print)( context, "   ID     OWNER COUNT MISSED     "
> -       #ifndef __RTEMS_USE_TICKS_FOR_STATISTICS__
> -          "     "
> -       #endif
> -          "CPU TIME     "
> -       #ifndef __RTEMS_USE_TICKS_FOR_STATISTICS__
> -          "          "
> -       #endif
> -          "   WALL TIME\n"
> -  );
> -  (*print)( context, "                               "
> -       #ifndef __RTEMS_USE_TICKS_FOR_STATISTICS__
> -          "     "
> -       #endif
> -          "MIN/MAX/AVG    "
> -       #ifndef __RTEMS_USE_TICKS_FOR_STATISTICS__
> -          "          "
> -       #endif
> -          "  MIN/MAX/AVG\n"
> +  (*print)( context,
> +      "   ID     OWNER COUNT MISSED     "
> +      "     CPU TIME                  WALL TIME\n"
> +      "                               "
> +      "     MIN/MAX/AVG                MIN/MAX/AVG\n"
>     );
>
>     /*
> @@ -126,7 +108,6 @@ ididididid NNNN ccccc mmmmmm X
>        *  print CPU Usage part of statistics
>        */
>       {
> -    #ifndef __RTEMS_USE_TICKS_FOR_STATISTICS__
>         struct timespec  cpu_average;
>         struct timespec *min_cpu = &the_stats.min_cpu_time;
>         struct timespec *max_cpu = &the_stats.max_cpu_time;
> @@ -144,25 +125,12 @@ ididididid NNNN ccccc mmmmmm X
>           _Timespec_Get_seconds( &cpu_average ),
>            _Timespec_Get_nanoseconds( &cpu_average ) / NANOSECONDS_DIVIDER
>          );
> -    #else
> -      uint32_t ival_cpu, fval_cpu;
> -
> -      ival_cpu = the_stats.total_cpu_time * 100 / the_stats.count;
> -      fval_cpu = ival_cpu % 100;
> -      ival_cpu /= 100;
> -
> -      (*print)( context,
> -        "%3" PRId32 "/%4" PRId32 "/%3" PRId32 ".%02" PRId32 " ",
> -        the_stats.min_cpu_time, the_stats.max_cpu_time, ival_cpu, fval_cpu
> -      );
> -    #endif
>       }
>
>       /*
>        *  print wall time part of statistics
>        */
>       {
> -    #ifndef __RTEMS_USE_TICKS_FOR_STATISTICS__
>         struct timespec  wall_average;
>         struct timespec *min_wall = &the_stats.min_wall_time;
>         struct timespec *max_wall = &the_stats.max_wall_time;
> @@ -180,17 +148,6 @@ ididididid NNNN ccccc mmmmmm X
>           _Timespec_Get_seconds( &wall_average ),
>             _Timespec_Get_nanoseconds( &wall_average ) / NANOSECONDS_DIVIDER
>         );
> -    #else
> -      uint32_t  ival_wall, fval_wall;
> -
> -      ival_wall = the_stats.total_wall_time * 100 / the_stats.count;
> -      fval_wall = ival_wall % 100;
> -      ival_wall /= 100;
> -      (*print)( context,
> -        "%3" PRId32 "/%4" PRId32 "/%3" PRId32 ".%02" PRId32 "\n",
> -        the_stats.min_wall_time, the_stats.max_wall_time, ival_wall, fval_wall
> -      );
> -    #endif
>       }
>     }
>   }
> diff --git a/cpukit/score/include/rtems/score/thread.h b/cpukit/score/include/rtems/score/thread.h
> index 39fcb17..6f97c69 100644
> --- a/cpukit/score/include/rtems/score/thread.h
> +++ b/cpukit/score/include/rtems/score/thread.h
> @@ -83,13 +83,9 @@ extern "C" {
>    *  The user can define this at configure time and go back to ticks
>    *  resolution.
>    */
> -#ifndef __RTEMS_USE_TICKS_FOR_STATISTICS__
> -  #include <rtems/score/timestamp.h>
> +#include <rtems/score/timestamp.h>
>
> -  typedef Timestamp_Control Thread_CPU_usage_t;
> -#else
> -  typedef uint32_t Thread_CPU_usage_t;
> -#endif
> +typedef Timestamp_Control Thread_CPU_usage_t;
>
>   /**
>    *  The following defines the "return type" of a thread.
> diff --git a/cpukit/score/src/schedulerdefaulttick.c b/cpukit/score/src/schedulerdefaulttick.c
> index db67ca1..19acd3b 100644
> --- a/cpukit/score/src/schedulerdefaulttick.c
> +++ b/cpukit/score/src/schedulerdefaulttick.c
> @@ -31,13 +31,6 @@ void _Scheduler_default_Tick(
>   {
>     (void) scheduler;
>
> -  #ifdef __RTEMS_USE_TICKS_FOR_STATISTICS__
> -    /*
> -     *  Increment the number of ticks this thread has been executing
> -     */
> -    executing->cpu_time_used++;
> -  #endif
> -
>     /*
>      *  If the thread is not preemptible or is not ready, then
>      *  just return.
> diff --git a/cpukit/score/src/threaddispatch.c b/cpukit/score/src/threaddispatch.c
> index f20f427..cce3aff 100644
> --- a/cpukit/score/src/threaddispatch.c
> +++ b/cpukit/score/src/threaddispatch.c
> @@ -99,17 +99,10 @@ void _Thread_Do_dispatch( Per_CPU_Control *cpu_self, ISR_Level level )
>       _ISR_Enable( level );
>   #endif
>
> -    #ifndef __RTEMS_USE_TICKS_FOR_STATISTICS__
> -      _Thread_Update_cpu_time_used(
> -        executing,
> -        &cpu_self->time_of_last_context_switch
> -      );
> -    #else
> -      {
> -        _TOD_Get_uptime( &cpu_self->time_of_last_context_switch );
> -        heir->cpu_time_used++;
> -      }
> -    #endif
> +    _Thread_Update_cpu_time_used(
> +      executing,
> +      &cpu_self->time_of_last_context_switch
> +    );
>
>   #if !defined(__DYNAMIC_REENT__)
>       /*
> diff --git a/cpukit/score/src/threadinitialize.c b/cpukit/score/src/threadinitialize.c
> index 2133d74..d79791b 100644
> --- a/cpukit/score/src/threadinitialize.c
> +++ b/cpukit/score/src/threadinitialize.c
> @@ -216,11 +216,7 @@ bool _Thread_Initialize(
>     /*
>      *  Initialize the CPU usage statistics
>      */
> -  #ifndef __RTEMS_USE_TICKS_FOR_STATISTICS__
> -    _Timestamp_Set_to_zero( &the_thread->cpu_time_used );
> -  #else
> -    the_thread->cpu_time_used = 0;
> -  #endif
> +  _Timestamp_Set_to_zero( &the_thread->cpu_time_used );
>
>     /*
>      * initialize thread's key vaule node chain
> diff --git a/testsuites/sptests/sp69/init.c b/testsuites/sptests/sp69/init.c
> index ecc3846..ac6f58c 100644
> --- a/testsuites/sptests/sp69/init.c
> +++ b/testsuites/sptests/sp69/init.c
> @@ -55,15 +55,10 @@ rtems_task Init(
>     /* Check status values. */
>     rtems_test_assert( period_status.owner == rtems_task_self() );
>     rtems_test_assert( period_status.state == RATE_MONOTONIC_INACTIVE );
> -  #ifndef __RTEMS_USE_TICKS_FOR_STATISTICS__
> -    rtems_test_assert( period_status.since_last_period.tv_sec == 0 );
> -    rtems_test_assert( period_status.since_last_period.tv_nsec == 0 );
> -    rtems_test_assert( period_status.executed_since_last_period.tv_sec == 0 );
> -    rtems_test_assert( period_status.executed_since_last_period.tv_nsec == 0 );
> -  #else
> -    rtems_test_assert( period_status.since_last_period == 0 );
> -    rtems_test_assert( period_status.executed_since_last_period == 0 );
> -  #endif
> +  rtems_test_assert( period_status.since_last_period.tv_sec == 0 );
> +  rtems_test_assert( period_status.since_last_period.tv_nsec == 0 );
> +  rtems_test_assert( period_status.executed_since_last_period.tv_sec == 0 );
> +  rtems_test_assert( period_status.executed_since_last_period.tv_nsec == 0 );
>
>     /*
>      * Check get_status error cases.
> @@ -113,40 +108,25 @@ rtems_task Init(
>     directive_failed( status, "rate_monotonic_get_status" );
>
>     /* Check status values. */
> -  #ifndef __RTEMS_USE_TICKS_FOR_STATISTICS__
>     /* Note: POSIX mandates struct timespec->tv_nsec to be a "long" */
> -    printf(
> -      "wall time should be ~600000000 is %ld\n",
> -      period_status.since_last_period.tv_nsec
> -    );
> -    printf(
> -      "cpu time should be ~100000000 is %ld\n",
> -      period_status.executed_since_last_period.tv_nsec
> -    );
> -    rtems_test_assert( period_status.since_last_period.tv_sec == 0 );
> -    rtems_test_assert( period_status.since_last_period.tv_nsec >= 600000000 );
> -    rtems_test_assert( period_status.since_last_period.tv_nsec <= 610000000 );
> -    rtems_test_assert( period_status.executed_since_last_period.tv_sec == 0 );
> -    rtems_test_assert(
> -      period_status.executed_since_last_period.tv_nsec >= 100000000
> -    );
> -    rtems_test_assert(
> -      period_status.executed_since_last_period.tv_nsec <= 110000000
> -    );
> -  #else
> -    printf(
> -      "wall time should be ~60 is %" PRId32 "\n",
> -      (int) period_status.since_last_period
> -    );
> -    printf(
> -      "cpu time should be ~10 is %" PRId32 "\n",
> -      (int) period_status.executed_since_last_period
> -    );
> -    rtems_test_assert( period_status.since_last_period >= 60 );
> -    rtems_test_assert( period_status.since_last_period <= 61 );
> -    rtems_test_assert( period_status.executed_since_last_period >= 10 );
> -    rtems_test_assert( period_status.executed_since_last_period <= 12 );
> -  #endif
> +  printf(
> +    "wall time should be ~600000000 is %ld\n",
> +    period_status.since_last_period.tv_nsec
> +  );
> +  printf(
> +    "cpu time should be ~100000000 is %ld\n",
> +    period_status.executed_since_last_period.tv_nsec
> +  );
> +  rtems_test_assert( period_status.since_last_period.tv_sec == 0 );
> +  rtems_test_assert( period_status.since_last_period.tv_nsec >= 600000000 );
> +  rtems_test_assert( period_status.since_last_period.tv_nsec <= 610000000 );
> +  rtems_test_assert( period_status.executed_since_last_period.tv_sec == 0 );
> +  rtems_test_assert(
> +    period_status.executed_since_last_period.tv_nsec >= 100000000
> +  );
> +  rtems_test_assert(
> +    period_status.executed_since_last_period.tv_nsec <= 110000000
> +  );
>
>     /* ensure the missed periods are properly accounted for */
>     puts( "rtems_rate_monotonic_cancel -  OK" );
> --
> 1.7.1
>

-- 
Joel Sherrill, Ph.D.             Director of Research & Development
joel.sherrill at OARcorp.com        On-Line Applications Research
Ask me about RTEMS: a free RTOS  Huntsville AL 35805
Support Available                (256) 722-9985


More information about the devel mailing list