From: Vincenzo Frascino <vincenzo.frascino@arm.com> To: Catalin Marinas <catalin.marinas@arm.com>, linux-arm-kernel@lists.infradead.org Cc: linux-mm@kvack.org, Anshuman Khandual <anshuman.khandual@arm.com>, Patrick Daly <pdaly@codeaurora.org>, Will Deacon <will@kernel.org>, Andrew Morton <akpm@linux-foundation.org>, David Hildenbrand <david@redhat.com> Subject: Re: [PATCH] arm64: mte: Map hotplugged memory as Normal Tagged Date: Tue, 9 Mar 2021 12:35:47 +0000 [thread overview] Message-ID: <12132bf8-860a-59d9-6ce9-2e59f5d90738@arm.com> (raw) In-Reply-To: <20210309122601.5543-1-catalin.marinas@arm.com> On 3/9/21 12:26 PM, Catalin Marinas wrote: > In a system supporting MTE, the linear map must allow reading/writing > allocation tags by setting the memory type as Normal Tagged. Currently, > this is only handled for memory present at boot. Hotplugged memory uses > Normal non-Tagged memory. > > Introduce pgprot_mhp() for hotplugged memory and use it in > add_memory_resource(). The arm64 code maps pgprot_mhp() to > pgprot_tagged(). > > Note that ZONE_DEVICE memory should not be mapped as Tagged and > therefore setting the memory type in arch_add_memory() is not feasible. > > Signed-off-by: Catalin Marinas <catalin.marinas@arm.com> > Fixes: 0178dc761368 ("arm64: mte: Use Normal Tagged attributes for the linear map") > Reported-by: Patrick Daly <pdaly@codeaurora.org> > Link: https://lore.kernel.org/r/1614745263-27827-1-git-send-email-pdaly@codeaurora.org > Cc: <stable@vger.kernel.org> # 5.10.x > Cc: Will Deacon <will@kernel.org> > Cc: Andrew Morton <akpm@linux-foundation.org> > Cc: Vincenzo Frascino <vincenzo.frascino@arm.com> > Cc: David Hildenbrand <david@redhat.com> Reviewed-by: Vincenzo Frascino <vincenzo.frascino@arm.com> > --- > > Patrick, could you please give this patch a try on your platform? Thanks. > > arch/arm64/include/asm/pgtable-prot.h | 1 - > arch/arm64/include/asm/pgtable.h | 3 +++ > arch/arm64/mm/mmu.c | 3 ++- > include/linux/pgtable.h | 4 ++++ > mm/memory_hotplug.c | 2 +- > 5 files changed, 10 insertions(+), 3 deletions(-) > > diff --git a/arch/arm64/include/asm/pgtable-prot.h b/arch/arm64/include/asm/pgtable-prot.h > index 046be789fbb4..9a65fb528110 100644 > --- a/arch/arm64/include/asm/pgtable-prot.h > +++ b/arch/arm64/include/asm/pgtable-prot.h > @@ -66,7 +66,6 @@ extern bool arm64_use_ng_mappings; > #define _PAGE_DEFAULT (_PROT_DEFAULT | PTE_ATTRINDX(MT_NORMAL)) > > #define PAGE_KERNEL __pgprot(PROT_NORMAL) > -#define PAGE_KERNEL_TAGGED __pgprot(PROT_NORMAL_TAGGED) > #define PAGE_KERNEL_RO __pgprot((PROT_NORMAL & ~PTE_WRITE) | PTE_RDONLY) > #define PAGE_KERNEL_ROX __pgprot((PROT_NORMAL & ~(PTE_WRITE | PTE_PXN)) | PTE_RDONLY) > #define PAGE_KERNEL_EXEC __pgprot(PROT_NORMAL & ~PTE_PXN) > diff --git a/arch/arm64/include/asm/pgtable.h b/arch/arm64/include/asm/pgtable.h > index e17b96d0e4b5..47027796c2f9 100644 > --- a/arch/arm64/include/asm/pgtable.h > +++ b/arch/arm64/include/asm/pgtable.h > @@ -486,6 +486,9 @@ static inline pmd_t pmd_mkdevmap(pmd_t pmd) > __pgprot_modify(prot, PTE_ATTRINDX_MASK, PTE_ATTRINDX(MT_NORMAL_NC) | PTE_PXN | PTE_UXN) > #define pgprot_device(prot) \ > __pgprot_modify(prot, PTE_ATTRINDX_MASK, PTE_ATTRINDX(MT_DEVICE_nGnRE) | PTE_PXN | PTE_UXN) > +#define pgprot_tagged(prot) \ > + __pgprot_modify(prot, PTE_ATTRINDX_MASK, PTE_ATTRINDX(MT_NORMAL_TAGGED)) > +#define pgprot_mhp pgprot_tagged > /* > * DMA allocations for non-coherent devices use what the Arm architecture calls > * "Normal non-cacheable" memory, which permits speculation, unaligned accesses > diff --git a/arch/arm64/mm/mmu.c b/arch/arm64/mm/mmu.c > index 3802cfbdd20d..9c8aa1b44cd5 100644 > --- a/arch/arm64/mm/mmu.c > +++ b/arch/arm64/mm/mmu.c > @@ -512,7 +512,8 @@ static void __init map_mem(pgd_t *pgdp) > * if MTE is present. Otherwise, it has the same attributes as > * PAGE_KERNEL. > */ > - __map_memblock(pgdp, start, end, PAGE_KERNEL_TAGGED, flags); > + __map_memblock(pgdp, start, end, pgprot_tagged(PAGE_KERNEL), > + flags); > } > > /* > diff --git a/include/linux/pgtable.h b/include/linux/pgtable.h > index cdfc4e9f253e..5e772392a379 100644 > --- a/include/linux/pgtable.h > +++ b/include/linux/pgtable.h > @@ -904,6 +904,10 @@ static inline void ptep_modify_prot_commit(struct vm_area_struct *vma, > #define pgprot_device pgprot_noncached > #endif > > +#ifndef pgprot_mhp > +#define pgprot_mhp(prot) (prot) > +#endif > + > #ifdef CONFIG_MMU > #ifndef pgprot_modify > #define pgprot_modify pgprot_modify > diff --git a/mm/memory_hotplug.c b/mm/memory_hotplug.c > index 5ba51a8bdaeb..0cdbbfbc5757 100644 > --- a/mm/memory_hotplug.c > +++ b/mm/memory_hotplug.c > @@ -1072,7 +1072,7 @@ static int online_memory_block(struct memory_block *mem, void *arg) > */ > int __ref add_memory_resource(int nid, struct resource *res, mhp_t mhp_flags) > { > - struct mhp_params params = { .pgprot = PAGE_KERNEL }; > + struct mhp_params params = { .pgprot = pgprot_mhp(PAGE_KERNEL) }; > u64 start, size; > bool new_node = false; > int ret; > -- Regards, Vincenzo
WARNING: multiple messages have this Message-ID (diff)
From: Vincenzo Frascino <vincenzo.frascino@arm.com> To: Catalin Marinas <catalin.marinas@arm.com>, linux-arm-kernel@lists.infradead.org Cc: linux-mm@kvack.org, Anshuman Khandual <anshuman.khandual@arm.com>, Patrick Daly <pdaly@codeaurora.org>, Will Deacon <will@kernel.org>, Andrew Morton <akpm@linux-foundation.org>, David Hildenbrand <david@redhat.com> Subject: Re: [PATCH] arm64: mte: Map hotplugged memory as Normal Tagged Date: Tue, 9 Mar 2021 12:35:47 +0000 [thread overview] Message-ID: <12132bf8-860a-59d9-6ce9-2e59f5d90738@arm.com> (raw) In-Reply-To: <20210309122601.5543-1-catalin.marinas@arm.com> On 3/9/21 12:26 PM, Catalin Marinas wrote: > In a system supporting MTE, the linear map must allow reading/writing > allocation tags by setting the memory type as Normal Tagged. Currently, > this is only handled for memory present at boot. Hotplugged memory uses > Normal non-Tagged memory. > > Introduce pgprot_mhp() for hotplugged memory and use it in > add_memory_resource(). The arm64 code maps pgprot_mhp() to > pgprot_tagged(). > > Note that ZONE_DEVICE memory should not be mapped as Tagged and > therefore setting the memory type in arch_add_memory() is not feasible. > > Signed-off-by: Catalin Marinas <catalin.marinas@arm.com> > Fixes: 0178dc761368 ("arm64: mte: Use Normal Tagged attributes for the linear map") > Reported-by: Patrick Daly <pdaly@codeaurora.org> > Link: https://lore.kernel.org/r/1614745263-27827-1-git-send-email-pdaly@codeaurora.org > Cc: <stable@vger.kernel.org> # 5.10.x > Cc: Will Deacon <will@kernel.org> > Cc: Andrew Morton <akpm@linux-foundation.org> > Cc: Vincenzo Frascino <vincenzo.frascino@arm.com> > Cc: David Hildenbrand <david@redhat.com> Reviewed-by: Vincenzo Frascino <vincenzo.frascino@arm.com> > --- > > Patrick, could you please give this patch a try on your platform? Thanks. > > arch/arm64/include/asm/pgtable-prot.h | 1 - > arch/arm64/include/asm/pgtable.h | 3 +++ > arch/arm64/mm/mmu.c | 3 ++- > include/linux/pgtable.h | 4 ++++ > mm/memory_hotplug.c | 2 +- > 5 files changed, 10 insertions(+), 3 deletions(-) > > diff --git a/arch/arm64/include/asm/pgtable-prot.h b/arch/arm64/include/asm/pgtable-prot.h > index 046be789fbb4..9a65fb528110 100644 > --- a/arch/arm64/include/asm/pgtable-prot.h > +++ b/arch/arm64/include/asm/pgtable-prot.h > @@ -66,7 +66,6 @@ extern bool arm64_use_ng_mappings; > #define _PAGE_DEFAULT (_PROT_DEFAULT | PTE_ATTRINDX(MT_NORMAL)) > > #define PAGE_KERNEL __pgprot(PROT_NORMAL) > -#define PAGE_KERNEL_TAGGED __pgprot(PROT_NORMAL_TAGGED) > #define PAGE_KERNEL_RO __pgprot((PROT_NORMAL & ~PTE_WRITE) | PTE_RDONLY) > #define PAGE_KERNEL_ROX __pgprot((PROT_NORMAL & ~(PTE_WRITE | PTE_PXN)) | PTE_RDONLY) > #define PAGE_KERNEL_EXEC __pgprot(PROT_NORMAL & ~PTE_PXN) > diff --git a/arch/arm64/include/asm/pgtable.h b/arch/arm64/include/asm/pgtable.h > index e17b96d0e4b5..47027796c2f9 100644 > --- a/arch/arm64/include/asm/pgtable.h > +++ b/arch/arm64/include/asm/pgtable.h > @@ -486,6 +486,9 @@ static inline pmd_t pmd_mkdevmap(pmd_t pmd) > __pgprot_modify(prot, PTE_ATTRINDX_MASK, PTE_ATTRINDX(MT_NORMAL_NC) | PTE_PXN | PTE_UXN) > #define pgprot_device(prot) \ > __pgprot_modify(prot, PTE_ATTRINDX_MASK, PTE_ATTRINDX(MT_DEVICE_nGnRE) | PTE_PXN | PTE_UXN) > +#define pgprot_tagged(prot) \ > + __pgprot_modify(prot, PTE_ATTRINDX_MASK, PTE_ATTRINDX(MT_NORMAL_TAGGED)) > +#define pgprot_mhp pgprot_tagged > /* > * DMA allocations for non-coherent devices use what the Arm architecture calls > * "Normal non-cacheable" memory, which permits speculation, unaligned accesses > diff --git a/arch/arm64/mm/mmu.c b/arch/arm64/mm/mmu.c > index 3802cfbdd20d..9c8aa1b44cd5 100644 > --- a/arch/arm64/mm/mmu.c > +++ b/arch/arm64/mm/mmu.c > @@ -512,7 +512,8 @@ static void __init map_mem(pgd_t *pgdp) > * if MTE is present. Otherwise, it has the same attributes as > * PAGE_KERNEL. > */ > - __map_memblock(pgdp, start, end, PAGE_KERNEL_TAGGED, flags); > + __map_memblock(pgdp, start, end, pgprot_tagged(PAGE_KERNEL), > + flags); > } > > /* > diff --git a/include/linux/pgtable.h b/include/linux/pgtable.h > index cdfc4e9f253e..5e772392a379 100644 > --- a/include/linux/pgtable.h > +++ b/include/linux/pgtable.h > @@ -904,6 +904,10 @@ static inline void ptep_modify_prot_commit(struct vm_area_struct *vma, > #define pgprot_device pgprot_noncached > #endif > > +#ifndef pgprot_mhp > +#define pgprot_mhp(prot) (prot) > +#endif > + > #ifdef CONFIG_MMU > #ifndef pgprot_modify > #define pgprot_modify pgprot_modify > diff --git a/mm/memory_hotplug.c b/mm/memory_hotplug.c > index 5ba51a8bdaeb..0cdbbfbc5757 100644 > --- a/mm/memory_hotplug.c > +++ b/mm/memory_hotplug.c > @@ -1072,7 +1072,7 @@ static int online_memory_block(struct memory_block *mem, void *arg) > */ > int __ref add_memory_resource(int nid, struct resource *res, mhp_t mhp_flags) > { > - struct mhp_params params = { .pgprot = PAGE_KERNEL }; > + struct mhp_params params = { .pgprot = pgprot_mhp(PAGE_KERNEL) }; > u64 start, size; > bool new_node = false; > int ret; > -- Regards, Vincenzo _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
next prev parent reply other threads:[~2021-03-09 12:31 UTC|newest] Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top 2021-03-09 12:26 [PATCH] arm64: mte: Map hotplugged memory as Normal Tagged Catalin Marinas 2021-03-10 19:24 ` Patrick Daly 2021-03-09 12:26 ` Catalin Marinas 2021-03-09 12:28 ` David Hildenbrand 2021-03-09 12:28 ` David Hildenbrand 2021-03-09 12:35 ` Vincenzo Frascino [this message] 2021-03-09 12:35 ` Vincenzo Frascino 2021-03-10 6:16 ` Patrick Daly 2021-03-10 7:05 ` Anshuman Khandual 2021-03-10 7:05 ` Anshuman Khandual 2021-03-10 11:39 ` Will Deacon 2021-03-10 11:39 ` Will Deacon
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=12132bf8-860a-59d9-6ce9-2e59f5d90738@arm.com \ --to=vincenzo.frascino@arm.com \ --cc=akpm@linux-foundation.org \ --cc=anshuman.khandual@arm.com \ --cc=catalin.marinas@arm.com \ --cc=david@redhat.com \ --cc=linux-arm-kernel@lists.infradead.org \ --cc=linux-mm@kvack.org \ --cc=pdaly@codeaurora.org \ --cc=will@kernel.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.