perf stat: Exit perf stat if parse groups fails
authorIan Rogers <irogers@google.com>
Wed, 6 Dec 2023 18:35:33 +0000 (10:35 -0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 25 Jan 2024 23:35:51 +0000 (15:35 -0800)
[ Upstream commit 0713ab3bd169da82c35eefd012b07b715e4ebcf7 ]

Metrics were added by a callback but commit a4b8cfcabb1d90ec ("perf
stat: Delay metric parsing") postponed this to allow optimizations based
on the CPU configuration.

In doing so it stopped errors in metric parsing from causing 'perf stat'
termination.

This change adds the termination for bad metric names back in.

Fixes: a4b8cfcabb1d90ec ("perf stat: Delay metric parsing")
Reported-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Signed-off-by: Ian Rogers <irogers@google.com>
Tested-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Cc: Ian Rogers <irogers@google.com>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Mark Rutland <mark.rutland@arm.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Closes: https://lore.kernel.org/lkml/ZXByT1K6enTh2EHT@kernel.org/
Link: https://lore.kernel.org/r/20231206183533.972028-1-irogers@google.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
tools/perf/builtin-stat.c

index a3af805..78c1049 100644 (file)
@@ -2695,15 +2695,19 @@ int cmd_stat(int argc, const char **argv)
         */
        if (metrics) {
                const char *pmu = parse_events_option_args.pmu_filter ?: "all";
+               int ret = metricgroup__parse_groups(evsel_list, pmu, metrics,
+                                               stat_config.metric_no_group,
+                                               stat_config.metric_no_merge,
+                                               stat_config.metric_no_threshold,
+                                               stat_config.user_requested_cpu_list,
+                                               stat_config.system_wide,
+                                               &stat_config.metric_events);
 
-               metricgroup__parse_groups(evsel_list, pmu, metrics,
-                                       stat_config.metric_no_group,
-                                       stat_config.metric_no_merge,
-                                       stat_config.metric_no_threshold,
-                                       stat_config.user_requested_cpu_list,
-                                       stat_config.system_wide,
-                                       &stat_config.metric_events);
                zfree(&metrics);
+               if (ret) {
+                       status = ret;
+                       goto out;
+               }
        }
 
        if (add_default_attributes())