powerpc: Add doorbell tracepoints
authorAnton Blanchard <anton@ozlabs.org>
Thu, 4 Oct 2018 06:23:37 +0000 (16:23 +1000)
committerMichael Ellerman <mpe@ellerman.id.au>
Wed, 1 May 2019 06:45:05 +0000 (16:45 +1000)
When analysing sources of OS jitter, I noticed that doorbells cannot be
traced.

Signed-off-by: Anton Blanchard <anton@ozlabs.org>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
arch/powerpc/include/asm/trace.h
arch/powerpc/kernel/dbell.c

index 58ef8c4..08cd60c 100644 (file)
@@ -54,6 +54,22 @@ DEFINE_EVENT(ppc64_interrupt_class, timer_interrupt_exit,
        TP_ARGS(regs)
 );
 
+#ifdef CONFIG_PPC_DOORBELL
+DEFINE_EVENT(ppc64_interrupt_class, doorbell_entry,
+
+       TP_PROTO(struct pt_regs *regs),
+
+       TP_ARGS(regs)
+);
+
+DEFINE_EVENT(ppc64_interrupt_class, doorbell_exit,
+
+       TP_PROTO(struct pt_regs *regs),
+
+       TP_ARGS(regs)
+);
+#endif
+
 #ifdef CONFIG_PPC_PSERIES
 extern int hcall_tracepoint_regfunc(void);
 extern void hcall_tracepoint_unregfunc(void);
index b6fe883..5ec3b38 100644 (file)
@@ -18,6 +18,7 @@
 #include <asm/dbell.h>
 #include <asm/irq_regs.h>
 #include <asm/kvm_ppc.h>
+#include <asm/trace.h>
 
 #ifdef CONFIG_SMP
 
@@ -81,6 +82,7 @@ void doorbell_exception(struct pt_regs *regs)
        struct pt_regs *old_regs = set_irq_regs(regs);
 
        irq_enter();
+       trace_doorbell_entry(regs);
 
        ppc_msgsync();
 
@@ -91,6 +93,7 @@ void doorbell_exception(struct pt_regs *regs)
 
        smp_ipi_demux_relaxed(); /* already performed the barrier */
 
+       trace_doorbell_exit(regs);
        irq_exit();
        set_irq_regs(old_regs);
 }