Re: perf sched record hangs machine

From: Peter Zijlstra
Date: Wed Sep 23 2009 - 05:03:52 EST


On Wed, 2009-09-23 at 09:32 +0200, Ingo Molnar wrote:
> * Peter Zijlstra <peterz@xxxxxxxxxxxxx> wrote:
>
> > .size default_send_IPI_self, .-default_send_IPI_self
> >
> > Which seems to suggest that cmove is in __prepare_ICR, but I'm not
> > sure how that can cause a page-fault, as that function is rather
> > pointer-less.
> >
> > Did it maybe delay evaluating apic->dest_logical that late, it appear
> > to be the first usage of that argument?
> >
> > Ingo, any ideas?
>
> Yeah, the problem is:
>
> [ 0.042445] Local APIC not detected. Using dummy APIC emulation.

The below seems like the best fix. You disabled all lapic bits, except
that one.

---
arch/x86/kernel/cpu/perf_event.c | 3 +++
1 files changed, 3 insertions(+), 0 deletions(-)

diff --git a/arch/x86/kernel/cpu/perf_event.c b/arch/x86/kernel/cpu/perf_event.c
index a3c7adb..b5801c3 100644
--- a/arch/x86/kernel/cpu/perf_event.c
+++ b/arch/x86/kernel/cpu/perf_event.c
@@ -1790,6 +1790,9 @@ void smp_perf_pending_interrupt(struct pt_regs *regs)
void set_perf_event_pending(void)
{
#ifdef CONFIG_X86_LOCAL_APIC
+ if (!x86_pmu.apic || !x86_pmu_initialized())
+ return;
+
apic->send_IPI_self(LOCAL_PENDING_VECTOR);
#endif
}

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/