Message ID | 20210223082535.48730-2-zhe.he@windriver.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | [1/2] arm64: uprobe: Return EOPNOTSUPP for AARCH32 instruction probing | expand |
Oops, add some supporters from get_maintainer.pl Zhe On 2/23/21 4:25 PM, He Zhe wrote: > There may be multiple reasons for EOPNOTSUPP. Sometimes we cannot determine > which one it is. > > For example, when we set up uprobe with 32-bit perf and arm64 kernel on > some hardware that does not support sampling/overflow-interrupts, > $ perf probe -x /lib/libc.so.6 malloc > $ perf record -e probe_libc:malloc -a ls > > Before this patch: > probe_libc:malloc: PMU Hardware doesn't support sampling/overflow-interrupts. Try 'perf stat' > > After this patch: > probe_libc:malloc: PMU Hardware may not support sampling/overflow-interrupts. Try 'perf stat'. > Some 64-bit architectures may not support 32-bit instruction probing. > > Signed-off-by: He Zhe <zhe.he@windriver.com> > --- > tools/perf/util/evsel.c | 18 ++++++++++-------- > 1 file changed, 10 insertions(+), 8 deletions(-) > > diff --git a/tools/perf/util/evsel.c b/tools/perf/util/evsel.c > index 1bf76864c4f2..aa56511ddf60 100644 > --- a/tools/perf/util/evsel.c > +++ b/tools/perf/util/evsel.c > @@ -2697,22 +2697,24 @@ int evsel__open_strerror(struct evsel *evsel, struct target *target, > break; > case EOPNOTSUPP: > if (evsel->core.attr.aux_output) > - return scnprintf(msg, size, > - "%s: PMU Hardware doesn't support 'aux_output' feature", > + printed += scnprintf(msg + printed, size, > + "%s: PMU Hardware may not support 'aux_output' feature.\n", > evsel__name(evsel)); > if (evsel->core.attr.sample_period != 0) > - return scnprintf(msg, size, > - "%s: PMU Hardware doesn't support sampling/overflow-interrupts. Try 'perf stat'", > + printed += scnprintf(msg + printed, size, > + "%s: PMU Hardware doesn't support sampling/overflow-interrupts. Try 'perf stat'.\n", > evsel__name(evsel)); > if (evsel->core.attr.precise_ip) > - return scnprintf(msg, size, "%s", > - "\'precise\' request may not be supported. Try removing 'p' modifier."); > + printed += scnprintf(msg + printed, size, "%s", > + "\'precise\' request may not be supported. Try removing 'p' modifier.\n"); > #if defined(__i386__) || defined(__x86_64__) > if (evsel->core.attr.type == PERF_TYPE_HARDWARE) > - return scnprintf(msg, size, "%s", > + printed += scnprintf(msg + printed, size, "%s", > "No hardware sampling interrupt available.\n"); > #endif > - break; > + scnprintf(msg + printed, size, "%s", > + "Some 64-bit architectures may not support 32-bit instruction uprobe.\n"); > + return; > case EBUSY: > if (find_process("oprofiled")) > return scnprintf(msg, size,
diff --git a/tools/perf/util/evsel.c b/tools/perf/util/evsel.c index 1bf76864c4f2..aa56511ddf60 100644 --- a/tools/perf/util/evsel.c +++ b/tools/perf/util/evsel.c @@ -2697,22 +2697,24 @@ int evsel__open_strerror(struct evsel *evsel, struct target *target, break; case EOPNOTSUPP: if (evsel->core.attr.aux_output) - return scnprintf(msg, size, - "%s: PMU Hardware doesn't support 'aux_output' feature", + printed += scnprintf(msg + printed, size, + "%s: PMU Hardware may not support 'aux_output' feature.\n", evsel__name(evsel)); if (evsel->core.attr.sample_period != 0) - return scnprintf(msg, size, - "%s: PMU Hardware doesn't support sampling/overflow-interrupts. Try 'perf stat'", + printed += scnprintf(msg + printed, size, + "%s: PMU Hardware doesn't support sampling/overflow-interrupts. Try 'perf stat'.\n", evsel__name(evsel)); if (evsel->core.attr.precise_ip) - return scnprintf(msg, size, "%s", - "\'precise\' request may not be supported. Try removing 'p' modifier."); + printed += scnprintf(msg + printed, size, "%s", + "\'precise\' request may not be supported. Try removing 'p' modifier.\n"); #if defined(__i386__) || defined(__x86_64__) if (evsel->core.attr.type == PERF_TYPE_HARDWARE) - return scnprintf(msg, size, "%s", + printed += scnprintf(msg + printed, size, "%s", "No hardware sampling interrupt available.\n"); #endif - break; + scnprintf(msg + printed, size, "%s", + "Some 64-bit architectures may not support 32-bit instruction uprobe.\n"); + return; case EBUSY: if (find_process("oprofiled")) return scnprintf(msg, size,
There may be multiple reasons for EOPNOTSUPP. Sometimes we cannot determine which one it is. For example, when we set up uprobe with 32-bit perf and arm64 kernel on some hardware that does not support sampling/overflow-interrupts, $ perf probe -x /lib/libc.so.6 malloc $ perf record -e probe_libc:malloc -a ls Before this patch: probe_libc:malloc: PMU Hardware doesn't support sampling/overflow-interrupts. Try 'perf stat' After this patch: probe_libc:malloc: PMU Hardware may not support sampling/overflow-interrupts. Try 'perf stat'. Some 64-bit architectures may not support 32-bit instruction probing. Signed-off-by: He Zhe <zhe.he@windriver.com> --- tools/perf/util/evsel.c | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-)