]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
perf pmu: Relax uncore wildcard matching to allow numeric suffix
authorZide Chen <zide.chen@intel.com>
Wed, 31 Dec 2025 22:42:28 +0000 (14:42 -0800)
committerPeter Zijlstra <peterz@infradead.org>
Tue, 6 Jan 2026 15:34:26 +0000 (16:34 +0100)
Diamond Rapids introduces two types of PCIe related uncore PMUs:
"uncore_pcie4_*" and "uncore_pcie6_*".

To ensure that generic PCIe events (e.g., UNC_PCIE_CLOCKTICKS) can match
and collect events from both PMU types, slightly relax the wildcard
matching logic in perf_pmu__match_wildcard().

This change allows a wildcard such as "pcie" to match PMU names that
include a numeric suffix, such as "pcie4_*" and "pcie6_*".

Co-developed-by: Dapeng Mi <dapeng1.mi@linux.intel.com>
Signed-off-by: Dapeng Mi <dapeng1.mi@linux.intel.com>
Signed-off-by: Zide Chen <zide.chen@intel.com>
Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Reviewed-by: Dapeng Mi <dapeng1.mi@linux.intel.com>
Link: https://patch.msgid.link/20251231224233.113839-12-zide.chen@intel.com
tools/perf/util/pmu.c

index 956ea273c2c7805c0cb504fb7dcf996f79f5588d..01a21b6aa031af62105c731442d7eb1c38c528af 100644 (file)
@@ -939,6 +939,7 @@ static bool perf_pmu__match_wildcard(const char *pmu_name, const char *tok)
 {
        const char *p, *suffix;
        bool has_hex = false;
+       bool has_underscore = false;
        size_t tok_len = strlen(tok);
 
        /* Check start of pmu_name for equality. */
@@ -949,13 +950,14 @@ static bool perf_pmu__match_wildcard(const char *pmu_name, const char *tok)
        if (*p == 0)
                return true;
 
-       if (*p == '_') {
-               ++p;
-               ++suffix;
-       }
-
-       /* Ensure we end in a number */
+       /* Ensure we end in a number or a mix of number and "_". */
        while (1) {
+               if (!has_underscore && (*p == '_')) {
+                       has_underscore = true;
+                       ++p;
+                       ++suffix;
+               }
+
                if (!isxdigit(*p))
                        return false;
                if (!has_hex)