summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2014-03-06 15:51:10 +0100
committerSebastian Huber <sebastian.huber@embedded-brains.de>2014-03-14 08:46:50 +0100
commit148d6e9a15fbb46dc3ab12ab8bdc3b10193d71a0 (patch)
treebd0e2f7e96053a9e9457734bd52a0fc08ce9d9fa
parentbsps/powerpc: Add support for interrupt profiling (diff)
downloadrtems-148d6e9a15fbb46dc3ab12ab8bdc3b10193d71a0.tar.bz2
arm: Add support for interrupt profiling
-rw-r--r--cpukit/score/cpu/arm/arm_exc_interrupt.S20
1 files changed, 20 insertions, 0 deletions
diff --git a/cpukit/score/cpu/arm/arm_exc_interrupt.S b/cpukit/score/cpu/arm/arm_exc_interrupt.S
index 697171e48a..27c43f900b 100644
--- a/cpukit/score/cpu/arm/arm_exc_interrupt.S
+++ b/cpukit/score/cpu/arm/arm_exc_interrupt.S
@@ -122,6 +122,14 @@ _ARMV4_Exception_interrupt:
str r2, [SELF_CPU_CONTROL, #PER_CPU_ISR_NEST_LEVEL]
str r3, [SELF_CPU_CONTROL, #PER_CPU_THREAD_DISPATCH_DISABLE_LEVEL]
+#ifdef RTEMS_PROFILING
+ cmp r2, #1
+ bne profiling_entry_done
+ bl _CPU_Counter_read
+ push {r0, r1}
+profiling_entry_done:
+#endif
+
/* Call BSP dependent interrupt dispatcher */
bl bsp_interrupt_dispatch
@@ -133,6 +141,18 @@ _ARMV4_Exception_interrupt:
str r2, [SELF_CPU_CONTROL, #PER_CPU_ISR_NEST_LEVEL]
str r3, [SELF_CPU_CONTROL, #PER_CPU_THREAD_DISPATCH_DISABLE_LEVEL]
+#ifdef RTEMS_PROFILING
+ cmp r2, #0
+ bne profiling_exit_done
+ bl _CPU_Counter_read
+ pop {r1, r3}
+ mov r2, r0
+ mov r0, SELF_CPU_CONTROL
+ bl _Profiling_Outer_most_interrupt_entry_and_exit
+ ldr r3, [SELF_CPU_CONTROL, #PER_CPU_THREAD_DISPATCH_DISABLE_LEVEL]
+profiling_exit_done:
+#endif
+
/* Restore stack pointer */
mov sp, SP_OF_INTERRUPTED_CONTEXT