perf lock contention: Fix debug stat if no contention
authorNamhyung Kim <namhyung@kernel.org>
Mon, 27 Mar 2023 22:57:10 +0000 (15:57 -0700)
committerArnaldo Carvalho de Melo <acme@redhat.com>
Tue, 4 Apr 2023 12:39:56 +0000 (09:39 -0300)
It should not divide if the total number is 0.  Otherwise it'd show
NaN in the bad rate output.  Also add a whitespace in the "output
for debug" message.

  $ sudo perf lock contention -abv true
  Looking at the vmlinux_path (8 entries long)
  symsrc__init: cannot get elf header.
  Using /proc/kcore for kernel data
  Using /proc/kallsyms for symbols
   contended   total wait     max wait     avg wait         type   caller

  === output for debug===

  bad: 0, total: 0
  bad rate: -nan %     <-------------------------  (here)
  histogram of events caused bad sequence
      acquire: 0
     acquired: 0
    contended: 0
      release: 0

Signed-off-by: Namhyung Kim <namhyung@kernel.org>
Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: Hao Luo <haoluo@google.com>
Cc: Ian Rogers <irogers@google.com>
Cc: Ingo Molnar <mingo@kernel.org>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: bpf@vger.kernel.org
Link: https://lore.kernel.org/r/20230327225711.245738-1-namhyung@kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
tools/perf/builtin-lock.c

index 3c8a19e..82dd2df 100644 (file)
@@ -1323,10 +1323,10 @@ static void print_bad_events(int bad, int total)
        for (i = 0; i < BROKEN_MAX; i++)
                broken += bad_hist[i];
 
-       if (quiet || (broken == 0 && verbose <= 0))
+       if (quiet || total == 0 || (broken == 0 && verbose <= 0))
                return;
 
-       pr_info("\n=== output for debug===\n\n");
+       pr_info("\n=== output for debug ===\n\n");
        pr_info("bad: %d, total: %d\n", bad, total);
        pr_info("bad rate: %.2f %%\n", (double)bad / (double)total * 100);
        pr_info("histogram of events caused bad sequence\n");