riscv: compat: process: Add UXL_32 support in start_thread
authorGuo Ren <guoren@linux.alibaba.com>
Tue, 5 Apr 2022 07:13:07 +0000 (15:13 +0800)
committerPalmer Dabbelt <palmer@rivosinc.com>
Tue, 26 Apr 2022 20:36:36 +0000 (13:36 -0700)
If the current task is in COMPAT mode, set SR_UXL_32 in status for
returning userspace. We need CONFIG _COMPAT to prevent compiling
errors with rv32 defconfig.

Signed-off-by: Guo Ren <guoren@linux.alibaba.com>
Signed-off-by: Guo Ren <guoren@kernel.org>
Tested-by: Heiko Stuebner <heiko@sntech.de>
Link: https://lore.kernel.org/r/20220405071314.3225832-14-guoren@kernel.org
Signed-off-by: Palmer Dabbelt <palmer@rivosinc.com>
arch/riscv/kernel/process.c

index 504b496..b4421c1 100644 (file)
@@ -98,6 +98,15 @@ void start_thread(struct pt_regs *regs, unsigned long pc,
        }
        regs->epc = pc;
        regs->sp = sp;
+
+#ifdef CONFIG_64BIT
+       regs->status &= ~SR_UXL;
+
+       if (is_compat_task())
+               regs->status |= SR_UXL_32;
+       else
+               regs->status |= SR_UXL_64;
+#endif
 }
 
 void flush_thread(void)