[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <CAJF2gTRUh6RiMypEm=b=iJruXDWXoqXpXwn1YaUChgyJ0v2gxw@mail.gmail.com>
Date: Wed, 21 Sep 2022 10:30:40 +0800
From: Guo Ren <guoren@...nel.org>
To: Chen Zhongjin <chenzhongjin@...wei.com>
Cc: linux-kernel@...r.kernel.org, linux-riscv@...ts.infradead.org,
linux-perf-users@...r.kernel.org, paul.walmsley@...ive.com,
palmer@...belt.com, aou@...s.berkeley.edu, peterz@...radead.org,
mingo@...hat.com, acme@...nel.org, mark.rutland@....com,
alexander.shishkin@...ux.intel.com, namhyung@...nel.org,
jolsa@...nel.org, nsaenzju@...hat.com, frederic@...nel.org,
changbin.du@...el.com, vincent.chen@...ive.com, ardb@...nel.org,
mhiramat@...nel.org, rostedt@...dmis.org, keescook@...omium.org,
catalin.marinas@....com
Subject: Re: [PATCH -next 0/7] riscv: Improvments for stacktrace
Some modifications are related to the patch series [1] [2], please take a look.
[1] https://lore.kernel.org/linux-riscv/20220918155246.1203293-1-guoren@kernel.org/
[2] https://lore.kernel.org/linux-riscv/20220916103817.9490-1-guoren@kernel.org/
On Tue, Sep 20, 2022 at 11:15 PM Chen Zhongjin <chenzhongjin@...wei.com> wrote:
>
> Currently, the stacktrace with FRAME_POINTER on riscv has some problem:
>
> 1. stacktrace will stop at irq so it can't get the stack frames before
> irq entry.
> 2. stacktrace can't unwind all the real stack frames when there is
> k{ret}probes or ftrace.
>
> These are mainly becase when there is a pt_regs on stack, we can't unwind
> the stack frame as normal function.
>
> Some architectures (e.g. arm64) create a extra stackframe inside pt_regs.
> However this doesn't work for riscv because the ra is not ensured to be
> pushed to stack. As explained in:
> commit f766f77a74f5("riscv/stacktrace: Fix stack output without ra on the stack top")
>
> So, I choosed the method of x86 that, if there is a pt_regs on stack,
> we encoded the frame pointer and save it. When unwinding stack frame,
> we can get pt_regs and registers required for unwinding stacks.
>
> In addition, the patch set contains some refactoring of stacktrace.c to
> keep the stacktrace code on riscv consistent with other architectures.
>
> Chen Zhongjin (7):
> riscv: stacktrace: Replace walk_stackframe with arch_stack_walk
> riscv: stacktrace: Introduce unwind functions
> riscv: stacktrace: Save pt_regs in encoded fp on irq entry
> riscv: syscall: Don't clobber s0 when syscall
> riscv: stacktrace: Implement stacktrace for irq
> riscv: stacktrace: Fix unwinding on ftrace_regs_call
> riscv: stacktrace: Fix unwinding on __kretporbe_trampoline
>
> arch/riscv/include/asm/frame.h | 45 +++++
> arch/riscv/include/asm/stacktrace.h | 13 +-
> arch/riscv/kernel/entry.S | 23 +--
> arch/riscv/kernel/mcount-dyn.S | 8 +
> arch/riscv/kernel/perf_callchain.c | 2 +-
> arch/riscv/kernel/probes/kprobes_trampoline.S | 8 +
> arch/riscv/kernel/stacktrace.c | 155 ++++++++++++------
> 7 files changed, 195 insertions(+), 59 deletions(-)
> create mode 100644 arch/riscv/include/asm/frame.h
>
> --
> 2.17.1
>
--
Best Regards
Guo Ren
Powered by blists - more mailing lists