summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2014-03-05 12:07:42 +0100
committerSebastian Huber <sebastian.huber@embedded-brains.de>2014-03-14 08:46:50 +0100
commitde5d6d048db50312e20931e2c8bfb14305b138a5 (patch)
tree846f75afdd5996da951a6cdf427a49c7a1a555d8
parentscore: Add SMP lock profiling support (diff)
downloadrtems-de5d6d048db50312e20931e2c8bfb14305b138a5.tar.bz2
sparc: Add support for interrupt profiling
-rw-r--r--c/src/lib/libbsp/sparc/shared/irq_asm.S25
1 files changed, 23 insertions, 2 deletions
diff --git a/c/src/lib/libbsp/sparc/shared/irq_asm.S b/c/src/lib/libbsp/sparc/shared/irq_asm.S
index a2772520f2..39629a34ae 100644
--- a/c/src/lib/libbsp/sparc/shared/irq_asm.S
+++ b/c/src/lib/libbsp/sparc/shared/irq_asm.S
@@ -399,7 +399,14 @@ save_isf:
subcc %l7, 1, %l7 ! outermost interrupt handler?
bnz dont_switch_stacks ! No, then do not switch stacks
- nop
+#if defined( RTEMS_PROFILING )
+ sethi %hi(SYM(_SPARC_Counter)), %o5
+ ld [%o5 + %lo(SYM(_SPARC_Counter))], %l4
+ ld [%l4], %o5
+#else
+ nop
+#endif
+
ld [%l5 + PER_CPU_INTERRUPT_STACK_HIGH], %sp
dont_switch_stacks:
@@ -453,7 +460,21 @@ dont_fix_pil2:
! WAS LOADED WHEN ISF WAS SAVED!!!
mov %l3, %o0 ! o0 = 1st arg = vector number
call %g4, 0
- nop ! delay slot
+#if defined( RTEMS_PROFILING )
+ mov %o5, %l3 ! save interrupt entry instant
+ cmp %l7, 0
+ bne profiling_not_outer_most_exit
+ nop
+ call SYM(sparc_disable_interrupts), 0
+ nop
+ ld [%l4], %o2 ! o2 = 3rd arg = interrupt exit instant
+ mov %l3, %o1 ! o1 = 2nd arg = interrupt entry instant
+ call SYM(_Profiling_Outer_most_interrupt_entry_and_exit), 0
+ mov %l5, %o0 ! o0 = 1st arg = per-CPU control
+profiling_not_outer_most_exit:
+#else
+ nop ! delay slot
+#endif
/*
* Redisable traps so we can finish up the interrupt processing.