diff mbox series

[v2,2/2] riscv: Make __fstate_clean() work correctly.

Message ID 1565771033-1831-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

Commit Message

Vincent Chen Aug. 14, 2019, 8:23 a.m. UTC
Make the __fstate_clean() function correctly set the
state of sstatus.FS in pt_regs to SR_FS_CLEAN.

Fixes: 7db91e5 ("RISC-V: Task implementation")
Cc: linux-stable <stable@vger.kernel.org>
Signed-off-by: Vincent Chen <vincent.chen@sifive.com>
Reviewed-by: Anup Patel <anup@brainfault.org>
Reviewed-by: Christoph Hellwig <hch@lst.de>

---
 arch/riscv/include/asm/switch_to.h | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Comments

Paul Walmsley Aug. 14, 2019, 8:32 p.m. UTC | #1
On Wed, 14 Aug 2019, Vincent Chen wrote:

> Make the __fstate_clean() function correctly set the
> state of sstatus.FS in pt_regs to SR_FS_CLEAN.
> 
> Fixes: 7db91e5 ("RISC-V: Task implementation")
> Cc: linux-stable <stable@vger.kernel.org>
> Signed-off-by: Vincent Chen <vincent.chen@sifive.com>
> Reviewed-by: Anup Patel <anup@brainfault.org>
> Reviewed-by: Christoph Hellwig <hch@lst.de>

Thanks, I extended the "Fixes" commit ID to 12 digits, as is the usual 
practice here, and have queued the following for v5.3-rc.


- Paul

From: Vincent Chen <vincent.chen@sifive.com>
Date: Wed, 14 Aug 2019 16:23:53 +0800
Subject: [PATCH] riscv: Make __fstate_clean() work correctly.

Make the __fstate_clean() function correctly set the
state of sstatus.FS in pt_regs to SR_FS_CLEAN.

Fixes: 7db91e57a0acd ("RISC-V: Task implementation")
Cc: linux-stable <stable@vger.kernel.org>
Signed-off-by: Vincent Chen <vincent.chen@sifive.com>
Reviewed-by: Anup Patel <anup@brainfault.org>
Reviewed-by: Christoph Hellwig <hch@lst.de>
[paul.walmsley@sifive.com: expanded "Fixes" commit ID]
Signed-off-by: Paul Walmsley <paul.walmsley@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 949d9cd91dec..f0227bdce0f0 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,
Palmer Dabbelt Aug. 14, 2019, 9:29 p.m. UTC | #2
On Wed, 14 Aug 2019 13:32:50 PDT (-0700), Paul Walmsley wrote:
> On Wed, 14 Aug 2019, Vincent Chen wrote:
>
>> Make the __fstate_clean() function correctly set the
>> state of sstatus.FS in pt_regs to SR_FS_CLEAN.
>>
>> Fixes: 7db91e5 ("RISC-V: Task implementation")
>> Cc: linux-stable <stable@vger.kernel.org>
>> Signed-off-by: Vincent Chen <vincent.chen@sifive.com>
>> Reviewed-by: Anup Patel <anup@brainfault.org>
>> Reviewed-by: Christoph Hellwig <hch@lst.de>
>
> Thanks, I extended the "Fixes" commit ID to 12 digits, as is the usual
> practice here, and have queued the following for v5.3-rc.

For reference, something like "git config core.abbrev=12" (or whatever you 
write to get this in your .gitconfig)

    https://github.com/palmer-dabbelt/home/blob/master/.gitconfig.in#L23

causes git to do the right thing.

> - Paul
>
> From: Vincent Chen <vincent.chen@sifive.com>
> Date: Wed, 14 Aug 2019 16:23:53 +0800
> Subject: [PATCH] riscv: Make __fstate_clean() work correctly.
>
> Make the __fstate_clean() function correctly set the
> state of sstatus.FS in pt_regs to SR_FS_CLEAN.
>
> Fixes: 7db91e57a0acd ("RISC-V: Task implementation")
> Cc: linux-stable <stable@vger.kernel.org>
> Signed-off-by: Vincent Chen <vincent.chen@sifive.com>
> Reviewed-by: Anup Patel <anup@brainfault.org>
> Reviewed-by: Christoph Hellwig <hch@lst.de>
> [paul.walmsley@sifive.com: expanded "Fixes" commit ID]
> Signed-off-by: Paul Walmsley <paul.walmsley@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 949d9cd91dec..f0227bdce0f0 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,
Andreas Schwab Aug. 14, 2019, 10:17 p.m. UTC | #3
On Aug 14 2019, Palmer Dabbelt <palmer@sifive.com> wrote:

