Received: by 2002:a25:8b12:0:0:0:0:0 with SMTP id i18csp3839503ybl; Mon, 26 Aug 2019 01:06:36 -0700 (PDT) X-Google-Smtp-Source: APXvYqz9IZYuPO1SsG+i5vMcPgCHRRUA5p8ZleDSMo6u55e2f6R4DbEZ65tJssAu5Iaj3oij1hya X-Received: by 2002:aa7:9516:: with SMTP id b22mr18669346pfp.106.1566806796667; Mon, 26 Aug 2019 01:06:36 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1566806796; cv=none; d=google.com; s=arc-20160816; b=WT86svdpvXml8719auvUGw61Si6iplB/3OF9yoj6r1OBR8x4ocohnWvzwxk4+Lv6Vu m+9LAznOBijljM3Gau5/LGzsUl2pdtvoC3uRAuXfHt1EWcN5oXYv5GLGG9L7NwGr9JRl eOpMLg5RLEoZIcK+NHiO+A7Lep45N6c32SrHaXivjk/5m56gFmUImKhWnHd9y4V2vRdD ysY/kzhjPHMoxF/CJvZV9+V3g6WwP0oCig81Z6BhZXrYq6O+D6EngVrCqB5+Fc4w6Svk /wmiRPCRPru7cOaOPyp58EBOqsXxZoGJC7sqzekitU4YYVf7Y15GjS8V22OCQtevIZJK FyDA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:cc:to:subject :message-id:date:from:in-reply-to:references:mime-version :dkim-signature; bh=9WmdFRMJa7sCCIgAvCuC7Y0ayc92RRMOTHf0AFVOsB4=; b=FLxhYoQJDap5XPUHiw6bSV9iqVpgPIY7LyT7Li/OqURwleWdqpMOZFh/JkPHfjuKRR Zvhhv+k7iIX0/P5zblx0oSLxVHtAObvLVm+l3QC2EynR2kJLDZzXNUnAz/MGzC3LPYA7 H19uwGXRsykAt9hFKSa7L4GUVv/OCwvQAdY1H8kFb5jhgmnj6TYvZlN16uTvWt9pdLHB F3tZ7Wwo7p2jy9OcaqcJ0SNgesZS6arAVWS3l9bs9oNUS3CfsdAXvexq/FH8WnLG90bI SulGMxOn7XFNvzg74hzfk9XqrswRvuAVb6kyYNDhBMN6JHL6zH/ancI030aMEdMMGar6 +UFQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=hjLmh1l0; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id o19si8236976pgv.497.2019.08.26.01.06.20; Mon, 26 Aug 2019 01:06:36 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=hjLmh1l0; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1730328AbfHZIDo (ORCPT + 99 others); Mon, 26 Aug 2019 04:03:44 -0400 Received: from mail-qk1-f196.google.com ([209.85.222.196]:37813 "EHLO mail-qk1-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726189AbfHZIDn (ORCPT ); Mon, 26 Aug 2019 04:03:43 -0400 Received: by mail-qk1-f196.google.com with SMTP id s14so13370893qkm.4; Mon, 26 Aug 2019 01:03:42 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc:content-transfer-encoding; bh=9WmdFRMJa7sCCIgAvCuC7Y0ayc92RRMOTHf0AFVOsB4=; b=hjLmh1l0PH6+OCtiZukj8qCTTPxtcbyQLCoRj3PDuhnLg7LMEKoUv25sj+qHt99CA8 /9FAvgY31UpiNH4zmhPFTcLiC1i4mXin976/S46Ls3ct/UINT+pkYhr756uf6b0+mvCT gCYPaoFTk1/+hq9ZN7GzLptaA1C1OqEIVxzNYZhzePyPAdo03jhq5MUrW+lQo7G1y3k2 SFVbYHyzm5Sr+j2xVZeeN6vaTy2Mo/kdtrp72LJmXrukKdlR2CH8dCra+z7EgeFWIoWM BFw6opkCP9fkWadA2dDXgOjsKKIgypPknsMYBC2Yqgdc/cSWYNzGJ5hCDe2WLQy3dyOg qxWA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc:content-transfer-encoding; bh=9WmdFRMJa7sCCIgAvCuC7Y0ayc92RRMOTHf0AFVOsB4=; b=CaJR+5mM4udKKn4mt06O0joNAiBFBSFwgvDRKEpc7iFCTJj20XdcGk5k5CwVMyFQCK HuUMVoPQYx7SB3HHo/hRHvw6mdyK+kR6j4/cylXxw/16TZaSdITktXZ9fyweSeekvdsO lsRGVa1OtuuZOoRjsEKjT5uJe8AMQfZhrhQQPFxyX9W/ZbTlXmW6Oe/b9//7zbYT1qjy rpA/DjT+AzXv6qF3Gi9k/DmMTCf+dTCihKTg7nzigOPqHh+chnABmqvttTMP54oFvkXL 54uAKzP/EeXk1l83kaKmmkqLpBRKLgKt2ToXGYcZcWmDIscHOBj3x63ppKerYVlhPGFX 5tlw== X-Gm-Message-State: APjAAAVLaTiqbPRD+EWLtfB4BtUg1hQNsSeSX6t2JrCATIEWrcEjHnU/ gVfEWNc7ppktYyPclmAIXCcrb7KJC1EJQoRAKvXvLEeXinY= X-Received: by 2002:a05:620a:696:: with SMTP id f22mr15005145qkh.232.1566806622322; Mon, 26 Aug 2019 01:03:42 -0700 (PDT) MIME-Version: 1.0 References: <820d80272fc5627b8d00e684663a614470217606.1566540652.git.han_mao@c-sky.com> In-Reply-To: From: Greentime Hu Date: Mon, 26 Aug 2019 16:03:07 +0800 Message-ID: Subject: Re: [PATCH V5 1/3] riscv: Add perf callchain support To: Guo Ren , greentime.hu@sifive.com Cc: Mao Han , linux-riscv@lists.infradead.org, Linux Kernel Mailing List , linux-arch , Paul Walmsley , Palmer Dabbelt , Christoph Hellwig Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi Guo, Guo Ren =E6=96=BC 2019=E5=B9=B48=E6=9C=8824=E6=97=A5 = =E9=80=B1=E5=85=AD =E4=B8=8A=E5=8D=888:54=E5=AF=AB=E9=81=93=EF=BC=9A > > Please check CONFIG_FRAME_POINTER > > 1 *frame =3D *((struct stackframe *)frame->fp - 1); > This code is origionally from riscv/kernel/stacktrace.c: walk_stackframe > > In linux/Makefile it'll involve the options for gcc to definitely > store ra & prev_fp in fp pointer. > ifdef CONFIG_FRAME_POINTER > KBUILD_CFLAGS +=3D -fno-omit-frame-pointer -fno-optimize-sibling-calls > > So --call-graph fp need depends on CONFIG_FRAME_POINTER. > I am pretty sure CONFIG_FRAME_POINTER is Y # zcat /proc/config.gz |grep CONFIG_FRAME_POINTER CONFIG_FRAME_POINTER=3Dy This is not going to go wrong every time, the probability of error is about one tenth or one quarter. randomly There may be some conditions that we have not considered. I add one more condition to check if it is a valid virtual address and it( ./perf record -e cpu-clock --call-graph fp ls) passes 1000 times without failure in Unleashed board based on 5.3-rc5. Here is my patch. Please have a look at it. I am not sure if it is a good solution. diff --git a/arch/riscv/kernel/perf_callchain.c b/arch/riscv/kernel/perf_callchain.c index d75d15c13dc7..4717942435df 100644 --- a/arch/riscv/kernel/perf_callchain.c +++ b/arch/riscv/kernel/perf_callchain.c @@ -18,6 +18,8 @@ static int unwind_frame_kernel(struct stackframe *frame) return -EPERM; if (frame->fp < CONFIG_PAGE_OFFSET) return -EPERM; + if (!virt_addr_valid(frame->fp)) + return -EPERM; *frame =3D *((struct stackframe *)frame->fp - 1); if (__kernel_text_address(frame->ra)) { It could catch cases called in this way. [ 1381.936586] frame->fp=3D:ffffffff00547550 [ 1382.038542] CPU: 1 PID: 135 Comm: ls Not tainted 5.3.0-rc5-00003-gb008f6bcd67c-dirty #14 [ 1382.307440] Call Trace: [ 1382.388947] [] walk_stackframe+0x0/0x9a [ 1382.568053] [] show_stack+0x2a/0x34 [ 1382.735960] [] dump_stack+0x62/0x7c [ 1382.903863] [] perf_callchain_kernel+0xd8/0x102 [ 1383.106558] [] get_perf_callchain+0x136/0x1f2 [ 1383.303128] [] perf_callchain+0x52/0x6e [ 1383.482553] [] perf_prepare_sample+0x6e/0x476 [ 1383.679357] [] perf_event_output_forward+0x1c/0x50 [ 1383.890633] [] __perf_event_overflow+0x6a/0xa4 [ 1384.090279] [] perf_swevent_hrtimer+0xba/0x106 [ 1384.290094] [] __hrtimer_run_queues+0x84/0x108 [ 1384.489694] [] hrtimer_interrupt+0xca/0x1ce [ 1384.680974] [] riscv_timer_interrupt+0x32/0x3a [ 1384.880449] [] do_IRQ+0x64/0xbe [ 1385.036698] [] ret_from_exception+0x0/0xc [13915.697989] frame->fp=3D:fffffffffffff000 [13915.799937] CPU: 2 PID: 663 Comm: ls Not tainted 5.3.0-rc5-00003-gb008f6bcd67c-dirty #14 [13916.068832] Call Trace: [13916.150380] [] walk_stackframe+0x0/0x9a [13916.329450] [] show_stack+0x2a/0x34 [13916.497360] [] dump_stack+0x62/0x7c [13916.665265] [] perf_callchain_kernel+0xd8/0x102 [13916.867949] [] get_perf_callchain+0x136/0x1f2 [13917.064526] [] perf_callchain+0x52/0x6e [13917.243950] [] perf_prepare_sample+0x6e/0x476 [13917.440759] [] perf_event_output_forward+0x1c/0x50 [13917.652021] [] __perf_event_overflow+0x6a/0xa4 [13917.851683] [] perf_swevent_hrtimer+0xba/0x106 [13918.051494] [] __hrtimer_run_queues+0x84/0x108 [13918.251094] [] hrtimer_interrupt+0xca/0x1ce [13918.442379] [] riscv_timer_interrupt+0x32/0x3a [13918.641840] [] do_IRQ+0x64/0xbe [13918.798082] [] ret_from_exception+0x0/0xc