On 09/12, Peter Zijlstra wrote: > > Oleg and Sebastian found that touching MSR_IA32_DEBUGCTLMSR from NMI > context is problematic since the only way to change the various > unrelated bits in there is: > > debugctl = get_debugctlmsr() > /* frob flags in debugctl */ > update_debugctlmsr(debugctl); > > Which is entirely unsafe if we prod at the MSR from NMI context. > > In particular the path that is responsible is: > > x86_pmu_handle_irq() (NMI handler) > x86_pmu_stop() > x86_pmu.disable -> intel_pmu_disable_event() > intel_pmu_lbr_disable() > __intel_pmu_lbr_disable() > wrmsrl(MSR_IA32_DEBUGCTLMSR,... );
Not only. x86_pmu_handle_irq() does intel_pmu_disable_all() and intel_pmu_enable_all(), this leads to intel_pmu_enable_bts() and intel_pmu_disable_bts(). And those intel_pmu_*_bts() are also called by intel_pmu_disable_event() and intel_pmu_enable_event(), the latter is probably fine. Oleg. -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/