> On Wed, 14 Aug 2019 13:32:50 PDT (-0700), Paul Walmsley wrote:
>> On Wed, 14 Aug 2019, Vincent Chen wrote:
>>
>>> Make the __fstate_clean() function correctly set the
>>> state of sstatus.FS in pt_regs to SR_FS_CLEAN.
>>>
>>> Fixes: 7db91e5 ("RISC-V: Task implementation")
>>> Cc: linux-stable <stable@vger.kernel.org>
>>> Signed-off-by: Vincent Chen <vincent.chen@sifive.com>
>>> Reviewed-by: Anup Patel <anup@brainfault.org>
>>> Reviewed-by: Christoph Hellwig <hch@lst.de>
>>
>> Thanks, I extended the "Fixes" commit ID to 12 digits, as is the usual
>> practice here, and have queued the following for v5.3-rc.
>
> For reference, something like "git config core.abbrev=12" (or whatever you
> write to get this in your .gitconfig)
>
>    https://github.com/palmer-dabbelt/home/blob/master/.gitconfig.in#L23
>
> causes git to do the right thing.

Actually, the right setting is core.abbrev=auto (or leaving it unset).
It lets git chose the appropriate length depending on the repository
contents.  For the linux repository it will chose 13 right now.

Andreas.
Palmer Dabbelt Aug. 15, 2019, 1:53 a.m. UTC | #4
On Wed, 14 Aug 2019 15:17:18 PDT (-0700), schwab@linux-m68k.org wrote:
> On Aug 14 2019, Palmer Dabbelt <palmer@sifive.com> wrote:
>
>> On Wed, 14 Aug 2019 13:32:50 PDT (-0700), Paul Walmsley wrote:
>>> On Wed, 14 Aug 2019, Vincent Chen wrote:
>>>
>>>> Make the __fstate_clean() function correctly set the
>>>> state of sstatus.FS in pt_regs to SR_FS_CLEAN.
>>>>
>>>> Fixes: 7db91e5 ("RISC-V: Task implementation")
>>>> Cc: linux-stable <stable@vger.kernel.org>
>>>> Signed-off-by: Vincent Chen <vincent.chen@sifive.com>
>>>> Reviewed-by: Anup Patel <anup@brainfault.org>
>>>> Reviewed-by: Christoph Hellwig <hch@lst.de>
>>>
>>> Thanks, I extended the "Fixes" commit ID to 12 digits, as is the usual
>>> practice here, and have queued the following for v5.3-rc.
>>
>> For reference, something like "git config core.abbrev=12" (or whatever you
>> write to get this in your .gitconfig)
>>
>>    https://github.com/palmer-dabbelt/home/blob/master/.gitconfig.in#L23
>>
>> causes git to do the right thing.
>
> Actually, the right setting is core.abbrev=auto (or leaving it unset).
> It lets git chose the appropriate length depending on the repository
> contents.  For the linux repository it will chose 13 right now.

Awesome, thanks!  I've updated my config :)
Vincent Chen Aug. 15, 2019, 2:53 a.m. UTC | #5
On Thu, Aug 15, 2019 at 6:17 AM Andreas Schwab <schwab@linux-m68k.org> wrote:
>
> On Aug 14 2019, Palmer Dabbelt <palmer@sifive.com> wrote:
>
> > On Wed, 14 Aug 2019 13:32:50 PDT (-0700), Paul Walmsley wrote:
> >> On Wed, 14 Aug 2019, Vincent Chen wrote:
> >>
> >>> Make the __fstate_clean() function correctly set the
> >>> state of sstatus.FS in pt_regs to SR_FS_CLEAN.
> >>>
> >>> Fixes: 7db91e5 ("RISC-V: Task implementation")
> >>> Cc: linux-stable <stable@vger.kernel.org>
> >>> Signed-off-by: Vincent Chen <vincent.chen@sifive.com>
> >>> Reviewed-by: Anup Patel <anup@brainfault.org>
> >>> Reviewed-by: Christoph Hellwig <hch@lst.de>
> >>
> >> Thanks, I extended the "Fixes" commit ID to 12 digits, as is the usual
> >> practice here, and have queued the following for v5.3-rc.
> >
Thank Paul for correcting my mistake.

> > For reference, something like "git config core.abbrev=12" (or whatever you
> > write to get this in your .gitconfig)
> >
> >    https://github.com/palmer-dabbelt/home/blob/master/.gitconfig.in#L23
> >
> > causes git to do the right thing.
>
> Actually, the right setting is core.abbrev=auto (or leaving it unset).
> It lets git chose the appropriate length depending on the repository
> contents.  For the linux repository it will chose 13 right now.
>
> Andreas.
>
Thanks to Palmer and Andreas for sharing this useful information.

