[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <509d2b62-7d52-bf5c-7a6c-213a740a5c00@codethink.co.uk>
Date: Fri, 11 Mar 2022 13:37:48 +0000
From: Ben Dooks <ben.dooks@...ethink.co.uk>
To: Guo Ren <guoren@...nel.org>, Palmer Dabbelt <palmer@...belt.com>,
Arnd Bergmann <arnd@...db.de>,
Anup Patel <anup@...infault.org>,
Greg Kroah-Hartman <gregkh@...uxfoundation.org>,
liush <liush@...winnertech.com>, Wei Fu <wefu@...hat.com>,
Drew Fustini <drew@...gleboard.org>,
Wang Junqiang <wangjunqiang@...as.ac.cn>,
Christoph Hellwig <hch@....de>
Cc: linux-arch <linux-arch@...r.kernel.org>,
Linux Kernel Mailing List <linux-kernel@...r.kernel.org>,
linux-riscv <linux-riscv@...ts.infradead.org>,
linux-csky@...r.kernel.org,
linux-s390 <linux-s390@...r.kernel.org>,
sparclinux <sparclinux@...r.kernel.org>,
linuxppc-dev <linuxppc-dev@...ts.ozlabs.org>,
Parisc List <linux-parisc@...r.kernel.org>,
"open list:BROADCOM NVRAM DRIVER" <linux-mips@...r.kernel.org>,
Linux ARM <linux-arm-kernel@...ts.infradead.org>,
the arch/x86 maintainers <x86@...nel.org>,
Guo Ren <guoren@...ux.alibaba.com>
Subject: Re: [PATCH V7 13/20] riscv: compat: process: Add UXL_32 support in
start_thread
On 11/03/2022 02:38, Guo Ren wrote:
> Hi Arnd,
>
> On Mon, Feb 28, 2022 at 12:30 AM <guoren@...nel.org> wrote:
>>
>> From: Guo Ren <guoren@...ux.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@...ux.alibaba.com>
>> Signed-off-by: Guo Ren <guoren@...nel.org>
>> Cc: Arnd Bergmann <arnd@...db.de>
>> Cc: Palmer Dabbelt <palmer@...belt.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
Powered by blists - more mailing lists