perf expr: Add debug logging for literals
authorIan Rogers <irogers@google.com>
Wed, 24 Nov 2021 00:12:28 +0000 (16:12 -0800)
committerArnaldo Carvalho de Melo <acme@redhat.com>
Wed, 12 Jan 2022 17:50:28 +0000 (14:50 -0300)
Useful for diagnosing problems with metrics.

Signed-off-by: Ian Rogers <irogers@google.com>
Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Cc: Andi Kleen <ak@linux.intel.com>
Cc: Jiri Olsa <jolsa@redhat.com>
Cc: John Garry <john.garry@huawei.com>
Cc: Kajol Jain <kjain@linux.ibm.com>
Cc: Kan Liang <kan.liang@linux.intel.com>
Cc: Konstantin Khlebnikov <koct9i@gmail.com>
Cc: Mark Rutland <mark.rutland@arm.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Paul Clarke <pc@us.ibm.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Stephane Eranian <eranian@google.com>
Link: http://lore.kernel.org/lkml/20211124001231.3277836-1-irogers@google.com
[ Fixed up perf_cpu conflict, i.e. we need to append ".cpu" to cpu__max_present_cpu() result ]
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
tools/perf/util/expr.c

index e808738..c94fb9b 100644 (file)
@@ -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;
 }