• Kan Liang's avatar
    perf/x86/intel: Fix broken fixed event constraints extension · 950ecdc6
    Kan Liang authored
    Unnecessary multiplexing is triggered when running an "instructions"
    event on an MTL.
    
    perf stat -e cpu_core/instructions/,cpu_core/instructions/ -a sleep 1
    
     Performance counter stats for 'system wide':
    
           115,489,000      cpu_core/instructions/                (50.02%)
           127,433,777      cpu_core/instructions/                (49.98%)
    
           1.002294504 seconds time elapsed
    
    Linux architectural perf events, e.g., cycles and instructions, usually
    have dedicated fixed counters. These events also have equivalent events
    which can be used in the general-purpose counters. The counters are
    precious. In the intel_pmu_check_event_constraints(), perf check/extend
    the event constraints of these events. So these events can utilize both
    fixed counters and general-purpose counters.
    
    The following cleanup commit:
    
      97588df8 ("perf/x86/intel: Add common intel_pmu_init_hybrid()")
    
    forgot adding the intel_pmu_check_event_constraints() into update_pmu_cap().
    The architectural perf events cannot utilize the general-purpose counters.
    
    The code to check and update the counters, event constraints and
    extra_regs is the same among hybrid systems. Move
    intel_pmu_check_hybrid_pmus() to init_hybrid_pmu(), and
    emove the duplicate check in update_pmu_cap().
    
    Fixes: 97588df8 ("perf/x86/intel: Add common intel_pmu_init_hybrid()")
    Signed-off-by: default avatarKan Liang <kan.liang@linux.intel.com>
    Signed-off-by: default avatarIngo Molnar <mingo@kernel.org>
    Link: https://lore.kernel.org/r/20230911135128.2322833-1-kan.liang@linux.intel.com
    950ecdc6
core.c 197 KB