mirror of
https://github.com/torvalds/linux.git
synced 2024-11-12 23:23:03 +00:00
perf timechart: Make large arrays dynamic
Allocate start time and state arrays when command starts rather than using 114,688 bytes in .bss. Signed-off-by: Ian Rogers <irogers@google.com> Link: https://lore.kernel.org/r/20230526183401.2326121-11-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:
parent
eef4fee5e5
commit
ddc27bb8a9
@ -315,10 +315,10 @@ static void pid_put_sample(struct timechart *tchart, int pid, int type,
|
||||
|
||||
#define MAX_CPUS 4096
|
||||
|
||||
static u64 cpus_cstate_start_times[MAX_CPUS];
|
||||
static int cpus_cstate_state[MAX_CPUS];
|
||||
static u64 cpus_pstate_start_times[MAX_CPUS];
|
||||
static u64 cpus_pstate_state[MAX_CPUS];
|
||||
static u64 *cpus_cstate_start_times;
|
||||
static int *cpus_cstate_state;
|
||||
static u64 *cpus_pstate_start_times;
|
||||
static u64 *cpus_pstate_state;
|
||||
|
||||
static int process_comm_event(struct perf_tool *tool,
|
||||
union perf_event *event,
|
||||
@ -1981,12 +1981,34 @@ int cmd_timechart(int argc, const char **argv)
|
||||
"perf timechart record [<options>]",
|
||||
NULL
|
||||
};
|
||||
int ret;
|
||||
|
||||
cpus_cstate_start_times = calloc(MAX_CPUS, sizeof(*cpus_cstate_start_times));
|
||||
if (!cpus_cstate_start_times)
|
||||
return -ENOMEM;
|
||||
cpus_cstate_state = calloc(MAX_CPUS, sizeof(*cpus_cstate_state));
|
||||
if (!cpus_cstate_state) {
|
||||
ret = -ENOMEM;
|
||||
goto out;
|
||||
}
|
||||
cpus_pstate_start_times = calloc(MAX_CPUS, sizeof(*cpus_pstate_start_times));
|
||||
if (!cpus_pstate_start_times) {
|
||||
ret = -ENOMEM;
|
||||
goto out;
|
||||
}
|
||||
cpus_pstate_state = calloc(MAX_CPUS, sizeof(*cpus_pstate_state));
|
||||
if (!cpus_pstate_state) {
|
||||
ret = -ENOMEM;
|
||||
goto out;
|
||||
}
|
||||
|
||||
argc = parse_options_subcommand(argc, argv, timechart_options, timechart_subcommands,
|
||||
timechart_usage, PARSE_OPT_STOP_AT_NON_OPTION);
|
||||
|
||||
if (tchart.power_only && tchart.tasks_only) {
|
||||
pr_err("-P and -T options cannot be used at the same time.\n");
|
||||
return -1;
|
||||
ret = -1;
|
||||
goto out;
|
||||
}
|
||||
|
||||
if (argc && strlen(argv[0]) > 2 && strstarts("record", argv[0])) {
|
||||
@ -1996,17 +2018,25 @@ int cmd_timechart(int argc, const char **argv)
|
||||
|
||||
if (tchart.power_only && tchart.tasks_only) {
|
||||
pr_err("-P and -T options cannot be used at the same time.\n");
|
||||
return -1;
|
||||
ret = -1;
|
||||
goto out;
|
||||
}
|
||||
|
||||
if (tchart.io_only)
|
||||
return timechart__io_record(argc, argv);
|
||||
ret = timechart__io_record(argc, argv);
|
||||
else
|
||||
return timechart__record(&tchart, argc, argv);
|
||||
ret = timechart__record(&tchart, argc, argv);
|
||||
goto out;
|
||||
} else if (argc)
|
||||
usage_with_options(timechart_usage, timechart_options);
|
||||
|
||||
setup_pager();
|
||||
|
||||
return __cmd_timechart(&tchart, output_name);
|
||||
ret = __cmd_timechart(&tchart, output_name);
|
||||
out:
|
||||
zfree(&cpus_cstate_start_times);
|
||||
zfree(&cpus_cstate_state);
|
||||
zfree(&cpus_pstate_start_times);
|
||||
zfree(&cpus_pstate_state);
|
||||
return ret;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user