[PATCH v2 2/2] arm64: mte: DC {GVA,GZVA} shouldn't be used when DCZID_EL0.DZP == 1
Catalin Marinas
catalin.marinas at arm.com
Fri Dec 3 10:29:48 PST 2021
On Sun, Nov 07, 2021 at 11:11:49PM -0800, Reiji Watanabe wrote:
> diff --git a/arch/arm64/lib/mte.S b/arch/arm64/lib/mte.S
> index e83643b3995f..e62c048af337 100644
> --- a/arch/arm64/lib/mte.S
> +++ b/arch/arm64/lib/mte.S
> @@ -43,17 +43,23 @@ SYM_FUNC_END(mte_clear_page_tags)
> * x0 - address to the beginning of the page
> */
> SYM_FUNC_START(mte_zero_clear_page_tags)
> + and x0, x0, #(1 << MTE_TAG_SHIFT) - 1 // clear the tag
> mrs x1, dczid_el0
> + tbnz x1, #4, 2f // Branch if DC GZVA is prohibited
> and w1, w1, #0xf
> mov x2, #4
> lsl x1, x2, x1
> - and x0, x0, #(1 << MTE_TAG_SHIFT) - 1 // clear the tag
>
> 1: dc gzva, x0
> add x0, x0, x1
> tst x0, #(PAGE_SIZE - 1)
> b.ne 1b
> ret
> +
> +2: stzg x0, [x0], #16
Nitpick: MTE_GRANULE_SIZE instead of 16.
> + tst x0, #(PAGE_SIZE - 1)
> + b.ne 2b
> + ret
> SYM_FUNC_END(mte_zero_clear_page_tags)
We can use stz2g here since we know it's always a PAGE_SIZE and an even
number of tag granules.
--
Catalin
More information about the linux-arm-kernel
mailing list