aboutsummaryrefslogtreecommitdiffstats
path: root/tools/perf/util
diff options
context:
space:
mode:
Diffstat (limited to 'tools/perf/util')
-rw-r--r--tools/perf/util/evlist.c27
-rw-r--r--tools/perf/util/evlist.h3
-rw-r--r--tools/perf/util/evsel.c1
-rw-r--r--tools/perf/util/intel-pt-decoder/intel-pt-decoder.c4
-rw-r--r--tools/perf/util/intel-pt-decoder/intel-pt-log.c5
-rw-r--r--tools/perf/util/intel-pt-decoder/intel-pt-log.h1
-rw-r--r--tools/perf/util/intel-pt.c16
-rw-r--r--tools/perf/util/pmu.c2
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
1814struct 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
313void perf_evlist__force_leader(struct perf_evlist *evlist); 313void perf_evlist__force_leader(struct perf_evlist *evlist);
314 314
315struct 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
1479static void intel_pt_calc_cbr(struct intel_pt_decoder *decoder) 1481static 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;
31static char log_name[MAX_LOG_NAME]; 31static char log_name[MAX_LOG_NAME];
32bool intel_pt_enable_logging; 32bool intel_pt_enable_logging;
33 33
34void *intel_pt_log_fp(void)
35{
36 return f;
37}
38
34void intel_pt_log_enable(void) 39void 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
23struct intel_pt_pkt; 23struct intel_pt_pkt;
24 24
25void *intel_pt_log_fp(void);
25void intel_pt_log_enable(void); 26void intel_pt_log_enable(void);
26void intel_pt_log_disable(void); 27void intel_pt_log_disable(void);
27void intel_pt_log_set_name(const char *name); 28void 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
209static 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
209static int intel_pt_do_fix_overlap(struct intel_pt *pt, struct auxtrace_buffer *a, 219static 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