perf daemon: Dynamically allocate path to perf
Avoid a PATH_MAX array in __daemon (the .data section) by dynamically allocating the memory. Signed-off-by: Ian Rogers <irogers@google.com> Link: https://lore.kernel.org/r/20230526183401.2326121-9-irogers@google.com Cc: K Prateek Nayak <kprateek.nayak@amd.com> Cc: Ravi Bangoria <ravi.bangoria@amd.com> Cc: Mark Rutland <mark.rutland@arm.com> Cc: Ross Zwisler <zwisler@chromium.org> Cc: Steven Rostedt (Google) <rostedt@goodmis.org> Cc: Sean Christopherson <seanjc@google.com> Cc: Yang Jihong <yangjihong1@huawei.com> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Adrian Hunter <adrian.hunter@intel.com> Cc: Arnaldo Carvalho de Melo <acme@kernel.org> Cc: Jiri Olsa <jolsa@kernel.org> Cc: Masami Hiramatsu (Google) <mhiramat@kernel.org> Cc: Namhyung Kim <namhyung@kernel.org> Cc: Leo Yan <leo.yan@linaro.org> Cc: Andi Kleen <ak@linux.intel.com> Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com> Cc: Kan Liang <kan.liang@linux.intel.com> Cc: Tiezhu Yang <yangtiezhu@loongson.cn> Cc: Ingo Molnar <mingo@redhat.com> Cc: Paolo Bonzini <pbonzini@redhat.com> Cc: linux-kernel@vger.kernel.org Cc: linux-perf-users@vger.kernel.org Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:
Родитель
20dcad8f03
Коммит
92294b906e
|
@ -90,7 +90,7 @@ struct daemon {
|
||||||
char *base;
|
char *base;
|
||||||
struct list_head sessions;
|
struct list_head sessions;
|
||||||
FILE *out;
|
FILE *out;
|
||||||
char perf[PATH_MAX];
|
char *perf;
|
||||||
int signal_fd;
|
int signal_fd;
|
||||||
time_t start;
|
time_t start;
|
||||||
};
|
};
|
||||||
|
@ -1490,6 +1490,14 @@ static int __cmd_ping(struct daemon *daemon, struct option parent_options[],
|
||||||
return send_cmd(daemon, &cmd);
|
return send_cmd(daemon, &cmd);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static char *alloc_perf_exe_path(void)
|
||||||
|
{
|
||||||
|
char path[PATH_MAX];
|
||||||
|
|
||||||
|
perf_exe(path, sizeof(path));
|
||||||
|
return strdup(path);
|
||||||
|
}
|
||||||
|
|
||||||
int cmd_daemon(int argc, const char **argv)
|
int cmd_daemon(int argc, const char **argv)
|
||||||
{
|
{
|
||||||
struct option daemon_options[] = {
|
struct option daemon_options[] = {
|
||||||
|
@ -1502,8 +1510,12 @@ int cmd_daemon(int argc, const char **argv)
|
||||||
"field separator", "print counts with custom separator", ","),
|
"field separator", "print counts with custom separator", ","),
|
||||||
OPT_END()
|
OPT_END()
|
||||||
};
|
};
|
||||||
|
int ret = -1;
|
||||||
|
|
||||||
|
__daemon.perf = alloc_perf_exe_path();
|
||||||
|
if (!__daemon.perf)
|
||||||
|
return -ENOMEM;
|
||||||
|
|
||||||
perf_exe(__daemon.perf, sizeof(__daemon.perf));
|
|
||||||
__daemon.out = stdout;
|
__daemon.out = stdout;
|
||||||
|
|
||||||
argc = parse_options(argc, argv, daemon_options, daemon_usage,
|
argc = parse_options(argc, argv, daemon_options, daemon_usage,
|
||||||
|
@ -1511,22 +1523,22 @@ int cmd_daemon(int argc, const char **argv)
|
||||||
|
|
||||||
if (argc) {
|
if (argc) {
|
||||||
if (!strcmp(argv[0], "start"))
|
if (!strcmp(argv[0], "start"))
|
||||||
return __cmd_start(&__daemon, daemon_options, argc, argv);
|
ret = __cmd_start(&__daemon, daemon_options, argc, argv);
|
||||||
if (!strcmp(argv[0], "signal"))
|
if (!strcmp(argv[0], "signal"))
|
||||||
return __cmd_signal(&__daemon, daemon_options, argc, argv);
|
ret = __cmd_signal(&__daemon, daemon_options, argc, argv);
|
||||||
else if (!strcmp(argv[0], "stop"))
|
else if (!strcmp(argv[0], "stop"))
|
||||||
return __cmd_stop(&__daemon, daemon_options, argc, argv);
|
ret = __cmd_stop(&__daemon, daemon_options, argc, argv);
|
||||||
else if (!strcmp(argv[0], "ping"))
|
else if (!strcmp(argv[0], "ping"))
|
||||||
return __cmd_ping(&__daemon, daemon_options, argc, argv);
|
ret = __cmd_ping(&__daemon, daemon_options, argc, argv);
|
||||||
|
else
|
||||||
pr_err("failed: unknown command '%s'\n", argv[0]);
|
pr_err("failed: unknown command '%s'\n", argv[0]);
|
||||||
return -1;
|
} else {
|
||||||
}
|
ret = setup_config(&__daemon);
|
||||||
|
if (ret)
|
||||||
if (setup_config(&__daemon)) {
|
|
||||||
pr_err("failed: config not found\n");
|
pr_err("failed: config not found\n");
|
||||||
return -1;
|
else
|
||||||
|
ret = send_cmd_list(&__daemon);
|
||||||
}
|
}
|
||||||
|
zfree(&__daemon.perf);
|
||||||
return send_cmd_list(&__daemon);
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
Загрузка…
Ссылка в новой задаче