From f4625ee0e40a5c724bb3f3eb7fd89e491bfd7646 Mon Sep 17 00:00:00 2001 From: Guo Ren Date: Sat, 30 Mar 2019 23:44:34 +0800 Subject: csky: Use in_syscall & forget_syscall instead of r11_sig We could use regs->sr 16-24 bits to detect syscall: VEC_TRAP0 and r11_sig is no necessary for current implementation. In this patch, we implement the in_syscall and forget_syscall which are inspired from arm & nds32, but csky pt_regs has no syscall_num element and we just set zero to regs->sr's vector-bits-field instead. For ret_from_fork, current task was forked from parent which is in syscall progress and its regs->sr has been already setted with VEC_TRAP0. See: arch/csky/kernel/process.c: copy_thread() Signed-off-by: Guo Ren --- arch/csky/include/asm/ptrace.h | 12 ++++++++++++ 1 file changed, 12 insertions(+) (limited to 'arch/csky/include') diff --git a/arch/csky/include/asm/ptrace.h b/arch/csky/include/asm/ptrace.h index 1e00578166f0..d0aba7b32417 100644 --- a/arch/csky/include/asm/ptrace.h +++ b/arch/csky/include/asm/ptrace.h @@ -5,6 +5,8 @@ #define __ASM_CSKY_PTRACE_H #include +#include +#include #ifndef __ASSEMBLY__ @@ -20,6 +22,16 @@ #define instruction_pointer(regs) ((regs)->pc) #define profile_pc(regs) instruction_pointer(regs) +static inline bool in_syscall(struct pt_regs const *regs) +{ + return ((regs->sr >> 16) & 0xff) == VEC_TRAP0; +} + +static inline void forget_syscall(struct pt_regs *regs) +{ + regs->sr &= ~(0xff << 16); +} + static inline unsigned long regs_return_value(struct pt_regs *regs) { return regs->a0; -- cgit v1.2.3