]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
perf script: Fix missing '+' indicator when branch counter reaches upper limit
authorDapeng Mi <dapeng1.mi@linux.intel.com>
Thu, 28 May 2026 15:36:36 +0000 (10:36 -0500)
committerArnaldo Carvalho de Melo <acme@redhat.com>
Sat, 30 May 2026 00:22:44 +0000 (21:22 -0300)
When displaying branch counter (br_cntr) information, a "+" suffix
represents that event occurrences may have been lost due to branch
counter saturation. However, this indicator was missing in perf script.
Add it back.

Before:

 # Branch counter abbr list:
 # cpu_core/event=0xc4,umask=0x20/ppp = A
 # cpu_core/instructions/ = B
 # cpu_core/MEM_INST_RETIRED.ALL_LOADS/ = C
 # cpu_core/MEM_LOAD_RETIRED.L2_MISS/ = D
 # '-' No event occurs
 # '+' Event occurrences may be lost due to branch counter saturated
...
        datasym+190:
        00005567f9951676        jz 0x5567f995162dr_cntr: BBBC   # PRED 1 cycles [1]
...
After:
...
        datasym+190:
        00005567f9951676        jz 0x5567f995162dr_cntr: BBB+C  # PRED 1 cycles [1]
...

Reviewed-by: Dapeng Mi <dapeng1.mi@linux.intel.com>
Signed-off-by: Dapeng Mi <dapeng1.mi@linux.intel.com>
Signed-off-by: Thomas Falcon <thomas.falcon@intel.com>
Acked-by: Ian Rogers <irogers@google.com>
Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: James Clark <james.clark@linaro.org>
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>
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
tools/perf/builtin-script.c

index e330ae7f725e176b255e1d40dc87a19b4ca631e9..5124edf2b7a692b20ca36a0e64c990c4bb204f5a 100644 (file)
@@ -1291,8 +1291,12 @@ static int ip__fprintf_jump(uint64_t ip, struct branch_entry *en,
                        if (!verbose) {
                                for (j = 0; j < num; j++)
                                        printed += fprintf(fp, "%s", pos->abbr_name);
-                       } else
-                               printed += fprintf(fp, "%s %d ", pos->name, num);
+                               if (mask && (num == mask))
+                                       printed += fprintf(fp, "+");
+                       } else {
+                               printed += fprintf(fp, "%s %d%s", pos->name,
+                                                  num, mask && (num == mask) ? "+ " : " ");
+                       }
                }
                if (numprinted == 0 && !verbose)
                        printed += fprintf(fp, "-");