diff options
Diffstat (limited to 'tools/perf/util/evlist.c')
-rw-r--r-- | tools/perf/util/evlist.c | 43 |
1 files changed, 40 insertions, 3 deletions
diff --git a/tools/perf/util/evlist.c b/tools/perf/util/evlist.c index d81f13de2476..86a03836a83f 100644 --- a/tools/perf/util/evlist.c +++ b/tools/perf/util/evlist.c | |||
@@ -1181,12 +1181,12 @@ void perf_evlist__set_maps(struct perf_evlist *evlist, struct cpu_map *cpus, | |||
1181 | */ | 1181 | */ |
1182 | if (cpus != evlist->cpus) { | 1182 | if (cpus != evlist->cpus) { |
1183 | cpu_map__put(evlist->cpus); | 1183 | cpu_map__put(evlist->cpus); |
1184 | evlist->cpus = cpus; | 1184 | evlist->cpus = cpu_map__get(cpus); |
1185 | } | 1185 | } |
1186 | 1186 | ||
1187 | if (threads != evlist->threads) { | 1187 | if (threads != evlist->threads) { |
1188 | thread_map__put(evlist->threads); | 1188 | thread_map__put(evlist->threads); |
1189 | evlist->threads = threads; | 1189 | evlist->threads = thread_map__get(threads); |
1190 | } | 1190 | } |
1191 | 1191 | ||
1192 | perf_evlist__propagate_maps(evlist); | 1192 | perf_evlist__propagate_maps(evlist); |
@@ -1223,6 +1223,9 @@ int perf_evlist__set_filter(struct perf_evlist *evlist, const char *filter) | |||
1223 | int err = 0; | 1223 | int err = 0; |
1224 | 1224 | ||
1225 | evlist__for_each(evlist, evsel) { | 1225 | evlist__for_each(evlist, evsel) { |
1226 | if (evsel->attr.type != PERF_TYPE_TRACEPOINT) | ||
1227 | continue; | ||
1228 | |||
1226 | err = perf_evsel__set_filter(evsel, filter); | 1229 | err = perf_evsel__set_filter(evsel, filter); |
1227 | if (err) | 1230 | if (err) |
1228 | break; | 1231 | break; |
@@ -1624,7 +1627,7 @@ size_t perf_evlist__fprintf(struct perf_evlist *evlist, FILE *fp) | |||
1624 | return printed + fprintf(fp, "\n"); | 1627 | return printed + fprintf(fp, "\n"); |
1625 | } | 1628 | } |
1626 | 1629 | ||
1627 | int perf_evlist__strerror_open(struct perf_evlist *evlist __maybe_unused, | 1630 | int perf_evlist__strerror_open(struct perf_evlist *evlist, |
1628 | int err, char *buf, size_t size) | 1631 | int err, char *buf, size_t size) |
1629 | { | 1632 | { |
1630 | int printed, value; | 1633 | int printed, value; |
@@ -1652,7 +1655,25 @@ int perf_evlist__strerror_open(struct perf_evlist *evlist __maybe_unused, | |||
1652 | "Hint:\tTry: 'sudo sh -c \"echo -1 > /proc/sys/kernel/perf_event_paranoid\"'\n" | 1655 | "Hint:\tTry: 'sudo sh -c \"echo -1 > /proc/sys/kernel/perf_event_paranoid\"'\n" |
1653 | "Hint:\tThe current value is %d.", value); | 1656 | "Hint:\tThe current value is %d.", value); |
1654 | break; | 1657 | break; |
1658 | case EINVAL: { | ||
1659 | struct perf_evsel *first = perf_evlist__first(evlist); | ||
1660 | int max_freq; | ||
1661 | |||
1662 | if (sysctl__read_int("kernel/perf_event_max_sample_rate", &max_freq) < 0) | ||
1663 | goto out_default; | ||
1664 | |||
1665 | if (first->attr.sample_freq < (u64)max_freq) | ||
1666 | goto out_default; | ||
1667 | |||
1668 | printed = scnprintf(buf, size, | ||
1669 | "Error:\t%s.\n" | ||
1670 | "Hint:\tCheck /proc/sys/kernel/perf_event_max_sample_rate.\n" | ||
1671 | "Hint:\tThe current value is %d and %" PRIu64 " is being requested.", | ||
1672 | emsg, max_freq, first->attr.sample_freq); | ||
1673 | break; | ||
1674 | } | ||
1655 | default: | 1675 | default: |
1676 | out_default: | ||
1656 | scnprintf(buf, size, "%s", emsg); | 1677 | scnprintf(buf, size, "%s", emsg); |
1657 | break; | 1678 | break; |
1658 | } | 1679 | } |
@@ -1723,3 +1744,19 @@ void perf_evlist__set_tracking_event(struct perf_evlist *evlist, | |||
1723 | 1744 | ||
1724 | tracking_evsel->tracking = true; | 1745 | tracking_evsel->tracking = true; |
1725 | } | 1746 | } |
1747 | |||
1748 | struct perf_evsel * | ||
1749 | perf_evlist__find_evsel_by_str(struct perf_evlist *evlist, | ||
1750 | const char *str) | ||
1751 | { | ||
1752 | struct perf_evsel *evsel; | ||
1753 | |||
1754 | evlist__for_each(evlist, evsel) { | ||
1755 | if (!evsel->name) | ||
1756 | continue; | ||
1757 | if (strcmp(str, evsel->name) == 0) | ||
1758 | return evsel; | ||
1759 | } | ||
1760 | |||
1761 | return NULL; | ||
1762 | } | ||