• Kan Liang's avatar
    perf/x86/intel: Apply mid ACK for small core · acade637
    Kan Liang authored
    A warning as below may be occasionally triggered in an ADL machine when
    these conditions occur:
    
     - Two perf record commands run one by one. Both record a PEBS event.
     - Both runs on small cores.
     - They have different adaptive PEBS configuration (PEBS_DATA_CFG).
    
      [ ] WARNING: CPU: 4 PID: 9874 at arch/x86/events/intel/ds.c:1743 setup_pebs_adaptive_sample_data+0x55e/0x5b0
      [ ] RIP: 0010:setup_pebs_adaptive_sample_data+0x55e/0x5b0
      [ ] Call Trace:
      [ ]  <NMI>
      [ ]  intel_pmu_drain_pebs_icl+0x48b/0x810
      [ ]  perf_event_nmi_handler+0x41/0x80
      [ ]  </NMI>
      [ ]  __perf_event_task_sched_in+0x2c2/0x3a0
    
    Different from the big core, the small core requires the ACK right
    before re-enabling counters in the NMI handler, otherwise a stale PEBS
    record may be dumped into the later NMI handler, which trigger the
    warning.
    
    Add a new mid_ack flag to track the case. Add all PMI handler bits in
    the struct x86_hybrid_pmu to track the bits for different types of
    PMUs.  Apply mid ACK for the small cores on an Alder Lake machine.
    
    The existing hybrid() macro has a compile error when taking address of
    a bit-field variable. Add a new macro hybrid_bit() to get the
    bit-field value of a given PMU.
    
    Fixes: f83d2f91 ("perf/x86/intel: Add Alder Lake Hybrid support")
    Reported-by: default avatarAmmy Yi <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>
    Reviewed-by: default avatarAndi Kleen <ak@linux.intel.com>
    Tested-by: default avatarAmmy Yi <ammy.yi@intel.com>
    Link: https://lkml.kernel.org/r/1627997128-57891-1-git-send-email-kan.liang@linux.intel.com
    acade637
perf_event.h 38.8 KB