Re: [PATCH 2/7] perf tools: apply evsel__set_config_if_unset() to all config fields
From: Leo Yan <leo.yan@arm.com>
Date: 2025-12-02 11:14:06
Also in:
linux-perf-users, lkml
On Mon, Dec 01, 2025 at 04:41:05PM +0000, Coresight ML wrote: [...]
void evsel__set_config_if_unset(struct perf_pmu *pmu, struct evsel *evsel,
const char *config_name, u64 val)
{
u64 user_bits = 0, bits;
- struct evsel_config_term *term = evsel__get_config_term(evsel, USR_CHG_CONFIG);
+ struct evsel_config_term *term;
+ struct perf_pmu_format *format = pmu_find_format(&pmu->format, config_name);
+ __u64 *vp;Should check (format == NULL) here and bail out for a unknown config name?
quoted hunk ↗ jump to hunk
+ + switch (format->value) { + case PERF_PMU_FORMAT_VALUE_CONFIG: + term = evsel__get_config_term(evsel, USR_CHG_CONFIG); + vp = &evsel->core.attr.config; + break; + case PERF_PMU_FORMAT_VALUE_CONFIG1: + term = evsel__get_config_term(evsel, USR_CHG_CONFIG1); + vp = &evsel->core.attr.config1; + break; + case PERF_PMU_FORMAT_VALUE_CONFIG2: + term = evsel__get_config_term(evsel, USR_CHG_CONFIG2); + vp = &evsel->core.attr.config2; + break; + case PERF_PMU_FORMAT_VALUE_CONFIG3: + term = evsel__get_config_term(evsel, USR_CHG_CONFIG3); + vp = &evsel->core.attr.config3; + break; + case PERF_PMU_FORMAT_VALUE_CONFIG4: + term = evsel__get_config_term(evsel, USR_CHG_CONFIG4); + vp = &evsel->core.attr.config4; + break; + default: + pr_err("Unknown format value: %d\n", format->value); + return; + } if (term) user_bits = term->val.cfg_chg;@@ -1396,20 +1436,8 @@ void evsel__set_config_if_unset(struct perf_pmu *pmu, struct evsel *evsel, return; /* Otherwise replace it */ - evsel->core.attr.config &= ~bits; - evsel->core.attr.config |= field_prep(bits, val); -} - -static struct perf_pmu_format * -pmu_find_format(const struct list_head *formats, const char *name) -{ - struct perf_pmu_format *format; - - list_for_each_entry(format, formats, list) - if (!strcmp(format->name, name)) - return format; - - return NULL; + *vp &= ~bits; + *vp |= FIELD_PREP(bits, val); }