On Mon, Jul 23, 2018 at 6:35 PM Cong Wang <xiyou.wangc...@gmail.com> wrote: > > Hi, Peter, Andi > > While reviewing the deadlock, I find out it looks like we could have the > following infinite recursion too: > > perf_event_account_interrupt() > __perf_event_account_interrupt() > perf_adjust_period() > event->pmu->stop > x86_pmu_stop() > x86_pmu.disable()
Hmm, x86_pmu_stop() calls __test_and_clear_bit(), so we should not call x86_pmu.disable() twice here. > intel_pmu_disable_event() > intel_pmu_pebs_disable() > intel_pmu_drain_pebs_buffer() > intel_pmu_drain_pebs_nhm() > <repeat....> > > This time is pure hardware events, attr.freq must be non-zero. > > And, we could enter this infinite recursion in NMI handler too: > > intel_pmu_handle_irq() > perf_event_overflow() > __perf_event_overflow() > __perf_event_account_interrupt() > .... > > Or this is impossible too? > > Thanks!