tools/perf/builtin-ftrace.c | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+)
To make error messages more accurate, this change detects whether ftrace is
enabled on system by checking trace file "set_ftrace_pid".
Before:
~ # perf ftrace
failed to reset ftrace
After:
~ # perf ftrace
ftrace is not supported on this system
Signed-off-by: Changbin Du <changbin.du@huawei.com>
v2: rebase on perf-tools-next.
---
tools/perf/builtin-ftrace.c | 23 +++++++++++++++++++++++
1 file changed, 23 insertions(+)
diff --git a/tools/perf/builtin-ftrace.c b/tools/perf/builtin-ftrace.c
index 88a87bf387d2..abcdc49b7a98 100644
--- a/tools/perf/builtin-ftrace.c
+++ b/tools/perf/builtin-ftrace.c
@@ -80,6 +80,24 @@ static bool check_ftrace_capable(void)
return false;
}
+static bool is_ftrace_supported(void)
+{
+ char *file;
+ bool supported = false;
+
+ file = get_tracing_file("set_ftrace_pid");
+ if (!file) {
+ pr_debug("cannot get tracing file set_ftrace_pid\n");
+ return false;
+ }
+
+ if (!access(file, F_OK))
+ supported = true;
+
+ put_tracing_file(file);
+ return supported;
+}
+
static int __write_tracing_file(const char *name, const char *val, bool append)
{
char *file;
@@ -1583,6 +1601,11 @@ int cmd_ftrace(int argc, const char **argv)
if (!check_ftrace_capable())
return -1;
+ if (!is_ftrace_supported()) {
+ pr_err("ftrace is not supported on this system\n");
+ return -ENOTSUP;
+ }
+
ret = perf_config(perf_ftrace_config, &ftrace);
if (ret < 0)
return -1;
--
2.34.1
On 11/09/2024 11:01, Changbin Du wrote: > To make error messages more accurate, this change detects whether ftrace is > enabled on system by checking trace file "set_ftrace_pid". > > Before: > ~ # perf ftrace > failed to reset ftrace > > After: > ~ # perf ftrace > ftrace is not supported on this system > > Signed-off-by: Changbin Du <changbin.du@huawei.com> > > v2: rebase on perf-tools-next. > --- > tools/perf/builtin-ftrace.c | 23 +++++++++++++++++++++++ > 1 file changed, 23 insertions(+) > > diff --git a/tools/perf/builtin-ftrace.c b/tools/perf/builtin-ftrace.c > index 88a87bf387d2..abcdc49b7a98 100644 > --- a/tools/perf/builtin-ftrace.c > +++ b/tools/perf/builtin-ftrace.c > @@ -80,6 +80,24 @@ static bool check_ftrace_capable(void) > return false; > } > > +static bool is_ftrace_supported(void) > +{ > + char *file; > + bool supported = false; > + > + file = get_tracing_file("set_ftrace_pid"); > + if (!file) { > + pr_debug("cannot get tracing file set_ftrace_pid\n"); > + return false; > + } > + > + if (!access(file, F_OK)) > + supported = true; > + > + put_tracing_file(file); > + return supported; > +} > + > static int __write_tracing_file(const char *name, const char *val, bool append) > { > char *file; > @@ -1583,6 +1601,11 @@ int cmd_ftrace(int argc, const char **argv) > if (!check_ftrace_capable()) > return -1; > > + if (!is_ftrace_supported()) { > + pr_err("ftrace is not supported on this system\n"); > + return -ENOTSUP; > + } > + > ret = perf_config(perf_ftrace_config, &ftrace); > if (ret < 0) > return -1; Reviewed-by: James Clark <james.clark@linaro.org>
On Wed, Sep 11, 2024 at 11:15:19AM +0100, James Clark wrote: > On 11/09/2024 11:01, Changbin Du wrote: > > To make error messages more accurate, this change detects whether ftrace is > > enabled on system by checking trace file "set_ftrace_pid". <SNIP> > > @@ -1583,6 +1601,11 @@ int cmd_ftrace(int argc, const char **argv) > > if (!check_ftrace_capable()) > > return -1; > > + if (!is_ftrace_supported()) { > > + pr_err("ftrace is not supported on this system\n"); > > + return -ENOTSUP; > > + } > > + > > ret = perf_config(perf_ftrace_config, &ftrace); > > if (ret < 0) > > return -1; > > Reviewed-by: James Clark <james.clark@linaro.org> Applied and added these comments: Committer testing: Doing it in an unprivileged toolbox container on Fedora 40: Before: acme@number:~/git/perf-tools-next$ toolbox enter perf ⬢[acme@toolbox perf-tools-next]$ sudo su - ⬢[root@toolbox ~]# ~acme/bin/perf ftrace failed to reset ftrace ⬢[root@toolbox ~]# After this patch: ⬢[root@toolbox ~]# ~acme/bin/perf ftrace ftrace is not supported on this system ⬢[root@toolbox ~]# Maybe we could check if we are in such as situation, inside an unprivileged container, and provide a HINT line? Reviewed-by: James Clark <james.clark@linaro.org> Signed-off-by: Changbin Du <changbin.du@huawei.com> Tested-by: Arnaldo Carvalho de Melo <acme@redhat.com>
On Wed, Sep 11, 2024 at 09:31:02AM -0300, Arnaldo Carvalho de Melo wrote: > On Wed, Sep 11, 2024 at 11:15:19AM +0100, James Clark wrote: > > On 11/09/2024 11:01, Changbin Du wrote: > > > To make error messages more accurate, this change detects whether ftrace is > > > enabled on system by checking trace file "set_ftrace_pid". > > <SNIP> > > > > @@ -1583,6 +1601,11 @@ int cmd_ftrace(int argc, const char **argv) > > > if (!check_ftrace_capable()) > > > return -1; > > > + if (!is_ftrace_supported()) { > > > + pr_err("ftrace is not supported on this system\n"); > > > + return -ENOTSUP; > > > + } > > > + > > > ret = perf_config(perf_ftrace_config, &ftrace); > > > if (ret < 0) > > > return -1; > > > > Reviewed-by: James Clark <james.clark@linaro.org> > > Applied and added these comments: > > Committer testing: > > Doing it in an unprivileged toolbox container on Fedora 40: > > Before: > > acme@number:~/git/perf-tools-next$ toolbox enter perf > ⬢[acme@toolbox perf-tools-next]$ sudo su - > ⬢[root@toolbox ~]# ~acme/bin/perf ftrace > failed to reset ftrace > ⬢[root@toolbox ~]# > > After this patch: > > ⬢[root@toolbox ~]# ~acme/bin/perf ftrace > ftrace is not supported on this system > ⬢[root@toolbox ~]# > > Maybe we could check if we are in such as situation, inside an > unprivileged container, and provide a HINT line? > I think we could check the mount status of tracefs first, and then check whether the ftrace node exists. If there's a permission issue in container, maybe we should also check the errno of access(). > Reviewed-by: James Clark <james.clark@linaro.org> > Signed-off-by: Changbin Du <changbin.du@huawei.com> > Tested-by: Arnaldo Carvalho de Melo <acme@redhat.com> -- Cheers, Changbin Du
© 2016 - 2024 Red Hat, Inc.