RTEMS CPU Kit with SuperCore  4.11.2
profiling.h
Go to the documentation of this file.
1 
9 /*
10  * Copyright (c) 2014 embedded brains GmbH. All rights reserved.
11  *
12  * embedded brains GmbH
13  * Dornierstr. 4
14  * 82178 Puchheim
15  * Germany
16  * <rtems@embedded-brains.de>
17  *
18  * The license and distribution terms for this file may be
19  * found in the file LICENSE in this distribution or at
20  * http://www.rtems.org/license/LICENSE.
21  */
22 
23 #ifndef _RTEMS_SCORE_PROFILING
24 #define _RTEMS_SCORE_PROFILING
25 
26 #include <rtems/score/percpu.h>
27 #include <rtems/score/isrlock.h>
28 
29 #ifdef __cplusplus
30 extern "C" {
31 #endif /* __cplusplus */
32 
41 static inline void _Profiling_Thread_dispatch_disable(
42  Per_CPU_Control *cpu,
43  uint32_t previous_thread_dispatch_disable_level
44 )
45 {
46 #if defined( RTEMS_PROFILING )
47  if ( previous_thread_dispatch_disable_level == 0 ) {
48  Per_CPU_Stats *stats = &cpu->Stats;
49 
50  stats->thread_dispatch_disabled_instant = _CPU_Counter_read();
51  ++stats->thread_dispatch_disabled_count;
52  }
53 #else
54  (void) cpu;
55  (void) previous_thread_dispatch_disable_level;
56 #endif
57 }
58 
59 static inline void _Profiling_Thread_dispatch_disable_critical(
60  Per_CPU_Control *cpu,
61  uint32_t previous_thread_dispatch_disable_level,
62  const ISR_lock_Context *lock_context
63 )
64 {
65 #if defined( RTEMS_PROFILING )
66  if ( previous_thread_dispatch_disable_level == 0 ) {
67  Per_CPU_Stats *stats = &cpu->Stats;
68 
69  stats->thread_dispatch_disabled_instant = lock_context->ISR_disable_instant;
70  ++stats->thread_dispatch_disabled_count;
71  }
72 #else
73  (void) cpu;
74  (void) previous_thread_dispatch_disable_level;
75  (void) lock_context;
76 #endif
77 }
78 
79 static inline void _Profiling_Thread_dispatch_enable(
80  Per_CPU_Control *cpu,
81  uint32_t new_thread_dispatch_disable_level
82 )
83 {
84 #if defined( RTEMS_PROFILING )
85  if ( new_thread_dispatch_disable_level == 0 ) {
86  Per_CPU_Stats *stats = &cpu->Stats;
87  CPU_Counter_ticks now = _CPU_Counter_read();
88  CPU_Counter_ticks delta = _CPU_Counter_difference(
89  now,
90  stats->thread_dispatch_disabled_instant
91  );
92 
93  stats->total_thread_dispatch_disabled_time += delta;
94 
95  if ( stats->max_thread_dispatch_disabled_time < delta ) {
96  stats->max_thread_dispatch_disabled_time = delta;
97  }
98  }
99 #else
100  (void) cpu;
101  (void) new_thread_dispatch_disable_level;
102 #endif
103 }
104 
105 static inline void _Profiling_Update_max_interrupt_delay(
106  Per_CPU_Control *cpu,
107  CPU_Counter_ticks interrupt_delay
108 )
109 {
110 #if defined( RTEMS_PROFILING )
111  Per_CPU_Stats *stats = &cpu->Stats;
112 
113  if ( stats->max_interrupt_delay < interrupt_delay ) {
114  stats->max_interrupt_delay = interrupt_delay;
115  }
116 #else
117  (void) cpu;
118  (void) interrupt_delay;
119 #endif
120 }
121 
122 void _Profiling_Outer_most_interrupt_entry_and_exit(
123  Per_CPU_Control *cpu,
124  CPU_Counter_ticks interrupt_entry_instant,
125  CPU_Counter_ticks interrupt_exit_instant
126 );
127 
130 #ifdef __cplusplus
131 }
132 #endif /* __cplusplus */
133 
134 #endif /* _RTEMS_SCORE_PROFILING */
Per-CPU statistics.
Definition: percpu.h:159
This include file defines the per CPU information required by RTEMS.
Per CPU Core Structure.
Definition: percpu.h:233
CPU_Counter_ticks _CPU_Counter_difference(CPU_Counter_ticks second, CPU_Counter_ticks first)
Returns the difference between the second and first CPU counter value.
Definition: cpu.h:1160
Local ISR lock context for acquire and release pairs.
Definition: isrlock.h:65
ISR Locks.