From: Michael Cree on 24 May 2010 18:00 On 4/05/2010, at 7:40 PM, Peter Zijlstra wrote: > On Sat, 2010-05-01 at 11:55 +1200, Michael Cree wrote: >> +/* I wonder what this is for ??? */ >> +void set_perf_event_pending(void) >> +{ >> +} > > If the PMU Interrupt comes in as an NMI we cannot take locks and such > from its handler. So what we do is queue that work to be ran later. > The > kernel has a fallback to run this stuff from the timer hardirq, but if > the PMI is IRQ context (like ARM) you can simply call > perf_event_do_pending() at its tail. My understanding from the Alpha HW Ref. Man. and a brief look at the kernel code is that the PMI comes in through the normal IRQ entry point on the Alpha. It is a high priority interrupt and only a machine check (i.e. detected hardware failure) can interrupt the PMU interrupt handler. I don't know whether that is an issue for taking locks or not and need advice on that. I originally based the Alpha implementation on the Sparc implementation and would've copied the set_perf_event_pending() definition from the Sparc code, but I now see that newer Sparc code does not have that definition nor does it call perf_event_do_pending() in the interrupt handler. So I need advice on whether to: 1) Just remove the set_perf_event_pending() definition so we are like the Sparc code, 2) Add perf_event_do_pending() to the tail of the IRQ handler so we are like the ARM code, or 3) Implement the following suggestion: > Alternatively you can self-IPI like x86 does and run > perf_event_do_pending() from there. Another question is what are the observeable symptoms if an incorrect option above is implemented? Regards Michael. -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo(a)vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
|
Pages: 1 Prev: Ubuntu boot time on imac Next: [PATCH 1/2] posix_timer: separate timer_cleanup from timer_del |