Message ID | 1565251121-28490-3-git-send-email-vincent.chen@sifive.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | riscv: Correct the initialized flow of FP and __fstate_clean() | expand |
On Thu, Aug 8, 2019 at 1:30 PM Vincent Chen <vincent.chen@sifive.com> wrote: > > Make the __fstate_clean() function can correctly set the > state of sstatus.FS in pt_regs to SR_FS_CLEAN. > > Tested on both QEMU and HiFive Unleashed using BBL + Linux. > > Signed-off-by: Vincent Chen <vincent.chen@sifive.com> > --- > arch/riscv/include/asm/switch_to.h | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/arch/riscv/include/asm/switch_to.h b/arch/riscv/include/asm/switch_to.h > index d5fe573..544f99a 100644 > --- a/arch/riscv/include/asm/switch_to.h > +++ b/arch/riscv/include/asm/switch_to.h > @@ -16,7 +16,7 @@ extern void __fstate_restore(struct task_struct *restore_from); > > static inline void __fstate_clean(struct pt_regs *regs) > { > - regs->sstatus |= (regs->sstatus & ~(SR_FS)) | SR_FS_CLEAN; > + regs->sstatus = (regs->sstatus & ~(SR_FS)) | SR_FS_CLEAN; > } > > static inline void fstate_off(struct task_struct *task, > -- > 2.7.4 > Looks good to me. Reviewed-by: Anup Patel <anup@brainfault.org> This should be a RC fix. Please add "Fixes:" in your commit description and CC stable kernel. Regards, Anup
Maybe s/can //g in the subject? > + regs->sstatus = (regs->sstatus & ~(SR_FS)) | SR_FS_CLEAN; No need for the inner braces here either. Otherwise: Reviewed-by: Christoph Hellwig <hch@lst.de>
On Thu, Aug 8, 2019 at 6:17 PM Anup Patel <anup@brainfault.org> wrote: > > On Thu, Aug 8, 2019 at 1:30 PM Vincent Chen <vincent.chen@sifive.com> wrote: > > > > Make the __fstate_clean() function can correctly set the > > state of sstatus.FS in pt_regs to SR_FS_CLEAN. > > > > Tested on both QEMU and HiFive Unleashed using BBL + Linux. > > > > Signed-off-by: Vincent Chen <vincent.chen@sifive.com> > > --- > > arch/riscv/include/asm/switch_to.h | 2 +- > > 1 file changed, 1 insertion(+), 1 deletion(-) > > > > diff --git a/arch/riscv/include/asm/switch_to.h b/arch/riscv/include/asm/switch_to.h > > index d5fe573..544f99a 100644 > > --- a/arch/riscv/include/asm/switch_to.h > > +++ b/arch/riscv/include/asm/switch_to.h > > @@ -16,7 +16,7 @@ extern void __fstate_restore(struct task_struct *restore_from); > > > > static inline void __fstate_clean(struct pt_regs *regs) > > { > > - regs->sstatus |= (regs->sstatus & ~(SR_FS)) | SR_FS_CLEAN; > > + regs->sstatus = (regs->sstatus & ~(SR_FS)) | SR_FS_CLEAN; > > } > > > > static inline void fstate_off(struct task_struct *task, > > -- > > 2.7.4 > > > > Looks good to me. > > Reviewed-by: Anup Patel <anup@brainfault.org> > > This should be a RC fix. > > Please add "Fixes:" in your commit description and > CC stable kernel. > OK, I will follow your suggestions and resend this patch Thanks for your comments. Regards, Vincent Chen
On Mon, Aug 12, 2019 at 10:59 PM Christoph Hellwig <hch@infradead.org> wrote: > > Maybe s/can //g in the subject? > > > + regs->sstatus = (regs->sstatus & ~(SR_FS)) | SR_FS_CLEAN; > > No need for the inner braces here either. OK, I will remove them. > > Otherwise: > > Reviewed-by: Christoph Hellwig <hch@lst.de> Thanks for your comments Regards, Vincent Chen
diff --git a/arch/riscv/include/asm/switch_to.h b/arch/riscv/include/asm/switch_to.h index d5fe573..544f99a 100644 --- a/arch/riscv/include/asm/switch_to.h +++ b/arch/riscv/include/asm/switch_to.h @@ -16,7 +16,7 @@ extern void __fstate_restore(struct task_struct *restore_from); static inline void __fstate_clean(struct pt_regs *regs) { - regs->sstatus |= (regs->sstatus & ~(SR_FS)) | SR_FS_CLEAN; + regs->sstatus = (regs->sstatus & ~(SR_FS)) | SR_FS_CLEAN; } static inline void fstate_off(struct task_struct *task,
Make the __fstate_clean() function can correctly set the state of sstatus.FS in pt_regs to SR_FS_CLEAN. Tested on both QEMU and HiFive Unleashed using BBL + Linux. Signed-off-by: Vincent Chen <vincent.chen@sifive.com> --- arch/riscv/include/asm/switch_to.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)