diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2018-11-26 08:25:36 +0100 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2018-11-26 08:29:33 +0100 |
commit | 5fc727fe77a632f9df38161a8474007dab020608 (patch) | |
tree | c4df78b97e8a86087d8ed0e265324d160b9ce846 | |
parent | score: Introduce <rtems/score/heapinfo.h> (diff) | |
download | rtems-5fc727fe77a632f9df38161a8474007dab020608.tar.bz2 |
score: <rtems/score/smplockstats.h>
Remove <rtems/score/chainimpl.h> include from
<rtems/score/smplockstats.h>.
Close #3598.
-rw-r--r-- | cpukit/include/rtems/score/smplockstats.h | 34 | ||||
-rw-r--r-- | cpukit/score/src/profilingsmplock.c | 23 |
2 files changed, 33 insertions, 24 deletions
diff --git a/cpukit/include/rtems/score/smplockstats.h b/cpukit/include/rtems/score/smplockstats.h index 4b30ce2f3a..c434b15cb2 100644 --- a/cpukit/include/rtems/score/smplockstats.h +++ b/cpukit/include/rtems/score/smplockstats.h @@ -7,7 +7,7 @@ */ /* - * Copyright (c) 2013, 2016 embedded brains GmbH + * Copyright (c) 2013, 2018 embedded brains GmbH * * The license and distribution terms for this file may be * found in the file LICENSE in this distribution or at @@ -17,15 +17,11 @@ #ifndef _RTEMS_SCORE_SMPLOCKSTATS_H #define _RTEMS_SCORE_SMPLOCKSTATS_H -#include <rtems/score/cpuopts.h> +#include <rtems/score/cpu.h> #if defined(RTEMS_SMP) -#if defined(RTEMS_PROFILING) -#include <rtems/score/chainimpl.h> - -#include <stdint.h> -#endif +#include <rtems/score/chain.h> #ifdef __cplusplus extern "C" { @@ -171,7 +167,10 @@ static inline void _SMP_lock_Stats_initialize( */ void _SMP_lock_Stats_destroy( SMP_lock_Stats *stats ); -void _SMP_lock_Stats_register( SMP_lock_Stats *stats ); +void _SMP_lock_Stats_register_or_max_section_time( + SMP_lock_Stats *stats, + CPU_Counter_ticks max_section_time +); typedef struct { CPU_Counter_ticks first; @@ -223,19 +222,20 @@ static inline void _SMP_lock_Stats_release_update( const SMP_lock_Stats_context *stats_context ) { - SMP_lock_Stats *stats = stats_context->stats; - CPU_Counter_ticks first = stats_context->acquire_instant; - CPU_Counter_ticks second = _CPU_Counter_read(); - CPU_Counter_ticks delta = _CPU_Counter_difference( second, first ); + SMP_lock_Stats *stats; + CPU_Counter_ticks first; + CPU_Counter_ticks second; + CPU_Counter_ticks delta; + + stats = stats_context->stats; + first = stats_context->acquire_instant; + second = _CPU_Counter_read(); + delta = _CPU_Counter_difference( second, first ); stats->total_section_time += delta; if ( stats->max_section_time < delta ) { - stats->max_section_time = delta; - - if ( _Chain_Is_node_off_chain( &stats->Node ) ) { - _SMP_lock_Stats_register( stats ); - } + _SMP_lock_Stats_register_or_max_section_time( stats, delta ); } } diff --git a/cpukit/score/src/profilingsmplock.c b/cpukit/score/src/profilingsmplock.c index 6d573a71f6..7040fa25ec 100644 --- a/cpukit/score/src/profilingsmplock.c +++ b/cpukit/score/src/profilingsmplock.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014 embedded brains GmbH. All rights reserved. + * Copyright (c) 2014, 2018 embedded brains GmbH. All rights reserved. * * embedded brains GmbH * Dornierstr. 4 @@ -17,6 +17,7 @@ #endif #include <rtems/score/smplock.h> +#include <rtems/score/chainimpl.h> #include <string.h> @@ -81,14 +82,22 @@ void _SMP_lock_Stats_destroy( SMP_lock_Stats *stats ) } } -void _SMP_lock_Stats_register( SMP_lock_Stats *stats ) +void _SMP_lock_Stats_register_or_max_section_time( + SMP_lock_Stats *stats, + CPU_Counter_ticks max_section_time +) { - SMP_lock_Stats_control *control = &_SMP_lock_Stats_control; - SMP_lock_Context lock_context; + stats->max_section_time = max_section_time; + + if ( _Chain_Is_node_off_chain( &stats->Node ) ) { + SMP_lock_Stats_control *control; + SMP_lock_Context lock_context; - _SMP_lock_ISR_disable_and_acquire( &control->Lock, &lock_context ); - _Chain_Append_unprotected( &control->Stats_chain, &stats->Node ); - _SMP_lock_Release_and_ISR_enable( &control->Lock, &lock_context ); + control = &_SMP_lock_Stats_control; + _SMP_lock_ISR_disable_and_acquire( &control->Lock, &lock_context ); + _Chain_Append_unprotected( &control->Stats_chain, &stats->Node ); + _SMP_lock_Release_and_ISR_enable( &control->Lock, &lock_context ); + } } void _SMP_lock_Stats_iteration_start( |