| From 4624f199327a704dd1069aca1c3cadb8f2a28c6f Mon Sep 17 00:00:00 2001 |
| From: Zechuan Chen <chenzechuan1@huawei.com> |
| Date: Tue, 28 Dec 2021 19:13:38 +0800 |
| Subject: perf probe: Fix ppc64 'perf probe add events failed' case |
| |
| From: Zechuan Chen <chenzechuan1@huawei.com> |
| |
| commit 4624f199327a704dd1069aca1c3cadb8f2a28c6f upstream. |
| |
| Because of commit bf794bf52a80c627 ("powerpc/kprobes: Fix kallsyms |
| lookup across powerpc ABIv1 and ABIv2"), in ppc64 ABIv1, our perf |
| command eliminates the need to use the prefix "." at the symbol name. |
| |
| But when the command "perf probe -a schedule" is executed on ppc64 |
| ABIv1, it obtains two symbol address information through /proc/kallsyms, |
| for example: |
| |
| cat /proc/kallsyms | grep -w schedule |
| c000000000657020 T .schedule |
| c000000000d4fdb8 D schedule |
| |
| The symbol "D schedule" is not a function symbol, and perf will print: |
| "p:probe/schedule _text+13958584"Failed to write event: Invalid argument |
| |
| Therefore, when searching symbols from map and adding probe point for |
| them, a symbol type check is added. If the type of symbol is not a |
| function, skip it. |
| |
| Fixes: bf794bf52a80c627 ("powerpc/kprobes: Fix kallsyms lookup across powerpc ABIv1 and ABIv2") |
| Signed-off-by: Zechuan Chen <chenzechuan1@huawei.com> |
| Acked-by: Masami Hiramatsu <mhiramat@kernel.org> |
| Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com> |
| Cc: Ingo Molnar <mingo@redhat.com> |
| Cc: Jianlin Lv <Jianlin.Lv@arm.com> |
| Cc: Jin Yao <yao.jin@linux.intel.com> |
| Cc: Jiri Olsa <jolsa@redhat.com> |
| Cc: Mark Rutland <mark.rutland@arm.com> |
| Cc: Michael Ellerman <mpe@ellerman.id.au> |
| 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@linux.ibm.com> |
| Cc: Yang Jihong <yangjihong1@huawei.com> |
| Link: https://lore.kernel.org/r/20211228111338.218602-1-chenzechuan1@huawei.com |
| Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com> |
| [sudip: adjust context] |
| Signed-off-by: Sudip Mukherjee <sudipm.mukherjee@gmail.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| tools/perf/util/probe-event.c | 3 +++ |
| 1 file changed, 3 insertions(+) |
| |
| --- a/tools/perf/util/probe-event.c |
| +++ b/tools/perf/util/probe-event.c |
| @@ -2954,6 +2954,9 @@ static int find_probe_trace_events_from_ |
| for (j = 0; j < num_matched_functions; j++) { |
| sym = syms[j]; |
| |
| + if (sym->type != STT_FUNC) |
| + continue; |
| + |
| tev = (*tevs) + ret; |
| tp = &tev->point; |
| if (ret == num_matched_functions) { |