Re: [PATCH V2 11/13] perf pmu: Relax uncore wildcard matching to allow numeric suffix
From: Mi, Dapeng
Date: Wed Jan 21 2026 - 03:04:59 EST
On 1/21/2026 3:18 PM, Ian Rogers wrote:
> On Wed, Dec 31, 2025 at 2:49 PM Zide Chen <zide.chen@xxxxxxxxx> wrote:
>> 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@xxxxxxxxxxxxxxx>
>> Signed-off-by: Dapeng Mi <dapeng1.mi@xxxxxxxxxxxxxxx>
>> Reviewed-by: Dapeng Mi <dapeng1.mi@xxxxxxxxxxxxxxx>
>> Signed-off-by: Zide Chen <zide.chen@xxxxxxxxx>
> Can we not merge this. I'd missed a perf tool patch as it was hiding
> in a bunch of kernel uncore updates. At the very least if wildcard
> conventions are updated then the corresponding documentation needs
> updating:
> Documentation/ABI/testing/sysfs-bus-event_source-devices
Ian, thanks for the information. We didn't notice there is such
documentation to describe the name. :(
Besides the documentation, are there other comments? We can update it
together. Thanks.
>
> Thanks,
> Ian
>
>> ---
>> tools/perf/util/pmu.c | 14 ++++++++------
>> 1 file changed, 8 insertions(+), 6 deletions(-)
>>
>> diff --git a/tools/perf/util/pmu.c b/tools/perf/util/pmu.c
>> index 956ea273c2c7..01a21b6aa031 100644
>> --- a/tools/perf/util/pmu.c
>> +++ b/tools/perf/util/pmu.c
>> @@ -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)
>> --
>> 2.52.0
>>