evlist__for_each_entry_safe(evlist, tmp, evsel) {
if (evsel__is_aux_event(evsel)) {
arm_spe_setup_evsel(evsel, cpus);
- if (!evsel__get_config_val(evsel, "discard", &discard_bit))
+ if (evsel__config_exists(evsel, "discard") &&
+ !evsel__get_config_val(evsel, "discard", &discard_bit))
discard = !!discard_bit;
}
}
return ret;
}
-static int test__pmu_usr_chgs(struct test_suite *test __maybe_unused, int subtest __maybe_unused)
+static int test__pmu_config_helpers(struct test_suite *test __maybe_unused,
+ int subtest __maybe_unused)
{
const char *event = "perf-pmu-test/config=15,config1=4,krava02=170,"
"krava03=1,krava11=27,krava12=1/";
}
evsel = evlist__first(evlist);
+ /* Test evsel__config_exists() */
+ TEST_ASSERT_EQUAL("krava01 should exist",
+ evsel__config_exists(evsel, "krava01"), true);
+ TEST_ASSERT_EQUAL("krava99 should not exist",
+ evsel__config_exists(evsel, "krava99"), false);
+
/*
* Set via config=15, krava01 bits 0-1
* Set via config1=4, krava11 bit 1
TEST_CASE("PMU name combining", name_len),
TEST_CASE("PMU name comparison", name_cmp),
TEST_CASE("PMU cmdline match", pmu_match),
- TEST_CASE("PMU user config changes", pmu_usr_chgs),
+ TEST_CASE("PMU config helpers", pmu_config_helpers),
{ .name = NULL, }
};
perf_pmu__format_pack(format->bits, val, vp, /*zero=*/true);
}
+bool evsel__config_exists(const struct evsel *evsel, const char *config_name)
+{
+ struct perf_pmu_format *format = pmu_find_format(&evsel->pmu->format, config_name);
+
+ return format && !bitmap_empty(format->bits, PERF_PMU_FORMAT_BITS);
+}
int evsel__get_config_val(const struct evsel *evsel, const char *config_name,
u64 *val)
((((src) >> (pos)) & ((1ull << (size)) - 1)) << (63 - ((pos) + (size) - 1)))
u64 evsel__bitfield_swap_branch_flags(u64 value);
+bool evsel__config_exists(const struct evsel *evsel, const char *config_name);
int evsel__get_config_val(const struct evsel *evsel, const char *config_name,
u64 *val);
void evsel__set_config_if_unset(struct evsel *evsel, const char *config_name,