Files
linux/arch/powerpc/include/asm
Paul Mackerras 73ef533de7 powerpc/perf_event: Fix oops due to perf_event_do_pending call
commit 0fe1ac48be upstream.

Anton Blanchard found that large POWER systems would occasionally
crash in the exception exit path when profiling with perf_events.
The symptom was that an interrupt would occur late in the exit path
when the MSR[RI] (recoverable interrupt) bit was clear.  Interrupts
should be hard-disabled at this point but they were enabled.  Because
the interrupt was not recoverable the system panicked.

The reason is that the exception exit path was calling
perf_event_do_pending after hard-disabling interrupts, and
perf_event_do_pending will re-enable interrupts.

The simplest and cleanest fix for this is to use the same mechanism
that 32-bit powerpc does, namely to cause a self-IPI by setting the
decrementer to 1.  This means we can remove the tests in the exception
exit path and raw_local_irq_restore.

This also makes sure that the call to perf_event_do_pending from
timer_interrupt() happens within irq_enter/irq_exit.  (Note that
calling perf_event_do_pending from timer_interrupt does not mean that
there is a possible 1/HZ latency; setting the decrementer to 1 ensures
that the timer interrupt will happen immediately, i.e. within one
timebase tick, which is a few nanoseconds or 10s of nanoseconds.)

Signed-off-by: Paul Mackerras <paulus@samba.org>
Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
2010-05-26 14:29:16 -07:00
..
2009-06-23 08:09:54 -05:00
2010-02-09 04:51:02 -08:00
2009-09-08 17:53:04 -07:00
2008-08-18 21:40:03 +02:00
2008-08-04 13:18:17 +10:00
2009-09-11 11:27:57 +10:00
2009-03-24 11:02:59 +02:00
2009-03-24 11:02:58 +02:00
2008-11-19 16:04:58 +11:00
2009-09-21 14:34:11 +02:00
2008-12-21 14:21:14 +11:00
2009-04-07 15:18:58 +10:00
2008-10-15 11:31:54 +11:00
2008-09-06 19:30:15 +01:00
2009-04-01 08:59:16 -07:00
2009-08-28 14:24:10 +10:00
2008-11-19 16:04:55 +11:00