diff options
Diffstat (limited to 'tools/perf/util')
-rw-r--r-- | tools/perf/util/evlist.c | 27 | ||||
-rw-r--r-- | tools/perf/util/evlist.h | 3 | ||||
-rw-r--r-- | tools/perf/util/evsel.c | 1 | ||||
-rw-r--r-- | tools/perf/util/intel-pt-decoder/intel-pt-decoder.c | 4 | ||||
-rw-r--r-- | tools/perf/util/intel-pt-decoder/intel-pt-log.c | 5 | ||||
-rw-r--r-- | tools/perf/util/intel-pt-decoder/intel-pt-log.h | 1 | ||||
-rw-r--r-- | tools/perf/util/intel-pt.c | 16 | ||||
-rw-r--r-- | tools/perf/util/pmu.c | 2 |
8 files changed, 54 insertions, 5 deletions
diff --git a/tools/perf/util/evlist.c b/tools/perf/util/evlist.c index e88e6f9b1463..668d2a9ef0f4 100644 --- a/tools/perf/util/evlist.c +++ b/tools/perf/util/evlist.c | |||
@@ -1810,3 +1810,30 @@ void perf_evlist__force_leader(struct perf_evlist *evlist) | |||
1810 | leader->forced_leader = true; | 1810 | leader->forced_leader = true; |
1811 | } | 1811 | } |
1812 | } | 1812 | } |
1813 | |||
1814 | struct perf_evsel *perf_evlist__reset_weak_group(struct perf_evlist *evsel_list, | ||
1815 | struct perf_evsel *evsel) | ||
1816 | { | ||
1817 | struct perf_evsel *c2, *leader; | ||
1818 | bool is_open = true; | ||
1819 | |||
1820 | leader = evsel->leader; | ||
1821 | pr_debug("Weak group for %s/%d failed\n", | ||
1822 | leader->name, leader->nr_members); | ||
1823 | |||
1824 | /* | ||
1825 | * for_each_group_member doesn't work here because it doesn't | ||
1826 | * include the first entry. | ||
1827 | */ | ||
1828 | evlist__for_each_entry(evsel_list, c2) { | ||
1829 | if (c2 == evsel) | ||
1830 | is_open = false; | ||
1831 | if (c2->leader == leader) { | ||
1832 | if (is_open) | ||
1833 | perf_evsel__close(c2); | ||
1834 | c2->leader = c2; | ||
1835 | c2->nr_members = 0; | ||
1836 | } | ||
1837 | } | ||
1838 | return leader; | ||
1839 | } | ||
diff --git a/tools/perf/util/evlist.h b/tools/perf/util/evlist.h index dc66436add98..9919eed6d15b 100644 --- a/tools/perf/util/evlist.h +++ b/tools/perf/util/evlist.h | |||
@@ -312,4 +312,7 @@ bool perf_evlist__exclude_kernel(struct perf_evlist *evlist); | |||
312 | 312 | ||
313 | void perf_evlist__force_leader(struct perf_evlist *evlist); | 313 | void perf_evlist__force_leader(struct perf_evlist *evlist); |
314 | 314 | ||
315 | struct perf_evsel *perf_evlist__reset_weak_group(struct perf_evlist *evlist, | ||
316 | struct perf_evsel *evsel); | ||
317 | |||
315 | #endif /* __PERF_EVLIST_H */ | 318 | #endif /* __PERF_EVLIST_H */ |
diff --git a/tools/perf/util/evsel.c b/tools/perf/util/evsel.c index 6d187059a373..d37bb1566cd9 100644 --- a/tools/perf/util/evsel.c +++ b/tools/perf/util/evsel.c | |||
@@ -956,7 +956,6 @@ void perf_evsel__config(struct perf_evsel *evsel, struct record_opts *opts, | |||
956 | attr->sample_freq = 0; | 956 | attr->sample_freq = 0; |
957 | attr->sample_period = 0; | 957 | attr->sample_period = 0; |
958 | attr->write_backward = 0; | 958 | attr->write_backward = 0; |
959 | attr->sample_id_all = 0; | ||
960 | } | 959 | } |
961 | 960 | ||
962 | if (opts->no_samples) | 961 | if (opts->no_samples) |
diff --git a/tools/perf/util/intel-pt-decoder/intel-pt-decoder.c b/tools/perf/util/intel-pt-decoder/intel-pt-decoder.c index 58f6a9ceb590..4503f3ca45ab 100644 --- a/tools/perf/util/intel-pt-decoder/intel-pt-decoder.c +++ b/tools/perf/util/intel-pt-decoder/intel-pt-decoder.c | |||
@@ -1474,6 +1474,8 @@ static void intel_pt_calc_mtc_timestamp(struct intel_pt_decoder *decoder) | |||
1474 | decoder->have_calc_cyc_to_tsc = false; | 1474 | decoder->have_calc_cyc_to_tsc = false; |
1475 | intel_pt_calc_cyc_to_tsc(decoder, true); | 1475 | intel_pt_calc_cyc_to_tsc(decoder, true); |
1476 | } | 1476 | } |
1477 | |||
1478 | intel_pt_log_to("Setting timestamp", decoder->timestamp); | ||
1477 | } | 1479 | } |
1478 | 1480 | ||
1479 | static void intel_pt_calc_cbr(struct intel_pt_decoder *decoder) | 1481 | static void intel_pt_calc_cbr(struct intel_pt_decoder *decoder) |
@@ -1514,6 +1516,8 @@ static void intel_pt_calc_cyc_timestamp(struct intel_pt_decoder *decoder) | |||
1514 | decoder->timestamp = timestamp; | 1516 | decoder->timestamp = timestamp; |
1515 | 1517 | ||
1516 | decoder->timestamp_insn_cnt = 0; | 1518 | decoder->timestamp_insn_cnt = 0; |
1519 | |||
1520 | intel_pt_log_to("Setting timestamp", decoder->timestamp); | ||
1517 | } | 1521 | } |
1518 | 1522 | ||
1519 | /* Walk PSB+ packets when already in sync. */ | 1523 | /* Walk PSB+ packets when already in sync. */ |
diff --git a/tools/perf/util/intel-pt-decoder/intel-pt-log.c b/tools/perf/util/intel-pt-decoder/intel-pt-log.c index e02bc7b166a0..5e64da270f97 100644 --- a/tools/perf/util/intel-pt-decoder/intel-pt-log.c +++ b/tools/perf/util/intel-pt-decoder/intel-pt-log.c | |||
@@ -31,6 +31,11 @@ static FILE *f; | |||
31 | static char log_name[MAX_LOG_NAME]; | 31 | static char log_name[MAX_LOG_NAME]; |
32 | bool intel_pt_enable_logging; | 32 | bool intel_pt_enable_logging; |
33 | 33 | ||
34 | void *intel_pt_log_fp(void) | ||
35 | { | ||
36 | return f; | ||
37 | } | ||
38 | |||
34 | void intel_pt_log_enable(void) | 39 | void intel_pt_log_enable(void) |
35 | { | 40 | { |
36 | intel_pt_enable_logging = true; | 41 | intel_pt_enable_logging = true; |
diff --git a/tools/perf/util/intel-pt-decoder/intel-pt-log.h b/tools/perf/util/intel-pt-decoder/intel-pt-log.h index 45b64f93f358..cc084937f701 100644 --- a/tools/perf/util/intel-pt-decoder/intel-pt-log.h +++ b/tools/perf/util/intel-pt-decoder/intel-pt-log.h | |||
@@ -22,6 +22,7 @@ | |||
22 | 22 | ||
23 | struct intel_pt_pkt; | 23 | struct intel_pt_pkt; |
24 | 24 | ||
25 | void *intel_pt_log_fp(void); | ||
25 | void intel_pt_log_enable(void); | 26 | void intel_pt_log_enable(void); |
26 | void intel_pt_log_disable(void); | 27 | void intel_pt_log_disable(void); |
27 | void intel_pt_log_set_name(const char *name); | 28 | void intel_pt_log_set_name(const char *name); |
diff --git a/tools/perf/util/intel-pt.c b/tools/perf/util/intel-pt.c index 86cc9a64e982..149ff361ca78 100644 --- a/tools/perf/util/intel-pt.c +++ b/tools/perf/util/intel-pt.c | |||
@@ -206,6 +206,16 @@ static void intel_pt_dump_event(struct intel_pt *pt, unsigned char *buf, | |||
206 | intel_pt_dump(pt, buf, len); | 206 | intel_pt_dump(pt, buf, len); |
207 | } | 207 | } |
208 | 208 | ||
209 | static void intel_pt_log_event(union perf_event *event) | ||
210 | { | ||
211 | FILE *f = intel_pt_log_fp(); | ||
212 | |||
213 | if (!intel_pt_enable_logging || !f) | ||
214 | return; | ||
215 | |||
216 | perf_event__fprintf(event, f); | ||
217 | } | ||
218 | |||
209 | static int intel_pt_do_fix_overlap(struct intel_pt *pt, struct auxtrace_buffer *a, | 219 | static int intel_pt_do_fix_overlap(struct intel_pt *pt, struct auxtrace_buffer *a, |
210 | struct auxtrace_buffer *b) | 220 | struct auxtrace_buffer *b) |
211 | { | 221 | { |
@@ -2010,9 +2020,9 @@ static int intel_pt_process_event(struct perf_session *session, | |||
2010 | event->header.type == PERF_RECORD_SWITCH_CPU_WIDE) | 2020 | event->header.type == PERF_RECORD_SWITCH_CPU_WIDE) |
2011 | err = intel_pt_context_switch(pt, event, sample); | 2021 | err = intel_pt_context_switch(pt, event, sample); |
2012 | 2022 | ||
2013 | intel_pt_log("event %s (%u): cpu %d time %"PRIu64" tsc %#"PRIx64"\n", | 2023 | intel_pt_log("event %u: cpu %d time %"PRIu64" tsc %#"PRIx64" ", |
2014 | perf_event__name(event->header.type), event->header.type, | 2024 | event->header.type, sample->cpu, sample->time, timestamp); |
2015 | sample->cpu, sample->time, timestamp); | 2025 | intel_pt_log_event(event); |
2016 | 2026 | ||
2017 | return err; | 2027 | return err; |
2018 | } | 2028 | } |
diff --git a/tools/perf/util/pmu.c b/tools/perf/util/pmu.c index 7799788f662f..7e49baad304d 100644 --- a/tools/perf/util/pmu.c +++ b/tools/perf/util/pmu.c | |||
@@ -773,7 +773,7 @@ static void pmu_add_cpu_aliases(struct list_head *head, struct perf_pmu *pmu) | |||
773 | 773 | ||
774 | if (!is_arm_pmu_core(name)) { | 774 | if (!is_arm_pmu_core(name)) { |
775 | pname = pe->pmu ? pe->pmu : "cpu"; | 775 | pname = pe->pmu ? pe->pmu : "cpu"; |
776 | if (strncmp(pname, name, strlen(pname))) | 776 | if (strcmp(pname, name)) |
777 | continue; | 777 | continue; |
778 | } | 778 | } |
779 | 779 | ||