]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
perf/x86/intel: Add ICL_FIXED_0_ADAPTIVE bit into INTEL_FIXED_BITS_MASK
authorDapeng Mi <dapeng1.mi@linux.intel.com>
Wed, 20 Aug 2025 02:30:31 +0000 (10:30 +0800)
committerPeter Zijlstra <peterz@infradead.org>
Thu, 21 Aug 2025 18:09:27 +0000 (20:09 +0200)
ICL_FIXED_0_ADAPTIVE is missed to be added into INTEL_FIXED_BITS_MASK,
add it.

With help of this new INTEL_FIXED_BITS_MASK, intel_pmu_enable_fixed() can
be optimized. The old fixed counter control bits can be unconditionally
cleared with INTEL_FIXED_BITS_MASK and then set new control bits base on
new configuration.

Signed-off-by: Dapeng Mi <dapeng1.mi@linux.intel.com>
Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Reviewed-by: Kan Liang <kan.liang@linux.intel.com>
Tested-by: Yi Lai <yi1.lai@intel.com>
Link: https://lore.kernel.org/r/20250820023032.17128-7-dapeng1.mi@linux.intel.com
arch/x86/events/intel/core.c
arch/x86/include/asm/perf_event.h
arch/x86/kvm/pmu.h

index f88a99d8d125cf846cbe3d329db81b13be79c933..28f5468a6ea36b139fb8f6939283ff1dbe9cc6b2 100644 (file)
@@ -2845,8 +2845,8 @@ static void intel_pmu_enable_fixed(struct perf_event *event)
 {
        struct cpu_hw_events *cpuc = this_cpu_ptr(&cpu_hw_events);
        struct hw_perf_event *hwc = &event->hw;
-       u64 mask, bits = 0;
        int idx = hwc->idx;
+       u64 bits = 0;
 
        if (is_topdown_idx(idx)) {
                struct cpu_hw_events *cpuc = this_cpu_ptr(&cpu_hw_events);
@@ -2885,14 +2885,10 @@ static void intel_pmu_enable_fixed(struct perf_event *event)
 
        idx -= INTEL_PMC_IDX_FIXED;
        bits = intel_fixed_bits_by_idx(idx, bits);
-       mask = intel_fixed_bits_by_idx(idx, INTEL_FIXED_BITS_MASK);
-
-       if (x86_pmu.intel_cap.pebs_baseline && event->attr.precise_ip) {
+       if (x86_pmu.intel_cap.pebs_baseline && event->attr.precise_ip)
                bits |= intel_fixed_bits_by_idx(idx, ICL_FIXED_0_ADAPTIVE);
-               mask |= intel_fixed_bits_by_idx(idx, ICL_FIXED_0_ADAPTIVE);
-       }
 
-       cpuc->fixed_ctrl_val &= ~mask;
+       cpuc->fixed_ctrl_val &= ~intel_fixed_bits_by_idx(idx, INTEL_FIXED_BITS_MASK);
        cpuc->fixed_ctrl_val |= bits;
 }
 
index f8247ac276c41109dafeee8820630af04774219f..49a4d442f3fc21b59ebaff33e09c7213dee02b95 100644 (file)
@@ -35,7 +35,6 @@
 #define ARCH_PERFMON_EVENTSEL_EQ                       (1ULL << 36)
 #define ARCH_PERFMON_EVENTSEL_UMASK2                   (0xFFULL << 40)
 
-#define INTEL_FIXED_BITS_MASK                          0xFULL
 #define INTEL_FIXED_BITS_STRIDE                        4
 #define INTEL_FIXED_0_KERNEL                           (1ULL << 0)
 #define INTEL_FIXED_0_USER                             (1ULL << 1)
 #define ICL_EVENTSEL_ADAPTIVE                          (1ULL << 34)
 #define ICL_FIXED_0_ADAPTIVE                           (1ULL << 32)
 
+#define INTEL_FIXED_BITS_MASK                                  \
+       (INTEL_FIXED_0_KERNEL | INTEL_FIXED_0_USER |            \
+        INTEL_FIXED_0_ANYTHREAD | INTEL_FIXED_0_ENABLE_PMI |   \
+        ICL_FIXED_0_ADAPTIVE)
+
 #define intel_fixed_bits_by_idx(_idx, _bits)                   \
        ((_bits) << ((_idx) * INTEL_FIXED_BITS_STRIDE))
 
index ad89d0bd6005815c5a52b7d25a3b97b00c1c0071..103604c4b33b58c0abb31b57df0f6cfc50a50802 100644 (file)
@@ -13,7 +13,7 @@
 #define MSR_IA32_MISC_ENABLE_PMU_RO_MASK (MSR_IA32_MISC_ENABLE_PEBS_UNAVAIL |  \
                                          MSR_IA32_MISC_ENABLE_BTS_UNAVAIL)
 
-/* retrieve the 4 bits for EN and PMI out of IA32_FIXED_CTR_CTRL */
+/* retrieve a fixed counter bits out of IA32_FIXED_CTR_CTRL */
 #define fixed_ctrl_field(ctrl_reg, idx) \
        (((ctrl_reg) >> ((idx) * INTEL_FIXED_BITS_STRIDE)) & INTEL_FIXED_BITS_MASK)