aboutsummaryrefslogtreecommitdiffstats
path: root/tools
diff options
context:
space:
mode:
authorArnaldo Carvalho de Melo <acme@redhat.com>2016-04-25 15:45:29 -0400
committerArnaldo Carvalho de Melo <acme@redhat.com>2016-04-25 15:48:01 -0400
commita213b92e15cc5019156594c8f3ae9170915aac9f (patch)
treeed26a8197a43d7f4658aadc2b7744cf31ab2e0dc /tools
parent1df54290463e84b7b5eb26e5e6472167c3749901 (diff)
perf evlist: Decode perf_event_attr->branch_sample_type
While trying to use --call-graph lbr in 'perf trace', since we only are interested in the callchain for userspace, up to the callchain, I found that 'perf evlist' is not decoding the branch_sample_type field, fix it. Before: # perf record --call-graph lbr usleep 1 # perf evlist -v cycles:ppp: size: 112, { sample_period, sample_freq }: 4000, sample_type: IP|TID|TIME|CALLCHAIN|CPU|PERIOD|BRANCH_STACK, disabled: 1, inherit: 1, mmap: 1, comm: 1, freq: 1, task: 1, precise_ip: 3, sample_id_all: 1, exclude_guest: 1, mmap2: 1, comm_exec: 1, branch_sample_type: 51201 ^^^^^^^^^^^^^^^^^^^^^^^^^ After: # perf evlist -v cycles:ppp: size: 112, { sample_period, sample_freq }: 4000, sample_type: IP|TID|TIME|CALLCHAIN|CPU|PERIOD|BRANCH_STACK, disabled: 1, inherit: 1, mmap: 1, comm: 1, freq: 1, task: 1, precise_ip: 3, sample_id_all: 1, exclude_guest: 1, mmap2: 1, comm_exec: 1, branch_sample_type: USER|CALL_STACK|NO_FLAGS|NO_CYCLES ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Cc: Adrian Hunter <adrian.hunter@intel.com> Cc: David Ahern <dsahern@gmail.com> Cc: Jiri Olsa <jolsa@kernel.org> Cc: Milian Wolff <milian.wolff@kdab.com> Cc: Namhyung Kim <namhyung@kernel.org> Cc: Wang Nan <wangnan0@huawei.com> Link: http://lkml.kernel.org/n/tip-hozai7974u0ulgx13k96fcaw@git.kernel.org Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Diffstat (limited to 'tools')
-rw-r--r--tools/perf/util/evsel.c18
1 files changed, 17 insertions, 1 deletions
diff --git a/tools/perf/util/evsel.c b/tools/perf/util/evsel.c
index 545bb3f0b2b0..334364e25bbe 100644
--- a/tools/perf/util/evsel.c
+++ b/tools/perf/util/evsel.c
@@ -1231,6 +1231,21 @@ static void __p_sample_type(char *buf, size_t size, u64 value)
1231 __p_bits(buf, size, value, bits); 1231 __p_bits(buf, size, value, bits);
1232} 1232}
1233 1233
1234static void __p_branch_sample_type(char *buf, size_t size, u64 value)
1235{
1236#define bit_name(n) { PERF_SAMPLE_BRANCH_##n, #n }
1237 struct bit_names bits[] = {
1238 bit_name(USER), bit_name(KERNEL), bit_name(HV), bit_name(ANY),
1239 bit_name(ANY_CALL), bit_name(ANY_RETURN), bit_name(IND_CALL),
1240 bit_name(ABORT_TX), bit_name(IN_TX), bit_name(NO_TX),
1241 bit_name(COND), bit_name(CALL_STACK), bit_name(IND_JUMP),
1242 bit_name(CALL), bit_name(NO_FLAGS), bit_name(NO_CYCLES),
1243 { .name = NULL, }
1244 };
1245#undef bit_name
1246 __p_bits(buf, size, value, bits);
1247}
1248
1234static void __p_read_format(char *buf, size_t size, u64 value) 1249static void __p_read_format(char *buf, size_t size, u64 value)
1235{ 1250{
1236#define bit_name(n) { PERF_FORMAT_##n, #n } 1251#define bit_name(n) { PERF_FORMAT_##n, #n }
@@ -1249,6 +1264,7 @@ static void __p_read_format(char *buf, size_t size, u64 value)
1249#define p_unsigned(val) snprintf(buf, BUF_SIZE, "%"PRIu64, (uint64_t)(val)) 1264#define p_unsigned(val) snprintf(buf, BUF_SIZE, "%"PRIu64, (uint64_t)(val))
1250#define p_signed(val) snprintf(buf, BUF_SIZE, "%"PRId64, (int64_t)(val)) 1265#define p_signed(val) snprintf(buf, BUF_SIZE, "%"PRId64, (int64_t)(val))
1251#define p_sample_type(val) __p_sample_type(buf, BUF_SIZE, val) 1266#define p_sample_type(val) __p_sample_type(buf, BUF_SIZE, val)
1267#define p_branch_sample_type(val) __p_branch_sample_type(buf, BUF_SIZE, val)
1252#define p_read_format(val) __p_read_format(buf, BUF_SIZE, val) 1268#define p_read_format(val) __p_read_format(buf, BUF_SIZE, val)
1253 1269
1254#define PRINT_ATTRn(_n, _f, _p) \ 1270#define PRINT_ATTRn(_n, _f, _p) \
@@ -1305,7 +1321,7 @@ int perf_event_attr__fprintf(FILE *fp, struct perf_event_attr *attr,
1305 PRINT_ATTRf(bp_type, p_unsigned); 1321 PRINT_ATTRf(bp_type, p_unsigned);
1306 PRINT_ATTRn("{ bp_addr, config1 }", bp_addr, p_hex); 1322 PRINT_ATTRn("{ bp_addr, config1 }", bp_addr, p_hex);
1307 PRINT_ATTRn("{ bp_len, config2 }", bp_len, p_hex); 1323 PRINT_ATTRn("{ bp_len, config2 }", bp_len, p_hex);
1308 PRINT_ATTRf(branch_sample_type, p_unsigned); 1324 PRINT_ATTRf(branch_sample_type, p_branch_sample_type);
1309 PRINT_ATTRf(sample_regs_user, p_hex); 1325 PRINT_ATTRf(sample_regs_user, p_hex);
1310 PRINT_ATTRf(sample_stack_user, p_unsigned); 1326 PRINT_ATTRf(sample_stack_user, p_unsigned);
1311 PRINT_ATTRf(clockid, p_signed); 1327 PRINT_ATTRf(clockid, p_signed);