aboutsummaryrefslogtreecommitdiffstats
path: root/tools/perf/util/evsel.c
diff options
context:
space:
mode:
Diffstat (limited to 'tools/perf/util/evsel.c')
-rw-r--r--tools/perf/util/evsel.c67
1 files changed, 66 insertions, 1 deletions
diff --git a/tools/perf/util/evsel.c b/tools/perf/util/evsel.c
index a29c8d03ac69..47cbe1e58b73 100644
--- a/tools/perf/util/evsel.c
+++ b/tools/perf/util/evsel.c
@@ -22,6 +22,7 @@
22#include "thread_map.h" 22#include "thread_map.h"
23#include "target.h" 23#include "target.h"
24#include "perf_regs.h" 24#include "perf_regs.h"
25#include "debug.h"
25 26
26static struct { 27static struct {
27 bool sample_id_all; 28 bool sample_id_all;
@@ -862,6 +863,65 @@ static int get_group_fd(struct perf_evsel *evsel, int cpu, int thread)
862 return fd; 863 return fd;
863} 864}
864 865
866#define __PRINT_ATTR(fmt, cast, field) \
867 fprintf(fp, " %-19s "fmt"\n", #field, cast attr->field)
868
869#define PRINT_ATTR_U32(field) __PRINT_ATTR("%u" , , field)
870#define PRINT_ATTR_X32(field) __PRINT_ATTR("%#x", , field)
871#define PRINT_ATTR_U64(field) __PRINT_ATTR("%" PRIu64, (uint64_t), field)
872#define PRINT_ATTR_X64(field) __PRINT_ATTR("%#"PRIx64, (uint64_t), field)
873
874#define PRINT_ATTR2N(name1, field1, name2, field2) \
875 fprintf(fp, " %-19s %u %-19s %u\n", \
876 name1, attr->field1, name2, attr->field2)
877
878#define PRINT_ATTR2(field1, field2) \
879 PRINT_ATTR2N(#field1, field1, #field2, field2)
880
881static size_t perf_event_attr__fprintf(struct perf_event_attr *attr, FILE *fp)
882{
883 size_t ret = 0;
884
885 ret += fprintf(fp, "%.60s\n", graph_dotted_line);
886 ret += fprintf(fp, "perf_event_attr:\n");
887
888 ret += PRINT_ATTR_U32(type);
889 ret += PRINT_ATTR_U32(size);
890 ret += PRINT_ATTR_X64(config);
891 ret += PRINT_ATTR_U64(sample_period);
892 ret += PRINT_ATTR_U64(sample_freq);
893 ret += PRINT_ATTR_X64(sample_type);
894 ret += PRINT_ATTR_X64(read_format);
895
896 ret += PRINT_ATTR2(disabled, inherit);
897 ret += PRINT_ATTR2(pinned, exclusive);
898 ret += PRINT_ATTR2(exclude_user, exclude_kernel);
899 ret += PRINT_ATTR2(exclude_hv, exclude_idle);
900 ret += PRINT_ATTR2(mmap, comm);
901 ret += PRINT_ATTR2(freq, inherit_stat);
902 ret += PRINT_ATTR2(enable_on_exec, task);
903 ret += PRINT_ATTR2(watermark, precise_ip);
904 ret += PRINT_ATTR2(mmap_data, sample_id_all);
905 ret += PRINT_ATTR2(exclude_host, exclude_guest);
906 ret += PRINT_ATTR2N("excl.callchain_kern", exclude_callchain_kernel,
907 "excl.callchain_user", exclude_callchain_user);
908
909 ret += PRINT_ATTR_U32(wakeup_events);
910 ret += PRINT_ATTR_U32(wakeup_watermark);
911 ret += PRINT_ATTR_X32(bp_type);
912 ret += PRINT_ATTR_X64(bp_addr);
913 ret += PRINT_ATTR_X64(config1);
914 ret += PRINT_ATTR_U64(bp_len);
915 ret += PRINT_ATTR_X64(config2);
916 ret += PRINT_ATTR_X64(branch_sample_type);
917 ret += PRINT_ATTR_X64(sample_regs_user);
918 ret += PRINT_ATTR_U32(sample_stack_user);
919
920 ret += fprintf(fp, "%.60s\n", graph_dotted_line);
921
922 return ret;
923}
924
865static int __perf_evsel__open(struct perf_evsel *evsel, struct cpu_map *cpus, 925static int __perf_evsel__open(struct perf_evsel *evsel, struct cpu_map *cpus,
866 struct thread_map *threads) 926 struct thread_map *threads)
867{ 927{
@@ -886,6 +946,9 @@ retry_sample_id:
886 if (perf_missing_features.sample_id_all) 946 if (perf_missing_features.sample_id_all)
887 evsel->attr.sample_id_all = 0; 947 evsel->attr.sample_id_all = 0;
888 948
949 if (verbose >= 2)
950 perf_event_attr__fprintf(&evsel->attr, stderr);
951
889 for (cpu = 0; cpu < cpus->nr; cpu++) { 952 for (cpu = 0; cpu < cpus->nr; cpu++) {
890 953
891 for (thread = 0; thread < threads->nr; thread++) { 954 for (thread = 0; thread < threads->nr; thread++) {
@@ -895,8 +958,10 @@ retry_sample_id:
895 pid = threads->map[thread]; 958 pid = threads->map[thread];
896 959
897 group_fd = get_group_fd(evsel, cpu, thread); 960 group_fd = get_group_fd(evsel, cpu, thread);
898
899retry_open: 961retry_open:
962 pr_debug2("perf_event_open: pid %d cpu %d group_fd %d flags %#lx\n",
963 pid, cpus->map[cpu], group_fd, flags);
964
900 FD(evsel, cpu, thread) = sys_perf_event_open(&evsel->attr, 965 FD(evsel, cpu, thread) = sys_perf_event_open(&evsel->attr,
901 pid, 966 pid,
902 cpus->map[cpu], 967 cpus->map[cpu],