f0bddf5058
This patch converts riscv to use the generic entry infrastructure from kernel/entry/*. The generic entry makes maintainers' work easier and codes more elegant. Here are the changes: - More clear entry.S with handle_exception and ret_from_exception - Get rid of complex custom signal implementation - Move syscall procedure from assembly to C, which is much more readable. - Connect ret_from_fork & ret_from_kernel_thread to generic entry. - Wrap with irqentry_enter/exit and syscall_enter/exit_from_user_mode - Use the standard preemption code instead of custom Suggested-by: Huacai Chen <chenhuacai@kernel.org> Reviewed-by: Björn Töpel <bjorn@rivosinc.com> Tested-by: Yipeng Zou <zouyipeng@huawei.com> Tested-by: Jisheng Zhang <jszhang@kernel.org> Signed-off-by: Guo Ren <guoren@linux.alibaba.com> Signed-off-by: Guo Ren <guoren@kernel.org> Cc: Ben Hutchings <ben@decadent.org.uk> Link: https://lore.kernel.org/r/20230222033021.983168-5-guoren@kernel.org Signed-off-by: Palmer Dabbelt <palmer@rivosinc.com>
25 lines
633 B
C
25 lines
633 B
C
/* SPDX-License-Identifier: GPL-2.0 */
|
|
|
|
#ifndef _ASM_RISCV_STACKTRACE_H
|
|
#define _ASM_RISCV_STACKTRACE_H
|
|
|
|
#include <linux/sched.h>
|
|
#include <asm/ptrace.h>
|
|
|
|
struct stackframe {
|
|
unsigned long fp;
|
|
unsigned long ra;
|
|
};
|
|
|
|
extern void notrace walk_stackframe(struct task_struct *task, struct pt_regs *regs,
|
|
bool (*fn)(void *, unsigned long), void *arg);
|
|
extern void dump_backtrace(struct pt_regs *regs, struct task_struct *task,
|
|
const char *loglvl);
|
|
|
|
static inline bool on_thread_stack(void)
|
|
{
|
|
return !(((unsigned long)(current->stack) ^ current_stack_pointer) & ~(THREAD_SIZE - 1));
|
|
}
|
|
|
|
#endif /* _ASM_RISCV_STACKTRACE_H */
|