[PATCH] powerpc/book3s64/kuap: SPRN_AMR modification need CSI instructions before and after
Nicholas Piggin
npiggin at gmail.com
Mon Apr 20 10:17:41 AEST 2020
Excerpts from Aneesh Kumar K.V's message of April 19, 2020 11:53 pm:
> As per the ISA, context synchronizing instructions is needed before and after
> SPRN_AMR update. Use isync before and the CSI after is implied by the rfid
> that we will use to switch to a new context.
Not entirely sure if we need this. This will restore AMR to more
permissive, so if it executes ahead of a stray load from this
context, it won't make it fault.
That said, leaving this end open makes it harder to reason about
user access protection I guess, so let's add it.
Thanks,
Nick
>
> Signed-off-by: Aneesh Kumar K.V <aneesh.kumar at linux.ibm.com>
> ---
> arch/powerpc/include/asm/book3s/64/kup-radix.h | 9 ++++++++-
> 1 file changed, 8 insertions(+), 1 deletion(-)
>
> diff --git a/arch/powerpc/include/asm/book3s/64/kup-radix.h b/arch/powerpc/include/asm/book3s/64/kup-radix.h
> index 3bcef989a35d..224658efe2fd 100644
> --- a/arch/powerpc/include/asm/book3s/64/kup-radix.h
> +++ b/arch/powerpc/include/asm/book3s/64/kup-radix.h
> @@ -16,6 +16,7 @@
> #ifdef CONFIG_PPC_KUAP
> BEGIN_MMU_FTR_SECTION_NESTED(67)
> ld \gpr, STACK_REGS_KUAP(r1)
> + isync
> mtspr SPRN_AMR, \gpr
> END_MMU_FTR_SECTION_NESTED_IFSET(MMU_FTR_RADIX_KUAP, 67)
> #endif
> @@ -62,8 +63,14 @@
>
> static inline void kuap_restore_amr(struct pt_regs *regs)
> {
> - if (mmu_has_feature(MMU_FTR_RADIX_KUAP))
> + if (mmu_has_feature(MMU_FTR_RADIX_KUAP)) {
> + isync();
> mtspr(SPRN_AMR, regs->kuap);
> + /*
> + * No following isync/CSI required because we will be
> + * returning to a different context using rfid
> + */
> + }
> }
>
> static inline void kuap_check_amr(void)
> --
> 2.25.2
>
>
More information about the Linuxppc-dev
mailing list