Message ID | 20211208121941.494956-4-catalin.marinas@arm.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | arm64: mte: add core dump support | expand |
On 12/8/21 9:19 AM, Catalin Marinas wrote: > Rather than explicitly calculating the number of bytes for a compact tag > storage format corresponding to a page, just add a MTE_PAGE_TAG_STORAGE > macro. With the current MTE implementation of 4 bits per tag, we store > 2 tags in a byte. > > Signed-off-by: Catalin Marinas <catalin.marinas@arm.com> > --- > arch/arm64/include/asm/mte-def.h | 1 + > arch/arm64/lib/mte.S | 4 ++-- > arch/arm64/mm/mteswap.c | 2 +- > 3 files changed, 4 insertions(+), 3 deletions(-) > > diff --git a/arch/arm64/include/asm/mte-def.h b/arch/arm64/include/asm/mte-def.h > index 626d359b396e..14ee86b019c2 100644 > --- a/arch/arm64/include/asm/mte-def.h > +++ b/arch/arm64/include/asm/mte-def.h > @@ -11,6 +11,7 @@ > #define MTE_TAG_SHIFT 56 > #define MTE_TAG_SIZE 4 > #define MTE_TAG_MASK GENMASK((MTE_TAG_SHIFT + (MTE_TAG_SIZE - 1)), MTE_TAG_SHIFT) > +#define MTE_PAGE_TAG_STORAGE (MTE_GRANULES_PER_PAGE * MTE_TAG_SIZE / 8) > > #define __MTE_PREAMBLE ARM64_ASM_PREAMBLE ".arch_extension memtag\n" > > diff --git a/arch/arm64/lib/mte.S b/arch/arm64/lib/mte.S > index e83643b3995f..62a1025aa118 100644 > --- a/arch/arm64/lib/mte.S > +++ b/arch/arm64/lib/mte.S > @@ -128,7 +128,7 @@ SYM_FUNC_END(mte_copy_tags_to_user) > /* > * Save the tags in a page > * x0 - page address > - * x1 - tag storage > + * x1 - tag storage, MTE_PAGE_TAG_STORAGE bytes > */ > SYM_FUNC_START(mte_save_page_tags) > multitag_transfer_size x7, x5 > @@ -152,7 +152,7 @@ SYM_FUNC_END(mte_save_page_tags) > /* > * Restore the tags in a page > * x0 - page address > - * x1 - tag storage > + * x1 - tag storage, MTE_PAGE_TAG_STORAGE bytes > */ > SYM_FUNC_START(mte_restore_page_tags) > multitag_transfer_size x7, x5 > diff --git a/arch/arm64/mm/mteswap.c b/arch/arm64/mm/mteswap.c > index 7c4ef56265ee..a9e50e930484 100644 > --- a/arch/arm64/mm/mteswap.c > +++ b/arch/arm64/mm/mteswap.c > @@ -12,7 +12,7 @@ static DEFINE_XARRAY(mte_pages); > void *mte_allocate_tag_storage(void) > { > /* tags granule is 16 bytes, 2 tags stored per byte */ > - return kmalloc(PAGE_SIZE / 16 / 2, GFP_KERNEL); > + return kmalloc(MTE_PAGE_TAG_STORAGE, GFP_KERNEL); > } > > void mte_free_tag_storage(char *storage) > Acked-by: Luis Machado <luis.machado@linaro.org>
diff --git a/arch/arm64/include/asm/mte-def.h b/arch/arm64/include/asm/mte-def.h index 626d359b396e..14ee86b019c2 100644 --- a/arch/arm64/include/asm/mte-def.h +++ b/arch/arm64/include/asm/mte-def.h @@ -11,6 +11,7 @@ #define MTE_TAG_SHIFT 56 #define MTE_TAG_SIZE 4 #define MTE_TAG_MASK GENMASK((MTE_TAG_SHIFT + (MTE_TAG_SIZE - 1)), MTE_TAG_SHIFT) +#define MTE_PAGE_TAG_STORAGE (MTE_GRANULES_PER_PAGE * MTE_TAG_SIZE / 8) #define __MTE_PREAMBLE ARM64_ASM_PREAMBLE ".arch_extension memtag\n" diff --git a/arch/arm64/lib/mte.S b/arch/arm64/lib/mte.S index e83643b3995f..62a1025aa118 100644 --- a/arch/arm64/lib/mte.S +++ b/arch/arm64/lib/mte.S @@ -128,7 +128,7 @@ SYM_FUNC_END(mte_copy_tags_to_user) /* * Save the tags in a page * x0 - page address - * x1 - tag storage + * x1 - tag storage, MTE_PAGE_TAG_STORAGE bytes */ SYM_FUNC_START(mte_save_page_tags) multitag_transfer_size x7, x5 @@ -152,7 +152,7 @@ SYM_FUNC_END(mte_save_page_tags) /* * Restore the tags in a page * x0 - page address - * x1 - tag storage + * x1 - tag storage, MTE_PAGE_TAG_STORAGE bytes */ SYM_FUNC_START(mte_restore_page_tags) multitag_transfer_size x7, x5 diff --git a/arch/arm64/mm/mteswap.c b/arch/arm64/mm/mteswap.c index 7c4ef56265ee..a9e50e930484 100644 --- a/arch/arm64/mm/mteswap.c +++ b/arch/arm64/mm/mteswap.c @@ -12,7 +12,7 @@ static DEFINE_XARRAY(mte_pages); void *mte_allocate_tag_storage(void) { /* tags granule is 16 bytes, 2 tags stored per byte */ - return kmalloc(PAGE_SIZE / 16 / 2, GFP_KERNEL); + return kmalloc(MTE_PAGE_TAG_STORAGE, GFP_KERNEL); } void mte_free_tag_storage(char *storage)
Rather than explicitly calculating the number of bytes for a compact tag storage format corresponding to a page, just add a MTE_PAGE_TAG_STORAGE macro. With the current MTE implementation of 4 bits per tag, we store 2 tags in a byte. Signed-off-by: Catalin Marinas <catalin.marinas@arm.com> --- arch/arm64/include/asm/mte-def.h | 1 + arch/arm64/lib/mte.S | 4 ++-- arch/arm64/mm/mteswap.c | 2 +- 3 files changed, 4 insertions(+), 3 deletions(-)