[PATCH] ARM: perf: Fix stacktraces for tracepoint events in THUMB2 kernels

Linus Walleij linus.walleij at linaro.org
Thu Sep 22 01:57:11 PDT 2022


On Wed, Sep 21, 2022 at 1:19 AM Tomislav Novak <tnovak at fb.com> wrote:

> Store the frame address where arm_get_current_stackframe() looks for it
> (ARM_r7 instead of ARM_fp if CONFIG_THUMB2_KERNEL=y). Otherwise frame->fp
> gets set to 0, causing unwind_frame() to fail.
>
>   # bpftrace -e 't:sched:sched_switch { @[kstack] = count(); exit(); }'
>   Attaching 1 probe...
>   @[
>       __schedule+1059
>   ]: 1
>
> A typical first unwind instruction is 0x97 (SP = R7), so after executing
> it SP ends up being 0 and -URC_FAILURE is returned.
>
>   unwind_frame(pc = ac9da7d7 lr = 00000000 sp = c69bdda0 fp = 00000000)
>   unwind_find_idx(ac9da7d7)
>   unwind_exec_insn: insn = 00000097
>   unwind_exec_insn: fp = 00000000 sp = 00000000 lr = 00000000 pc = 00000000
>
> With this patch:
>
>   # bpftrace -e 't:sched:sched_switch { @[kstack] = count(); exit(); }'
>   Attaching 1 probe...
>   @[
>       __schedule+1059
>       __schedule+1059
>       schedule+79
>       schedule_hrtimeout_range_clock+163
>       schedule_hrtimeout_range+17
>       ep_poll+471
>       SyS_epoll_wait+111
>       sys_epoll_pwait+231
>       __ret_fast_syscall+1
>   ]: 1
>
> Signed-off-by: Tomislav Novak <tnovak at fb.com>

Reviewed-by: Linus Walleij <linus.walleij at linaro.org>

Can you put this patch into Russell's patch tracker please?
https://www.armlinux.org.uk/developer/patches/

BTW: what is this interesting CONFIG_THUMB2_KERNEL target
that Facebook/Meta is working on? (It's OK if you can't tell, just
curious.)

Yours,
Linus Walleij



More information about the linux-arm-kernel mailing list