Hi Anton.

On Wed, Apr 13, 2016 at 5:51 AM, Anton Blanchard <an...@samba.org> wrote:
> Hi Jack,
>
>> Previously we just saved the FSCR, but only restored it in some
>> settings, and never copied it thread to thread. This patch always
>> restores the FSCR and formalizes new threads inheriting its setting so
>> that later we can manipulate FSCR bits in start_thread.
>
> Will this break the existing FSCR_DSCR bit handling?
>
>          if (cpu_has_feature(CPU_FTR_DSCR)) {
>                 u64 dscr = get_paca()->dscr_default;
>                 u64 fscr = old_thread->fscr & ~FSCR_DSCR;
>
>                 if (new_thread->dscr_inherit) {
>                         dscr = new_thread->dscr;
>                         fscr |= FSCR_DSCR;
>                 }
>
>                 if (old_thread->dscr != dscr)
>                         mtspr(SPRN_DSCR, dscr);
>
>                 if (old_thread->fscr != fscr)
>                         mtspr(SPRN_FSCR, fscr);
>         }
>
> If not, we should modify the above so we don't write the FSCR twice.

I think this code is just partially redundant. I think it's trying to
predict the right FSCR value based on this dscr_inherit flag. Now that
we fully switch it, we could skip setting FSCR here, and just set DSCR
if FSCR.DSCR is set (similar to what my patches do with FSCR.LM). In
fact, we might be able to just entirely get rid of the dscr_inherit
flag, but I'd have to look harder at that.

Right now the FSCR switch is conditional on FTR_ARCH_207S which is
more exclusive than FTR_DSCR, but I guess the actual FSCR register is
universal to PPC64 like the fscr field in the thread struct? If so, I
can just move the FSCR save/restore out of the 207 conditional.

Anyway, I'll clean this up a bit, add the little asm tweak from
Segher, and put another spin on the list.

- Jack
_______________________________________________
Linuxppc-dev mailing list
Linuxppc-dev@lists.ozlabs.org
https://lists.ozlabs.org/listinfo/linuxppc-dev

Reply via email to