[PATCH V7 13/20] riscv: compat: process: Add UXL_32 support in start_thread
Ben Dooks
ben.dooks at codethink.co.uk
Fri Mar 11 05:37:48 PST 2022
On 11/03/2022 02:38, Guo Ren wrote:
> Hi Arnd,
>
> On Mon, Feb 28, 2022 at 12:30 AM <guoren at kernel.org> wrote:
>>
>> From: Guo Ren <guoren at linux.alibaba.com>
>>
>> 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 at linux.alibaba.com>
>> Signed-off-by: Guo Ren <guoren at kernel.org>
>> Cc: Arnd Bergmann <arnd at arndb.de>
>> Cc: Palmer Dabbelt <palmer at dabbelt.com>
>> ---
>> arch/riscv/kernel/process.c | 5 +++++
>> 1 file changed, 5 insertions(+)
>>
>> diff --git a/arch/riscv/kernel/process.c b/arch/riscv/kernel/process.c
>> index 03ac3aa611f5..54787ca9806a 100644
>> --- a/arch/riscv/kernel/process.c
>> +++ b/arch/riscv/kernel/process.c
>> @@ -97,6 +97,11 @@ void start_thread(struct pt_regs *regs, unsigned long pc,
>> }
>> regs->epc = pc;
>> regs->sp = sp;
>> +
> FIxup:
>
> + #ifdef CONFIG_COMPAT
>> + if (is_compat_task())
>> + regs->status = (regs->status & ~SR_UXL) | SR_UXL_32;
>> + else
>> + regs->status = (regs->status & ~SR_UXL) | SR_UXL_64;
> + #endif
>
> We still need "#ifdef CONFIG_COMPAT" here, because for rv32 we can't
> set SR_UXL at all. SR_UXL is BIT[32, 33].
would an if (IS_ENABLED(CONFIG_COMPAT)) { } around the lot be better
than an #ifdef here?
>> }
>>
>> void flush_thread(void)
>> --
>> 2.25.1
>>
>
>
--
Ben Dooks http://www.codethink.co.uk/
Senior Engineer Codethink - Providing Genius
https://www.codethink.co.uk/privacy.html
More information about the linux-riscv
mailing list