powerpc: Add doorbell tracepoints
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>
This commit is contained in:
committed by
Michael Ellerman
parent
32eeb5614d
commit
5b2a152962
@@ -54,6 +54,22 @@ DEFINE_EVENT(ppc64_interrupt_class, timer_interrupt_exit,
|
|||||||
TP_ARGS(regs)
|
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
|
#ifdef CONFIG_PPC_PSERIES
|
||||||
extern int hcall_tracepoint_regfunc(void);
|
extern int hcall_tracepoint_regfunc(void);
|
||||||
extern void hcall_tracepoint_unregfunc(void);
|
extern void hcall_tracepoint_unregfunc(void);
|
||||||
|
|||||||
@@ -18,6 +18,7 @@
|
|||||||
#include <asm/dbell.h>
|
#include <asm/dbell.h>
|
||||||
#include <asm/irq_regs.h>
|
#include <asm/irq_regs.h>
|
||||||
#include <asm/kvm_ppc.h>
|
#include <asm/kvm_ppc.h>
|
||||||
|
#include <asm/trace.h>
|
||||||
|
|
||||||
#ifdef CONFIG_SMP
|
#ifdef CONFIG_SMP
|
||||||
|
|
||||||
@@ -81,6 +82,7 @@ void doorbell_exception(struct pt_regs *regs)
|
|||||||
struct pt_regs *old_regs = set_irq_regs(regs);
|
struct pt_regs *old_regs = set_irq_regs(regs);
|
||||||
|
|
||||||
irq_enter();
|
irq_enter();
|
||||||
|
trace_doorbell_entry(regs);
|
||||||
|
|
||||||
ppc_msgsync();
|
ppc_msgsync();
|
||||||
|
|
||||||
@@ -91,6 +93,7 @@ void doorbell_exception(struct pt_regs *regs)
|
|||||||
|
|
||||||
smp_ipi_demux_relaxed(); /* already performed the barrier */
|
smp_ipi_demux_relaxed(); /* already performed the barrier */
|
||||||
|
|
||||||
|
trace_doorbell_exit(regs);
|
||||||
irq_exit();
|
irq_exit();
|
||||||
set_irq_regs(old_regs);
|
set_irq_regs(old_regs);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user