Received: by 2002:a25:8b12:0:0:0:0:0 with SMTP id i18csp5107999ybl; Mon, 26 Aug 2019 22:51:57 -0700 (PDT) X-Google-Smtp-Source: APXvYqz33tBGGG6Hmt0ENpS9gbpCcgsw296tl3FitTyI9fbw/zZYVys45rBTWq5ozwOxnmfLyfTP X-Received: by 2002:aa7:9533:: with SMTP id c19mr15030392pfp.153.1566885117253; Mon, 26 Aug 2019 22:51:57 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1566885117; cv=none; d=google.com; s=arc-20160816; b=C0d6O25vum7vCYGQ5ALWHieXTtvLJ3b3U7w0mBpXQAK812GR4IIylILJjH6lsr/Edu 1BkxlHaQN3nuE0WpOsAYpuhkCVJNY974QkjhqLfh9SmTHeUs1mLdXHXF43ygB2bAHBWH PX+6QYisCgY0K+kpWIZUHEeSCXbWqME+MmolaRnsodKNmvBFSrkVejH2ED6JLMle6v0p +tRQh8ux/pvsw2Kb8ZEh678RCQkfdWHCjEW+zZ/+CDkKzlVfMGjLCH6TLqQpxFx3FhOM WZjs3AC25SLnhpi4mSh16DPsmPuCtuXn64QWToA3RNFdYGvQEtMgzZD71ctxl8ZdylOI 7j2Q== 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=/TGD1b44vwx+9D78N80FdKV0DbcL0pGh6Ig0KxFTIvc=; b=P4FTppYgsrRpzKY79IbD5P6W/1oFyRRWKbdqbbs+bUgbqwMO0CkoeBxwSd/H7fcSZG qLKHJRgHw2fBNrfXzEriR24CBbH8I14cDmvN5WRXngMWLv4ig0DYtBxvRYvj0fLMo4ca xXwjzEhfHa1w2j7qXyHsJ4bLi8vHIJO518jkXqmhj1NcY7d/shhty29OkMOee2y4C3jS 3is2OWu6NGRBcT35KHHfO1QBcwxlh8BKd620SpIBDiEd42JPqDHpWv3+GMGbKQCiiHPZ QcZKrBqKQ+6GBe3t1U4t4HaQbCgvTk78mF7ZftRID3YQB4zpyWWrJ1DznC6CmxgS/rPP gfsQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=lL8wC7E1; 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=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id z30si10993492pga.346.2019.08.26.22.51.41; Mon, 26 Aug 2019 22:51:57 -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=@kernel.org header.s=default header.b=lL8wC7E1; 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=NONE dis=NONE) header.from=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728621AbfH0Fur (ORCPT + 99 others); Tue, 27 Aug 2019 01:50:47 -0400 Received: from mail.kernel.org ([198.145.29.99]:56606 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725850AbfH0Fur (ORCPT ); Tue, 27 Aug 2019 01:50:47 -0400 Received: from mail-wm1-f47.google.com (mail-wm1-f47.google.com [209.85.128.47]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 6119621881; Tue, 27 Aug 2019 05:50:45 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1566885045; bh=lEHBj/Cp6miT8ilouSQBQV+Drh2QP6H67UOzw91mqwo=; h=References:In-Reply-To:From:Date:Subject:To:Cc:From; b=lL8wC7E1B7MGgDe++xI9cadBfd32jJKBaY969kCdvyVvo4kOUnAo+489m5uhoHWS+ g2Bp0V+3nK8HAd/6qJDWmb3epzCBcDzO5XgZNwKdQYThPAfLwNa7BiDqs0avy6i1tw DPgY+OZ07gG6wANcZ/TSrJ+YNi+sq/QM28/dd5JA= Received: by mail-wm1-f47.google.com with SMTP id m125so1612422wmm.3; Mon, 26 Aug 2019 22:50:45 -0700 (PDT) X-Gm-Message-State: APjAAAWZeqhBk0pfSrDC/YYfdgqW+FpbgKnEQ+FxP806yjROmdBWZPFH a0Ju2GXknvjMxqWGkmM6CAdMyx97vkfdh5FpAWY= X-Received: by 2002:a1c:1f4e:: with SMTP id f75mr25187337wmf.137.1566885043803; Mon, 26 Aug 2019 22:50:43 -0700 (PDT) MIME-Version: 1.0 References: <820d80272fc5627b8d00e684663a614470217606.1566540652.git.han_mao@c-sky.com> In-Reply-To: From: Guo Ren Date: Tue, 27 Aug 2019 13:50:32 +0800 X-Gmail-Original-Message-ID: Message-ID: Subject: Re: [PATCH V5 1/3] riscv: Add perf callchain support To: Greentime Hu Cc: greentime.hu@sifive.com, 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 We need know the values of *regs, eg: regs->sepc, regs->ra, regs->fp, regs->sp, regs->tp void perf_callchain_kernel(struct perf_callchain_entry_ctx *entry, struct pt_regs *regs) { ... walk_stackframe(&fr, entry); // May be we could detect error here and print the regs' value } On Mon, Aug 26, 2019 at 4:03 PM Greentime Hu wrote: > > 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_stackfram= e > > > > 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 --=20 Best Regards Guo Ren ML: https://lore.kernel.org/linux-csky/