[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