diff options
Diffstat (limited to 'tools')
-rw-r--r-- | tools/perf/tests/pmu-events.c | 17 |
1 files changed, 11 insertions, 6 deletions
diff --git a/tools/perf/tests/pmu-events.c b/tools/perf/tests/pmu-events.c index e36d8b1610d4..a9f2330f6257 100644 --- a/tools/perf/tests/pmu-events.c +++ b/tools/perf/tests/pmu-events.c @@ -959,7 +959,7 @@ static struct test_metric metrics[] = { { "(imx8_ddr0@read\\-cycles@ + imx8_ddr0@write\\-cycles@)", }, }; -static int metric_parse_fake(const char *str) +static int metric_parse_fake(const char *metric_name, const char *str) { struct expr_parse_ctx *ctx; struct hashmap_entry *cur; @@ -968,7 +968,7 @@ static int metric_parse_fake(const char *str) size_t bkt; int i; - pr_debug("parsing '%s'\n", str); + pr_debug("parsing '%s': '%s'\n", metric_name, str); ctx = expr__ctx_new(); if (!ctx) { @@ -1006,8 +1006,13 @@ static int metric_parse_fake(const char *str) hashmap__for_each_entry(ctx->ids, cur, bkt) expr__add_id_val(ctx, strdup(cur->pkey), i--); if (expr__parse(&result, ctx, str)) { - pr_err("expr__parse failed\n"); - ret = -1; + pr_err("expr__parse failed for %s\n", metric_name); + /* The following have hard to avoid divide by zero. */ + if (!strcmp(metric_name, "tma_clears_resteers") || + !strcmp(metric_name, "tma_mispredicts_resteers")) + ret = 0; + else + ret = -1; } } @@ -1023,7 +1028,7 @@ static int test__parsing_fake_callback(const struct pmu_event *pe, if (!pe->metric_expr) return 0; - return metric_parse_fake(pe->metric_expr); + return metric_parse_fake(pe->metric_name, pe->metric_expr); } /* @@ -1037,7 +1042,7 @@ static int test__parsing_fake(struct test_suite *test __maybe_unused, int err = 0; for (size_t i = 0; i < ARRAY_SIZE(metrics); i++) { - err = metric_parse_fake(metrics[i].str); + err = metric_parse_fake("", metrics[i].str); if (err) return err; } |