On Thu, 14 Oct 2021 at 16:37, WANG Xuerui <i.kernel@xxxxxxxxxx> wrote: > > Hi Feiyang, > > On 2021/10/14 16:32, Feiyang Chen wrote: > > Convert MIPS syscall to use the generic entry infrastructure from > > kernel/entry/*. > > > > There are a few special things on MIPS: > > > > - There is one type of syscall on MIPS32 (scall32-o32) and three types > > of syscalls on MIPS64 (scall64-o32, scall64-n32 and scall64-n64). Now > > convert to C code to handle different types of syscalls. > > > > - For some special syscalls (e.g. fork, clone, clone3 and sysmips), > > save_static_function() wrapper is used to save static registers. Now > > SAVE_STATIC is used in handle_sys before calling do_syscall(), so the > > save_static_function() wrapper can be removed. > > > > - For sigreturn/rt_sigreturn and sysmips, inline assembly is used to > > jump to syscall_exit directly for skipping setting the error flag and > > restoring all registers. Now use regs->regs[27] to mark whether to > > handle the error flag and restore all registers in handle_sys, so these > > functions can return normally as other architecture. > > > > Signed-off-by: Feiyang Chen <chenfeiyang@xxxxxxxxxxx> > > Signed-off-by: Yanteng Si <siyanteng@xxxxxxxxxxx> > > Reviewed-by: Huacai Chen <chenhuacai@xxxxxxxxxx> > > --- > > arch/mips/Kconfig | 1 + > > arch/mips/include/asm/entry-common.h | 13 ++ > > arch/mips/include/asm/ptrace.h | 8 +- > > arch/mips/include/asm/sim.h | 70 ------- > > arch/mips/include/asm/syscall.h | 5 + > > arch/mips/include/asm/thread_info.h | 17 +- > > arch/mips/include/uapi/asm/ptrace.h | 7 +- > > arch/mips/kernel/Makefile | 14 +- > > arch/mips/kernel/entry.S | 75 ++------ > > arch/mips/kernel/linux32.c | 1 - > > arch/mips/kernel/ptrace.c | 78 -------- > > arch/mips/kernel/scall.S | 137 +++++++++++++ > > arch/mips/kernel/scall32-o32.S | 223 ---------------------- > > arch/mips/kernel/scall64-n32.S | 107 ----------- > > arch/mips/kernel/scall64-n64.S | 116 ----------- > > arch/mips/kernel/scall64-o32.S | 221 --------------------- > > arch/mips/kernel/signal.c | 37 ++-- > > arch/mips/kernel/signal_n32.c | 16 +- > > arch/mips/kernel/signal_o32.c | 31 +-- > > arch/mips/kernel/syscall.c | 148 +++++++++++--- > > arch/mips/kernel/syscalls/syscall_n32.tbl | 8 +- > > arch/mips/kernel/syscalls/syscall_n64.tbl | 8 +- > > arch/mips/kernel/syscalls/syscall_o32.tbl | 8 +- > > 23 files changed, 354 insertions(+), 995 deletions(-) > > create mode 100644 arch/mips/include/asm/entry-common.h > > delete mode 100644 arch/mips/include/asm/sim.h > > create mode 100644 arch/mips/kernel/scall.S > > delete mode 100644 arch/mips/kernel/scall32-o32.S > > delete mode 100644 arch/mips/kernel/scall64-n32.S > > delete mode 100644 arch/mips/kernel/scall64-n64.S > > delete mode 100644 arch/mips/kernel/scall64-o32.S > > > > diff --git a/arch/mips/Kconfig b/arch/mips/Kconfig > > index 1291774a2fa5..debd125100ad 100644 > > --- a/arch/mips/Kconfig > > +++ b/arch/mips/Kconfig > > @@ -32,6 +32,7 @@ config MIPS > > select GENERIC_ATOMIC64 if !64BIT > > select GENERIC_CMOS_UPDATE > > select GENERIC_CPU_AUTOPROBE > > + select GENERIC_ENTRY > > select GENERIC_GETTIMEOFDAY > > select GENERIC_IOMAP > > select GENERIC_IRQ_PROBE > > diff --git a/arch/mips/include/asm/entry-common.h b/arch/mips/include/asm/entry-common.h > > new file mode 100644 > > index 000000000000..0fe2a098ded9 > > --- /dev/null > > +++ b/arch/mips/include/asm/entry-common.h > > @@ -0,0 +1,13 @@ > > +/* SPDX-License-Identifier: GPL-2.0 */ > > +#ifndef ARCH_LOONGARCH_ENTRY_COMMON_H > > +#define ARCH_LOONGARCH_ENTRY_COMMON_H > Do you intend to say "MIPS"? ;-) Hi, YunQiang, Xuerui, Yes, I will fix it in the next version. Thanks, Feiyang > > + > > +#include <linux/sched.h> > > +#include <linux/processor.h> > > + > > +static inline bool on_thread_stack(void) > > +{ > > + return !(((unsigned long)(current->stack) ^ current_stack_pointer) & ~(THREAD_SIZE - 1)); > > +} > > + > > +#endif