Messages in this thread Patch in this message | | | Subject | Re: perf sched record hangs machine | From | Peter Zijlstra <> | Date | Wed, 23 Sep 2009 11:03:37 +0200 |
| |
On Wed, 2009-09-23 at 09:32 +0200, Ingo Molnar wrote: > * Peter Zijlstra <peterz@infradead.org> 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 }
| |