mirror of
https://github.com/torvalds/linux.git
synced 2024-12-02 00:51:44 +00:00
d6af2c7639
With commitd3119bc985
("LoongArch: Fix callchain parse error with kernel tracepoint events"), perf can parse kernel callchain, but not complete and sometimes maybe error. The reason is LoongArch's unwinders (guess, prologue and orc) don't really need fp (i.e., regs[22]), and they use sp (i.e., regs[3]) as the frame address rather than the current stack pointer. Fix that by removing the assignment of regs[22], and instead assign the __builtin_frame_address(0) to regs[3]. Without fix: Children Self Command Shared Object Symbol ........ ........ ............. ................. ................ 33.91% 33.91% swapper [kernel.vmlinux] [k] __schedule | |--33.04%--__schedule | --0.87%--__arch_cpu_idle __schedule With this fix: Children Self Command Shared Object Symbol ........ ........ ............. ................. ................ 31.16% 31.16% swapper [kernel.vmlinux] [k] __schedule | |--20.63%--smpboot_entry | cpu_startup_entry | schedule_idle | __schedule | --10.53%--start_kernel cpu_startup_entry schedule_idle __schedule Fixes:d3119bc985
("LoongArch: Fix callchain parse error with kernel tracepoint events") Signed-off-by: Huacai Chen <chenhuacai@loongson.cn>
20 lines
517 B
C
20 lines
517 B
C
/* SPDX-License-Identifier: GPL-2.0 */
|
|
/*
|
|
* Author: Huacai Chen <chenhuacai@loongson.cn>
|
|
* Copyright (C) 2020-2022 Loongson Technology Corporation Limited
|
|
*/
|
|
|
|
#ifndef __LOONGARCH_PERF_EVENT_H__
|
|
#define __LOONGARCH_PERF_EVENT_H__
|
|
|
|
#include <asm/ptrace.h>
|
|
|
|
#define perf_arch_bpf_user_pt_regs(regs) (struct user_pt_regs *)regs
|
|
|
|
#define perf_arch_fetch_caller_regs(regs, __ip) { \
|
|
(regs)->csr_era = (__ip); \
|
|
(regs)->regs[3] = (unsigned long) __builtin_frame_address(0); \
|
|
}
|
|
|
|
#endif /* __LOONGARCH_PERF_EVENT_H__ */
|