Messages in this thread Patch in this message | | | Date | Wed, 12 Jan 2022 14:50:01 -0300 | From | Arnaldo Carvalho de Melo <> | Subject | Re: [RFC PATCH] perf pmu-events: Don't lower case MetricExpr |
| |
Em Wed, Jan 12, 2022 at 02:45:07PM -0300, Arnaldo Carvalho de Melo escreveu: > Em Wed, Jan 12, 2022 at 09:22:51AM -0800, Ian Rogers escreveu: > > On Thu, Nov 25, 2021 at 11:13 PM Ian Rogers <irogers@google.com> wrote: > > > > > > This patch changes MetricExpr to be written out in the same case. This > > > enables events in metrics to use modifiers like 'G' which currently > > > yield parse errors when made lower case. To keep tests passing the > > > literal #smt_on is compared in a non-case sensitive way - #SMT_on is > > > present in at least SkylakeX metrics. > > > > Ping. > > I tried applying 20211124001231.3277836-1-irogers@google.com on top of > your perf_cpu series, it failed, will check. > > BTW, I got the two other patches in that series: > > ⬢[acme@toolbox perf]$ git log --oneline -2 > 6dd8646939a770e4 (HEAD -> perf/core) perf tools: Probe non-deprecated sysfs path 1st > 0ce05781f4905fcf perf tools: Fix SMT fallback with large core counts > ⬢[acme@toolbox perf]$
It was due to that cpu__max_present_cpu().cpu;
Fixed, applied.
- Arnaldo
diff --git a/tools/perf/util/expr.c b/tools/perf/util/expr.c index e808738493e219fd..c94fb9bef919f5cb 100644 --- a/tools/perf/util/expr.c +++ b/tools/perf/util/expr.c @@ -405,12 +405,17 @@ double expr_id_data__source_count(const struct expr_id_data *data) double expr__get_literal(const char *literal) { static struct cpu_topology *topology; + double result = NAN; - if (!strcmp("#smt_on", literal)) - return smt_on() > 0 ? 1.0 : 0.0; + if (!strcmp("#smt_on", literal)) { + result = smt_on() > 0 ? 1.0 : 0.0; + goto out; + } - if (!strcmp("#num_cpus", literal)) - return cpu__max_present_cpu().cpu; + if (!strcmp("#num_cpus", literal)) { + result = cpu__max_present_cpu().cpu; + goto out; + } /* * Assume that topology strings are consistent, such as CPUs "0-1" @@ -422,16 +427,24 @@ double expr__get_literal(const char *literal) topology = cpu_topology__new(); if (!topology) { pr_err("Error creating CPU topology"); - return NAN; + goto out; } } - if (!strcmp("#num_packages", literal)) - return topology->package_cpus_lists; - if (!strcmp("#num_dies", literal)) - return topology->die_cpus_lists; - if (!strcmp("#num_cores", literal)) - return topology->core_cpus_lists; + if (!strcmp("#num_packages", literal)) { + result = topology->package_cpus_lists; + goto out; + } + if (!strcmp("#num_dies", literal)) { + result = topology->die_cpus_lists; + goto out; + } + if (!strcmp("#num_cores", literal)) { + result = topology->core_cpus_lists; + goto out; + } pr_err("Unrecognized literal '%s'", literal); - return NAN; +out: + pr_debug2("literal: %s = %f\n", literal, result); + return result; }
| |