Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b1a0c9e3 authored by Jinjie Ruan's avatar Jinjie Ruan Committed by Greg Kroah-Hartman
Browse files

riscv: Fix fp alignment bug in perf_callchain_user()

[ Upstream commit 22ab08955ea13be04a8efd20cc30890e0afaa49c ]

The standard RISC-V calling convention said:
	"The stack grows downward and the stack pointer is always
	kept 16-byte aligned".

So perf_callchain_user() should check whether 16-byte aligned for fp.

Link: https://riscv.org/wp-content/uploads/2015/01/riscv-calling.pdf



Fixes: dbeb90b0 ("riscv: Add perf callchain support")
Signed-off-by: default avatarJinjie Ruan <ruanjinjie@huawei.com>
Cc: Björn Töpel <bjorn@kernel.org>
Link: https://lore.kernel.org/r/20240708032847.2998158-2-ruanjinjie@huawei.com


Signed-off-by: default avatarPalmer Dabbelt <palmer@rivosinc.com>
Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
parent 5db87952
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -71,7 +71,7 @@ void perf_callchain_user(struct perf_callchain_entry_ctx *entry,
	perf_callchain_store(entry, regs->sepc);

	fp = user_backtrace(entry, fp, regs->ra);
	while (fp && !(fp & 0x3) && entry->nr < entry->max_stack)
	while (fp && !(fp & 0x7) && entry->nr < entry->max_stack)
		fp = user_backtrace(entry, fp, 0);
}