diff --git a/arch/riscv/include/asm/elf.h b/arch/riscv/include/asm/elf.h index ddac32d6e1df5..3d109f285a4a6 100644 --- a/arch/riscv/include/asm/elf.h +++ b/arch/riscv/include/asm/elf.h @@ -113,9 +113,6 @@ do { if ((ex).e_ident[EI_CLASS] == ELFCLASS32) \ typedef compat_ulong_t compat_elf_greg_t; typedef compat_elf_greg_t compat_elf_gregset_t[ELF_NGREG]; -#define compat_start_thread compat_start_thread - - extern int compat_arch_setup_additional_pages(struct linux_binprm *bprm, int uses_interp); #define compat_arch_setup_additional_pages \ diff --git a/arch/riscv/include/asm/processor.h b/arch/riscv/include/asm/processor.h index fbc166a5e15c0..b714c07276fdd 100644 --- a/arch/riscv/include/asm/processor.h +++ b/arch/riscv/include/asm/processor.h @@ -67,9 +67,6 @@ extern void start_thread(struct pt_regs *regs, unsigned long pc, unsigned long sp); #ifdef CONFIG_COMPAT -extern void compat_start_thread(struct pt_regs *regs, - unsigned long pc, unsigned long sp); - #define DEFAULT_MAP_WINDOW_64 TASK_SIZE_64 #else #define DEFAULT_MAP_WINDOW_64 TASK_SIZE diff --git a/arch/riscv/kernel/process.c b/arch/riscv/kernel/process.c index 22197a440ae0c..cf751cd48a64f 100644 --- a/arch/riscv/kernel/process.c +++ b/arch/riscv/kernel/process.c @@ -18,6 +18,7 @@ #include #include +#include #include #include #include @@ -91,16 +92,15 @@ void start_thread(struct pt_regs *regs, unsigned long pc, regs->epc = pc; regs->sp = sp; -} #ifdef CONFIG_COMPAT -void compat_start_thread(struct pt_regs *regs, unsigned long pc, - unsigned long sp) -{ - start_thread(regs, pc, sp); - regs->status |= SR_UXL_32; -} + regs->status &= ~SR_UXL; + if (is_compat_task()) + regs->status |= SR_UXL_32; + else + regs->status |= SR_UXL_64; #endif +} void flush_thread(void) {