aboutsummaryrefslogtreecommitdiff
path: root/arch/powerpc
diff options
context:
space:
mode:
authorMathieu Desnoyers <mathieu.desnoyers@efficios.com>2011-03-16 19:05:47 -0400
committerMathieu Desnoyers <mathieu.desnoyers@polymtl.ca>2011-03-16 19:05:47 -0400
commitec216cea8c0e853ac73edb255378c52bd3cd106d (patch)
treede9bf242298a6817798ca106d829a23273d5ae21 /arch/powerpc
parentcc2898f8c9b1ebaa11805886ab1f8c595ed13c2f (diff)
downloadlinux-2.6.38-lt-ux500-ec216cea8c0e853ac73edb255378c52bd3cd106d.tar.gz
lttng-revert-powerpc-irq-instrumentation
Revert powerpc: tracing: Add powerpc tracepoints for interrupt entry and exit commit 1bf4af165050d90ea6659ffb2536ec8ca783aab5 Author: Anton Blanchard <anton@samba.org> Date: Mon Oct 26 18:47:42 2009 +0000 powerpc: tracing: Add powerpc tracepoints for interrupt entry and exit This adds powerpc-specific tracepoints for interrupt entry and exit. While we already have generic irq_handler_entry and irq_handler_exit tracepoints there are cases on our virtualised powerpc machines where an interrupt is presented to the OS, but subsequently handled by the hypervisor. This means no OS interrupt handler is invoked. Here is an example on a POWER6 machine with the patch below applied: <idle>-0 [006] 3243.949840744: irq_entry: pt_regs=c0000000ce31fb10 <idle>-0 [006] 3243.949850520: irq_exit: pt_regs=c0000000ce31fb10 <idle>-0 [007] 3243.950218208: irq_entry: pt_regs=c0000000ce323b10 <idle>-0 [007] 3243.950224080: irq_exit: pt_regs=c0000000ce323b10 <idle>-0 [000] 3244.021879320: irq_entry: pt_regs=c000000000a63aa0 <idle>-0 [000] 3244.021883616: irq_handler_entry: irq=87 handler=eth0 <idle>-0 [000] 3244.021887328: irq_handler_exit: irq=87 return=handled <idle>-0 [000] 3244.021897408: irq_exit: pt_regs=c000000000a63aa0 Here we see two phantom interrupts (no handler was invoked), followed by a real interrupt for eth0. Without the tracepoints in this patch we would have missed the phantom interrupts. Mathieu: Allright, so the "handler" tracepoint does not get executed. Can we just instrument the generic irq routines in kernel/irq/handle.c instead of doing this asm-specific stuff ? Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com> CC: Anton Blanchard <anton@samba.org> CC: Steven Rostedt <rostedt@goodmis.org> CC: Paul Mackerras <paulus@samba.org>
Diffstat (limited to 'arch/powerpc')
-rw-r--r--arch/powerpc/include/asm/trace.h3
-rw-r--r--arch/powerpc/kernel/irq.c4
2 files changed, 2 insertions, 5 deletions
diff --git a/arch/powerpc/include/asm/trace.h b/arch/powerpc/include/asm/trace.h
index cbe2297d68b..d1c27723f84 100644
--- a/arch/powerpc/include/asm/trace.h
+++ b/arch/powerpc/include/asm/trace.h
@@ -7,7 +7,7 @@
#include <linux/tracepoint.h>
struct pt_regs;
-
+#if 0 /* disabled by Mathieu Desnoyers. Belongs to generic IRQS. */
TRACE_EVENT(irq_entry,
TP_PROTO(struct pt_regs *regs),
@@ -41,6 +41,7 @@ TRACE_EVENT(irq_exit,
TP_printk("pt_regs=%p", __entry->regs)
);
+#endif //0
TRACE_EVENT(timer_interrupt_entry,
diff --git a/arch/powerpc/kernel/irq.c b/arch/powerpc/kernel/irq.c
index ce557f6f00f..d21cf5bc503 100644
--- a/arch/powerpc/kernel/irq.c
+++ b/arch/powerpc/kernel/irq.c
@@ -401,8 +401,6 @@ void do_IRQ(struct pt_regs *regs)
struct pt_regs *old_regs = set_irq_regs(regs);
unsigned int irq;
- trace_irq_entry(regs);
-
irq_enter();
check_stack_overflow();
@@ -425,8 +423,6 @@ void do_IRQ(struct pt_regs *regs)
timer_interrupt(regs);
}
#endif
-
- trace_irq_exit(regs);
}
void __init init_IRQ(void)