perf addr_location: Add init/exit/copy functions
struct addr_location holds references to multiple reference counted objects. Add init/exit functions to make maintenance of those more consistent with the rest of the code and to try to avoid leaks. Modification of thread reference counts isn't included in this change. Committer notes: I needed to initialize result to sample->ip to make sure is set to something, fixing a compile time error, mostly keeping the previous logic as build_alloc_func_list() already does debugging/error prints about what went wrong if it takes the 'goto out'. Signed-off-by: Ian Rogers <irogers@google.com> Cc: Adrian Hunter <adrian.hunter@intel.com> Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com> Cc: Ali Saidi <alisaidi@amazon.com> Cc: Andi Kleen <ak@linux.intel.com> Cc: Athira Rajeev <atrajeev@linux.vnet.ibm.com> Cc: Brian Robbins <brianrob@linux.microsoft.com> Cc: Changbin Du <changbin.du@huawei.com> Cc: Dmitrii Dolgov <9erthalion6@gmail.com> Cc: Fangrui Song <maskray@google.com> Cc: German Gomez <german.gomez@arm.com> Cc: Ingo Molnar <mingo@redhat.com> Cc: Ivan Babrou <ivan@cloudflare.com> Cc: James Clark <james.clark@arm.com> Cc: Jing Zhang <renyu.zj@linux.alibaba.com> Cc: Jiri Olsa <jolsa@kernel.org> Cc: John Garry <john.g.garry@oracle.com> Cc: K Prateek Nayak <kprateek.nayak@amd.com> Cc: Kan Liang <kan.liang@linux.intel.com> Cc: Leo Yan <leo.yan@linaro.org> Cc: Liam Howlett <liam.howlett@oracle.com> Cc: Mark Rutland <mark.rutland@arm.com> Cc: Miguel Ojeda <ojeda@kernel.org> Cc: Mike Leach <mike.leach@linaro.org> Cc: Namhyung Kim <namhyung@kernel.org> Cc: Naveen N. Rao <naveen.n.rao@linux.vnet.ibm.com> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Ravi Bangoria <ravi.bangoria@amd.com> Cc: Sean Christopherson <seanjc@google.com> Cc: Steinar H. Gunderson <sesse@google.com> Cc: Suzuki Poulouse <suzuki.poulose@arm.com> Cc: Wenyu Liu <liuwenyu7@huawei.com> Cc: Will Deacon <will@kernel.org> Cc: Yang Jihong <yangjihong1@huawei.com> Cc: Ye Xingchen <ye.xingchen@zte.com.cn> Cc: Yuan Can <yuancan@huawei.com> Cc: coresight@lists.linaro.org Cc: linux-arm-kernel@lists.infradead.org Link: https://lore.kernel.org/r/20230608232823.4027869-7-irogers@google.com Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:
committed by
Arnaldo Carvalho de Melo
parent
620be847f4
commit
0dd5041c9a
@@ -154,12 +154,14 @@ static int process_sample_event(struct perf_tool *tool,
|
||||
{
|
||||
struct convert_json *c = container_of(tool, struct convert_json, tool);
|
||||
FILE *out = c->out;
|
||||
struct addr_location al, tal;
|
||||
struct addr_location al;
|
||||
u64 sample_type = __evlist__combined_sample_type(evsel->evlist);
|
||||
u8 cpumode = PERF_RECORD_MISC_USER;
|
||||
|
||||
addr_location__init(&al);
|
||||
if (machine__resolve(machine, &al, sample) < 0) {
|
||||
pr_err("Sample resolution failed!\n");
|
||||
addr_location__exit(&al);
|
||||
return -1;
|
||||
}
|
||||
|
||||
@@ -190,6 +192,7 @@ static int process_sample_event(struct perf_tool *tool,
|
||||
|
||||
for (i = 0; i < sample->callchain->nr; ++i) {
|
||||
u64 ip = sample->callchain->ips[i];
|
||||
struct addr_location tal;
|
||||
|
||||
if (ip >= PERF_CONTEXT_MAX) {
|
||||
switch (ip) {
|
||||
@@ -215,8 +218,10 @@ static int process_sample_event(struct perf_tool *tool,
|
||||
else
|
||||
fputc(',', out);
|
||||
|
||||
addr_location__init(&tal);
|
||||
ok = thread__find_symbol(al.thread, cpumode, ip, &tal);
|
||||
output_sample_callchain_entry(tool, ip, ok ? &tal : NULL);
|
||||
addr_location__exit(&tal);
|
||||
}
|
||||
} else {
|
||||
output_sample_callchain_entry(tool, sample->ip, &al);
|
||||
@@ -245,6 +250,7 @@ static int process_sample_event(struct perf_tool *tool,
|
||||
}
|
||||
#endif
|
||||
output_json_format(out, false, 2, "}");
|
||||
addr_location__exit(&al);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user