diff options
author | Leo Yan <leo.yan@arm.com> | 2025-03-04 11:12:33 +0000 |
---|---|---|
committer | Namhyung Kim <namhyung@kernel.org> | 2025-03-05 09:13:19 -0800 |
commit | 1e66dcff7b9bae2abc928d0e24fbb68e206365bb (patch) | |
tree | 8a5d83c2fb496d62cc472219420cafc2b1393fb4 | |
parent | 4caa971050875ef17491ccf7c8d6defd4d99763f (diff) |
perf script: Add not taken event for branch stack
The branch stack has an existed field for printing mispredict, extend
the field for printing events and add support not-taken event.
Reviewed-by: Ian Rogers <irogers@google.com>
Reviewed-by: James Clark <james.clark@linaro.org>
Signed-off-by: Leo Yan <leo.yan@arm.com>
Link: https://lore.kernel.org/r/20250304111240.3378214-6-leo.yan@arm.com
Signed-off-by: Namhyung Kim <namhyung@kernel.org>
-rw-r--r-- | tools/perf/builtin-script.c | 20 | ||||
-rw-r--r-- | tools/perf/util/branch.h | 3 |
2 files changed, 15 insertions, 8 deletions
diff --git a/tools/perf/builtin-script.c b/tools/perf/builtin-script.c index 8ca04293d335..d931c971a100 100644 --- a/tools/perf/builtin-script.c +++ b/tools/perf/builtin-script.c @@ -935,19 +935,25 @@ static int perf_sample__fprintf_start(struct perf_script *script, return printed; } -static inline char -mispred_str(struct branch_entry *br) +static inline size_t +bstack_event_str(struct branch_entry *br, char *buf, size_t sz) { - if (!(br->flags.mispred || br->flags.predicted)) - return '-'; + if (!(br->flags.mispred || br->flags.predicted || br->flags.not_taken)) + return snprintf(buf, sz, "-"); - return br->flags.predicted ? 'P' : 'M'; + return snprintf(buf, sz, "%s%s", + br->flags.predicted ? "P" : "M", + br->flags.not_taken ? "N" : ""); } static int print_bstack_flags(FILE *fp, struct branch_entry *br) { - return fprintf(fp, "/%c/%c/%c/%d/%s/%s ", - mispred_str(br), + char events[16] = { 0 }; + size_t pos; + + pos = bstack_event_str(br, events, sizeof(events)); + return fprintf(fp, "/%s/%c/%c/%d/%s/%s ", + pos < 0 ? "-" : events, br->flags.in_tx ? 'X' : '-', br->flags.abort ? 'A' : '-', br->flags.cycles, diff --git a/tools/perf/util/branch.h b/tools/perf/util/branch.h index b80c12c74bbb..7429530fa774 100644 --- a/tools/perf/util/branch.h +++ b/tools/perf/util/branch.h @@ -25,7 +25,8 @@ struct branch_flags { u64 spec:2; u64 new_type:4; u64 priv:3; - u64 reserved:31; + u64 not_taken:1; + u64 reserved:30; }; }; }; |