summaryrefslogtreecommitdiffstats
path: root/cpukit/score/src/threaddispatchdisablelevel.c
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2014-03-10 10:04:09 +0100
committerSebastian Huber <sebastian.huber@embedded-brains.de>2014-03-14 08:46:49 +0100
commitf980561ee073a7f24f65ed572852fa96edfa1708 (patch)
treea2e62dd469acbe201388c9b8a3e0ebd9d7277e9f /cpukit/score/src/threaddispatchdisablelevel.c
parentsapi: Add SMP lock profiling app. level data (diff)
downloadrtems-f980561ee073a7f24f65ed572852fa96edfa1708.tar.bz2
score: Add per-CPU profiling
Add per-CPU profiling stats API. Implement the thread dispatch disable level profiling. The interrupt profiling must be implemented in CPU port specific parts (mostly assembler code). Add a support function _Profiling_Outer_most_interrupt_entry_and_exit() for this purpose.
Diffstat (limited to 'cpukit/score/src/threaddispatchdisablelevel.c')
-rw-r--r--cpukit/score/src/threaddispatchdisablelevel.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/cpukit/score/src/threaddispatchdisablelevel.c b/cpukit/score/src/threaddispatchdisablelevel.c
index dc03a702a4..ab004c1662 100644
--- a/cpukit/score/src/threaddispatchdisablelevel.c
+++ b/cpukit/score/src/threaddispatchdisablelevel.c
@@ -17,6 +17,7 @@
#include <rtems/score/threaddispatch.h>
#include <rtems/score/assert.h>
+#include <rtems/score/profiling.h>
#include <rtems/score/sysstate.h>
#define NO_OWNER_CPU 0xffffffffU
@@ -89,6 +90,7 @@ uint32_t _Thread_Dispatch_increment_disable_level( void )
_Giant_Do_acquire( self_cpu );
disable_level = self_cpu->thread_dispatch_disable_level;
+ _Profiling_Thread_dispatch_disable( self_cpu, disable_level );
++disable_level;
self_cpu->thread_dispatch_disable_level = disable_level;
@@ -113,6 +115,7 @@ uint32_t _Thread_Dispatch_decrement_disable_level( void )
_Giant_Do_release( self_cpu );
_Assert( disable_level != 0 || _Giant.owner_cpu == NO_OWNER_CPU );
+ _Profiling_Thread_dispatch_enable( self_cpu, disable_level );
_ISR_Enable_without_giant( isr_level );
return disable_level;