mirror of
https://github.com/Fishwaldo/linux-bl808.git
synced 2025-06-17 20:25:19 +00:00
perf mem: Introduce weak function perf_mem_events__ptr()
Different architectures might use different event or different event parameters for memory profiling, this patch introduces a weak perf_mem_events__ptr() function which allows to return back a architecture specific memory event. Since the variable 'perf_mem_events' can be only accessed by the perf_mem_events__ptr() function, mark the variable as 'static', this allows the architectures to define its own memory event array. Signed-off-by: Leo Yan <leo.yan@linaro.org> Acked-by: Jiri Olsa <jolsa@redhat.com> Link: https://lore.kernel.org/r/20201106094853.21082-3-leo.yan@linaro.org Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:
parent
f9f16dfbe7
commit
eaf6aaeec5
4 changed files with 46 additions and 21 deletions
|
@ -64,6 +64,7 @@ static int __cmd_record(int argc, const char **argv, struct perf_mem *mem)
|
|||
const char **rec_argv;
|
||||
int ret;
|
||||
bool all_user = false, all_kernel = false;
|
||||
struct perf_mem_event *e;
|
||||
struct option options[] = {
|
||||
OPT_CALLBACK('e', "event", &mem, "event",
|
||||
"event selector. use 'perf mem record -e list' to list available events",
|
||||
|
@ -86,13 +87,18 @@ static int __cmd_record(int argc, const char **argv, struct perf_mem *mem)
|
|||
|
||||
rec_argv[i++] = "record";
|
||||
|
||||
if (mem->operation & MEM_OPERATION_LOAD)
|
||||
perf_mem_events[PERF_MEM_EVENTS__LOAD].record = true;
|
||||
if (mem->operation & MEM_OPERATION_LOAD) {
|
||||
e = perf_mem_events__ptr(PERF_MEM_EVENTS__LOAD);
|
||||
e->record = true;
|
||||
}
|
||||
|
||||
if (mem->operation & MEM_OPERATION_STORE)
|
||||
perf_mem_events[PERF_MEM_EVENTS__STORE].record = true;
|
||||
if (mem->operation & MEM_OPERATION_STORE) {
|
||||
e = perf_mem_events__ptr(PERF_MEM_EVENTS__STORE);
|
||||
e->record = true;
|
||||
}
|
||||
|
||||
if (perf_mem_events[PERF_MEM_EVENTS__LOAD].record)
|
||||
e = perf_mem_events__ptr(PERF_MEM_EVENTS__LOAD);
|
||||
if (e->record)
|
||||
rec_argv[i++] = "-W";
|
||||
|
||||
rec_argv[i++] = "-d";
|
||||
|
@ -101,10 +107,11 @@ static int __cmd_record(int argc, const char **argv, struct perf_mem *mem)
|
|||
rec_argv[i++] = "--phys-data";
|
||||
|
||||
for (j = 0; j < PERF_MEM_EVENTS__MAX; j++) {
|
||||
if (!perf_mem_events[j].record)
|
||||
e = perf_mem_events__ptr(j);
|
||||
if (!e->record)
|
||||
continue;
|
||||
|
||||
if (!perf_mem_events[j].supported) {
|
||||
if (!e->supported) {
|
||||
pr_err("failed: event '%s' not supported\n",
|
||||
perf_mem_events__name(j));
|
||||
free(rec_argv);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue