• Kan Liang's avatar
    perf/x86/intel: Fix spurious NMI on fixed counter · e4557c1a
    Kan Liang authored
    If a user first sample a PEBS event on a fixed counter, then sample a
    non-PEBS event on the same fixed counter on Icelake, it will trigger
    spurious NMI. For example:
    
      perf record -e 'cycles:p' -a
      perf record -e 'cycles' -a
    
    The error message for spurious NMI:
    
      [June 21 15:38] Uhhuh. NMI received for unknown reason 30 on CPU 2.
      [    +0.000000] Do you have a strange power saving mode enabled?
      [    +0.000000] Dazed and confused, but trying to continue
    
    The bug was introduced by the following commit:
    
      commit 6f55967a ("perf/x86/intel: Fix race in intel_pmu_disable_event()")
    
    The commit moves the intel_pmu_pebs_disable() after intel_pmu_disable_fixed(),
    which returns immediately.  The related bit of PEBS_ENABLE MSR will never be
    cleared for the fixed counter. Then a non-PEBS event runs on the fixed counter,
    but the bit on PEBS_ENABLE is still set, which triggers spurious NMIs.
    
    Check and disable PEBS for fixed counters after intel_pmu_disable_fixed().
    Reported-by: default avatarYi, Ammy <ammy.yi@intel.com>
    Signed-off-by: default avatarKan Liang <kan.liang@linux.intel.com>
    Signed-off-by: default avatarPeter Zijlstra (Intel) <peterz@infradead.org>
    Acked-by: default avatarJiri Olsa <jolsa@kernel.org>
    Cc: <stable@vger.kernel.org>
    Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
    Cc: Arnaldo Carvalho de Melo <acme@redhat.com>
    Cc: Jiri Olsa <jolsa@redhat.com>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Stephane Eranian <eranian@google.com>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Cc: Vince Weaver <vincent.weaver@maine.edu>
    Fixes: 6f55967a ("perf/x86/intel: Fix race in intel_pmu_disable_event()")
    Link: https://lkml.kernel.org/r/20190625142135.22112-1-kan.liang@linux.intel.comSigned-off-by: default avatarIngo Molnar <mingo@kernel.org>
    e4557c1a
core.c 144 KB