lkml.org 
[lkml]   [2021]   [Oct]   [27]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [PATCH v10 06/11] arm64: Make profile_pc() use arch_stack_walk()
    On Thu, Oct 14, 2021 at 09:58:42PM -0500, madvenka@linux.microsoft.com wrote:
    > From: "Madhavan T. Venkataraman" <madvenka@linux.microsoft.com>
    >
    > Currently, profile_pc() in ARM64 code walks the stack using
    > start_backtrace() and unwind_frame(). Make it use arch_stack_walk()
    > instead. This makes maintenance easier.
    >
    > Signed-off-by: Madhavan T. Venkataraman <madvenka@linux.microsoft.com>
    > ---
    > arch/arm64/kernel/time.c | 22 +++++++++++++---------
    > 1 file changed, 13 insertions(+), 9 deletions(-)
    >
    > diff --git a/arch/arm64/kernel/time.c b/arch/arm64/kernel/time.c
    > index eebbc8d7123e..671b3038a772 100644
    > --- a/arch/arm64/kernel/time.c
    > +++ b/arch/arm64/kernel/time.c
    > @@ -32,22 +32,26 @@
    > #include <asm/stacktrace.h>
    > #include <asm/paravirt.h>
    >
    > +static bool profile_pc_cb(void *arg, unsigned long pc)
    > +{
    > + unsigned long *prof_pc = arg;
    > +
    > + if (in_lock_functions(pc))
    > + return true;
    > + *prof_pc = pc;
    > + return false;
    > +}
    > +
    > unsigned long profile_pc(struct pt_regs *regs)
    > {
    > - struct stackframe frame;
    > + unsigned long prof_pc = 0;
    >
    > if (!in_lock_functions(regs->pc))
    > return regs->pc;

    This can go -- the first call to profile_pc_cb() will use regs->pc.

    With that gone, and the include updates to use <linux/stacktrace.h>:

    Reviewed-by: Mark Rutland <mark.rutland@arm.com>

    Mark.

    > - start_backtrace(&frame, regs->regs[29], regs->pc);
    > -
    > - do {
    > - int ret = unwind_frame(NULL, &frame);
    > - if (ret < 0)
    > - return 0;
    > - } while (in_lock_functions(frame.pc));
    > + arch_stack_walk(profile_pc_cb, &prof_pc, current, regs);
    >
    > - return frame.pc;
    > + return prof_pc;
    > }
    > EXPORT_SYMBOL(profile_pc);
    >
    > --
    > 2.25.1
    >

    \
     
     \ /
      Last update: 2021-10-27 15:33    [W:4.061 / U:0.632 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site