Em Sun, Jan 31, 2021 at 12:48:34AM +0100, Jiri Olsa escreveu: > Adding config option and base functionality that takes the option > argument (if specified) and other system config locations and > produces 'acting' config file path. > > The actual config file processing is coming in following patches. > > Signed-off-by: Jiri Olsa <jo...@kernel.org> > --- > tools/perf/builtin-daemon.c | 49 +++++++++++++++++++++++++++++++++++++ > 1 file changed, 49 insertions(+)
Missing update to tools/perf/Documentation/perf-daemon.txt for --config > diff --git a/tools/perf/builtin-daemon.c b/tools/perf/builtin-daemon.c > index 8b13e455ac40..1f2393faad75 100644 > --- a/tools/perf/builtin-daemon.c > +++ b/tools/perf/builtin-daemon.c > @@ -3,14 +3,18 @@ > #include <linux/limits.h> > #include <string.h> > #include <signal.h> > +#include <stdlib.h> > #include <stdio.h> > #include <unistd.h> > #include "builtin.h" > #include "perf.h" > #include "debug.h" > +#include "config.h" > #include "util.h" > > struct daemon { > + const char *config; > + char *config_real; > char *base; > FILE *out; > char perf[PATH_MAX]; > @@ -31,6 +35,37 @@ static void sig_handler(int sig __maybe_unused) > done = true; > } > > +static void daemon__free(struct daemon *daemon) > +{ > + free(daemon->config_real); > +} > + > +static void daemon__exit(struct daemon *daemon) > +{ > + daemon__free(daemon); > +} > + > +static int setup_config(struct daemon *daemon) > +{ > + if (daemon->config) { > + char *real = realpath(daemon->config, NULL); > + > + if (!real) { > + perror("failed: realpath"); > + return -1; > + } > + daemon->config_real = real; > + return 0; > + } > + > + if (perf_config_system() && !access(perf_etc_perfconfig(), R_OK)) > + daemon->config_real = strdup(perf_etc_perfconfig()); > + else if (perf_config_global() && perf_home_perfconfig()) > + daemon->config_real = strdup(perf_home_perfconfig()); > + > + return daemon->config_real ? 0 : -1; > +} > + > static int __cmd_start(struct daemon *daemon, struct option parent_options[], > int argc, const char **argv) > { > @@ -44,6 +79,11 @@ static int __cmd_start(struct daemon *daemon, struct > option parent_options[], > if (argc) > usage_with_options(daemon_usage, start_options); > > + if (setup_config(daemon)) { > + pr_err("failed: config not found\n"); > + return -1; > + } > + > debug_set_file(daemon->out); > debug_set_display_time(true); > > @@ -56,6 +96,8 @@ static int __cmd_start(struct daemon *daemon, struct option > parent_options[], > sleep(1); > } > > + daemon__exit(daemon); > + > pr_info("daemon exited\n"); > fclose(daemon->out); > return err; > @@ -65,6 +107,8 @@ int cmd_daemon(int argc, const char **argv) > { > struct option daemon_options[] = { > OPT_INCR('v', "verbose", &verbose, "be more verbose"), > + OPT_STRING(0, "config", &__daemon.config, > + "config file", "config file path"), > OPT_END() > }; > > @@ -82,5 +126,10 @@ int cmd_daemon(int argc, const char **argv) > return -1; > } > > + if (setup_config(&__daemon)) { > + pr_err("failed: config not found\n"); > + return -1; > + } > + > return -1; > } > -- > 2.29.2 > -- - Arnaldo