> --
> Andreas Schwab, schwab@linux-m68k.org
> GPG Key fingerprint = 7578 EB47 D4E5 4D69 2510  2552 DF73 E780 A9DA AEC1
> "And now for something completely different."
Geert Uytterhoeven Sept. 11, 2019, 7:22 a.m. UTC | #6
Hi Andreas,

On Thu, Aug 15, 2019 at 12:37 AM Andreas Schwab <schwab@linux-m68k.org> wrote:
> On Aug 14 2019, Palmer Dabbelt <palmer@sifive.com> wrote:
> > On Wed, 14 Aug 2019 13:32:50 PDT (-0700), Paul Walmsley wrote:
> >> On Wed, 14 Aug 2019, Vincent Chen wrote:
> >>> Make the __fstate_clean() function correctly set the
> >>> state of sstatus.FS in pt_regs to SR_FS_CLEAN.
> >>>
> >>> Fixes: 7db91e5 ("RISC-V: Task implementation")
> >>> Cc: linux-stable <stable@vger.kernel.org>
> >>> Signed-off-by: Vincent Chen <vincent.chen@sifive.com>
> >>> Reviewed-by: Anup Patel <anup@brainfault.org>
> >>> Reviewed-by: Christoph Hellwig <hch@lst.de>
> >>
> >> Thanks, I extended the "Fixes" commit ID to 12 digits, as is the usual
> >> practice here, and have queued the following for v5.3-rc.
> >
> > For reference, something like "git config core.abbrev=12" (or whatever you
> > write to get this in your .gitconfig)
> >
> >    https://github.com/palmer-dabbelt/home/blob/master/.gitconfig.in#L23
> >
> > causes git to do the right thing.
>
> Actually, the right setting is core.abbrev=auto (or leaving it unset).
> It lets git chose the appropriate length depending on the repository
> contents.  For the linux repository it will chose 13 right now.

Does that depend on the git version?
For me (git version 2.17.1), it still uses 12 when using the auto setting.

Should we update Documentation/process/submitting-patches.rst
to increase to e.g. 16 (which is what I've been using for quite a while)?
When can we expect old 12 hexit references to start breaking?

Thanks!

Gr{oetje,eeting}s,

                        Geert
Andreas Schwab Sept. 11, 2019, 7:31 a.m. UTC | #7
On Sep 11 2019, Geert Uytterhoeven <geert@linux-m68k.org> wrote:

> Hi Andreas,
>
> On Thu, Aug 15, 2019 at 12:37 AM Andreas Schwab <schwab@linux-m68k.org> wrote:
>> On Aug 14 2019, Palmer Dabbelt <palmer@sifive.com> wrote:
>> > On Wed, 14 Aug 2019 13:32:50 PDT (-0700), Paul Walmsley wrote:
>> >> On Wed, 14 Aug 2019, Vincent Chen wrote:
>> >>> Make the __fstate_clean() function correctly set the
>> >>> state of sstatus.FS in pt_regs to SR_FS_CLEAN.
>> >>>
>> >>> Fixes: 7db91e5 ("RISC-V: Task implementation")
>> >>> Cc: linux-stable <stable@vger.kernel.org>
>> >>> Signed-off-by: Vincent Chen <vincent.chen@sifive.com>
>> >>> Reviewed-by: Anup Patel <anup@brainfault.org>
>> >>> Reviewed-by: Christoph Hellwig <hch@lst.de>
>> >>
>> >> Thanks, I extended the "Fixes" commit ID to 12 digits, as is the usual
>> >> practice here, and have queued the following for v5.3-rc.
>> >
>> > For reference, something like "git config core.abbrev=12" (or whatever you
>> > write to get this in your .gitconfig)
>> >
>> >    https://github.com/palmer-dabbelt/home/blob/master/.gitconfig.in#L23
>> >
>> > causes git to do the right thing.
>>
>> Actually, the right setting is core.abbrev=auto (or leaving it unset).
>> It lets git chose the appropriate length depending on the repository
>> contents.  For the linux repository it will chose 13 right now.
>
> Does that depend on the git version?
> For me (git version 2.17.1), it still uses 12 when using the auto setting.

No, 12 is the correct number.  I was miscounting.

Andreas.
diff mbox series

Patch

diff --git a/arch/riscv/include/asm/switch_to.h b/arch/riscv/include/asm/switch_to.h
index 0575b8a..0aa5b94 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,