[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20190812145816.GD26897@infradead.org>
Date: Mon, 12 Aug 2019 07:58:16 -0700
From: Christoph Hellwig <hch@...radead.org>
To: Vincent Chen <vincent.chen@...ive.com>
Cc: paul.walmsley@...ive.com, palmer@...ive.com, aou@...s.berkeley.edu,
linux-riscv@...ts.infradead.org, linux-kernel@...r.kernel.org
Subject: Re: [PATCH 1/2] riscv: Correct the initialized flow of FP register
> +static inline void fstate_off(struct task_struct *task,
> + struct pt_regs *regs)
> +{
> + regs->sstatus = (regs->sstatus & ~(SR_FS)) | SR_FS_OFF;
No need for the inner braces here.
> +}
> +
> static inline void fstate_save(struct task_struct *task,
> struct pt_regs *regs)
> {
> diff --git a/arch/riscv/kernel/process.c b/arch/riscv/kernel/process.c
> index f23794b..e3077ee 100644
> --- a/arch/riscv/kernel/process.c
> +++ b/arch/riscv/kernel/process.c
> @@ -64,8 +64,16 @@ void start_thread(struct pt_regs *regs, unsigned long pc,
> unsigned long sp)
> {
> regs->sstatus = SR_SPIE;
> - if (has_fpu)
> + if (has_fpu) {
> regs->sstatus |= SR_FS_INITIAL;
> +#ifdef CONFIG_FPU
> + /*
> + * Restore the initial value to the FP register
> + * before starting the user program.
> + */
> + fstate_restore(current, regs);
> +#endif
fstate_restore has a no-op stub for the !CONFIG_FPU case, so the ifdef
here is not needed.
Otherwise this looks good to me:
Reviewed-by: Christoph Hellwig <hch@....de>
Powered by blists - more mailing lists