perf tests: Fix hwmon parsing with PMU name test

Incorrectly the hwmon with PMU name test didn't pass "true". Fix and
address issue with hwmon_pmu__config_terms needing to load events - a
load bearing assert fired. Also fix missing list deletion when putting
the hwmon test PMU and lower some debug warnings to make the hwmon PMU
less spammy in verbose mode.

Signed-off-by: Ian Rogers <irogers@google.com>
Tested-by: Namhyung Kim <namhyung@kernel.org>
Link: https://lore.kernel.org/r/20241121000955.536930-1-irogers@google.com
Signed-off-by: Namhyung Kim <namhyung@kernel.org>
This commit is contained in:
Ian Rogers 2024-11-20 16:09:55 -08:00 committed by Namhyung Kim
parent 62878b400f
commit 6d78089da9
2 changed files with 13 additions and 8 deletions

View File

@ -41,6 +41,7 @@ static int test_pmu_put(const char *dir, struct perf_pmu *hwm)
if (ret)
pr_err("Failure to \"%s\"\n", buf);
list_del(&hwm->list);
perf_pmu__delete(hwm);
return ret;
}
@ -147,7 +148,7 @@ static int do_test(size_t i, bool with_pmu, bool with_alias)
}
if (with_pmu)
snprintf(str, sizeof(str), "/%s/", test_event);
snprintf(str, sizeof(str), "hwmon_a_test_hwmon_pmu/%s/", test_event);
else
strlcpy(str, test_event, sizeof(str));
@ -231,7 +232,7 @@ static int test__hwmon_pmu_without_pmu(struct test_suite *test __maybe_unused,
static int test__hwmon_pmu_with_pmu(struct test_suite *test __maybe_unused,
int subtest __maybe_unused)
{
return test__hwmon_pmu(/*with_pmu=*/false);
return test__hwmon_pmu(/*with_pmu=*/true);
}
static int test__parse_hwmon_filename(struct test_suite *test __maybe_unused,

View File

@ -197,13 +197,13 @@ bool parse_hwmon_filename(const char *filename,
}
}
if (fn_item == NULL || fn_type[0] == '\0' || (item != NULL && fn_item[0] == '\0')) {
pr_debug("hwmon_pmu: not a hwmon file '%s'\n", filename);
pr_debug3("hwmon_pmu: not a hwmon file '%s'\n", filename);
return false;
}
elem = bsearch(&fn_type, hwmon_type_strs + 1, ARRAY_SIZE(hwmon_type_strs) - 1,
sizeof(hwmon_type_strs[0]), hwmon_strcmp);
if (!elem) {
pr_debug("hwmon_pmu: not a hwmon type '%s' in file name '%s'\n",
pr_debug3("hwmon_pmu: not a hwmon type '%s' in file name '%s'\n",
fn_type, filename);
return false;
}
@ -223,7 +223,7 @@ bool parse_hwmon_filename(const char *filename,
elem = bsearch(fn_item, hwmon_item_strs + 1, ARRAY_SIZE(hwmon_item_strs) - 1,
sizeof(hwmon_item_strs[0]), hwmon_strcmp);
if (!elem) {
pr_debug("hwmon_pmu: not a hwmon item '%s' in file name '%s'\n",
pr_debug3("hwmon_pmu: not a hwmon item '%s' in file name '%s'\n",
fn_item, filename);
return false;
}
@ -281,7 +281,7 @@ static int hwmon_pmu__read_events(struct hwmon_pmu *pmu)
continue;
if (!parse_hwmon_filename(ent->d_name, &type, &number, &item, &alarm)) {
pr_debug("Not a hwmon file '%s'\n", ent->d_name);
pr_debug3("Not a hwmon file '%s'\n", ent->d_name);
continue;
}
key.num = number;
@ -653,10 +653,14 @@ int hwmon_pmu__config_terms(const struct perf_pmu *pmu,
struct parse_events_terms *terms,
struct parse_events_error *err)
{
const struct hwmon_pmu *hwm = container_of(pmu, struct hwmon_pmu, pmu);
struct hwmon_pmu *hwm = container_of(pmu, struct hwmon_pmu, pmu);
struct parse_events_term *term;
int ret;
ret = hwmon_pmu__read_events(hwm);
if (ret)
return ret;
assert(pmu->sysfs_aliases_loaded);
list_for_each_entry(term, &terms->terms, list) {
if (hwmon_pmu__config_term(hwm, attr, term, err))
return -EINVAL;