]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
perf/x86/intel: Check PEBS dyn_constraints
authorPeter Zijlstra <peterz@infradead.org>
Fri, 7 Nov 2025 13:50:16 +0000 (14:50 +0100)
committerPeter Zijlstra <peterz@infradead.org>
Fri, 7 Nov 2025 14:08:23 +0000 (15:08 +0100)
Handle the interaction between ("perf/x86/intel: Update dyn_constraint
base on PEBS event precise level") and ("perf/x86/intel: Add a check
for dynamic constraints").

Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
arch/x86/events/intel/core.c

index 93780affeec8220c861425e15ddda33ac631e0d5..a421595fdd7667ad74675d6d6c3f16dfda53362d 100644 (file)
@@ -5425,6 +5425,8 @@ enum dyn_constr_type {
        DYN_CONSTR_BR_CNTR,
        DYN_CONSTR_ACR_CNTR,
        DYN_CONSTR_ACR_CAUSE,
+       DYN_CONSTR_PEBS,
+       DYN_CONSTR_PDIST,
 
        DYN_CONSTR_MAX,
 };
@@ -5434,6 +5436,8 @@ static const char * const dyn_constr_type_name[] = {
        [DYN_CONSTR_BR_CNTR] = "a branch counter logging event",
        [DYN_CONSTR_ACR_CNTR] = "an auto-counter reload event",
        [DYN_CONSTR_ACR_CAUSE] = "an auto-counter reload cause event",
+       [DYN_CONSTR_PEBS] = "a PEBS event",
+       [DYN_CONSTR_PDIST] = "a PEBS PDIST event",
 };
 
 static void __intel_pmu_check_dyn_constr(struct event_constraint *constr,
@@ -5538,6 +5542,14 @@ static void intel_pmu_check_dyn_constr(struct pmu *pmu,
                                continue;
                        mask = hybrid(pmu, acr_cause_mask64) & GENMASK_ULL(INTEL_PMC_MAX_GENERIC - 1, 0);
                        break;
+               case DYN_CONSTR_PEBS:
+                       if (x86_pmu.arch_pebs)
+                               mask = hybrid(pmu, arch_pebs_cap).counters;
+                       break;
+               case DYN_CONSTR_PDIST:
+                       if (x86_pmu.arch_pebs)
+                               mask = hybrid(pmu, arch_pebs_cap).pdists;
+                       break;
                default:
                        pr_warn("Unsupported dynamic constraint type %d\n", i);
                }