* [PATCH v3] arm64/mm: add fallback option to allocate virtually contiguous memory @ 2020-10-15 0:51 Sudarshan Rajagopalan 2020-10-15 0:51 ` Sudarshan Rajagopalan ` (2 more replies) 0 siblings, 3 replies; 17+ messages in thread From: Sudarshan Rajagopalan @ 2020-10-15 0:51 UTC (permalink / raw) To: linux-arm-kernel, linux-kernel; +Cc: Sudarshan Rajagopalan V1: The initial patch used the approach to abort at the first instance of PMD_SIZE allocation failure, unmaps all previously mapped sections using vmemmap_free and maps the entire request with vmemmap_populate_basepages to allocate virtually contiguous memory. https://lkml.org/lkml/2020/9/10/66 V2: Allocates virtually contiguous memory only for sections that failed PMD_SIZE allocation, and continous to allocate physically contiguous memory for other sections. https://lkml.org/lkml/2020/9/30/1489 V3: Addressed trivial review comments. Pass in altmap to vmemmap_populate_basepages. Sudarshan Rajagopalan (1): arm64/mm: add fallback option to allocate virtually contiguous memory arch/arm64/mm/mmu.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) -- Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, a Linux Foundation Collaborative Project ^ permalink raw reply [flat|nested] 17+ messages in thread
* [PATCH v3] arm64/mm: add fallback option to allocate virtually contiguous memory 2020-10-15 0:51 [PATCH v3] arm64/mm: add fallback option to allocate virtually contiguous memory Sudarshan Rajagopalan @ 2020-10-15 0:51 ` Sudarshan Rajagopalan 2020-10-15 8:36 ` Will Deacon ` (3 more replies) 2020-10-16 18:56 ` Sudarshan Rajagopalan 2020-11-17 18:33 ` Catalin Marinas 2 siblings, 4 replies; 17+ messages in thread From: Sudarshan Rajagopalan @ 2020-10-15 0:51 UTC (permalink / raw) To: linux-arm-kernel, linux-kernel Cc: Sudarshan Rajagopalan, Gavin Shan, Anshuman Khandual, Catalin Marinas, Will Deacon, Mark Rutland, Logan Gunthorpe, David Hildenbrand, Andrew Morton, Steven Price When section mappings are enabled, we allocate vmemmap pages from physically continuous memory of size PMD_SIZE using vmemmap_alloc_block_buf(). Section mappings are good to reduce TLB pressure. But when system is highly fragmented and memory blocks are being hot-added at runtime, its possible that such physically continuous memory allocations can fail. Rather than failing the memory hot-add procedure, add a fallback option to allocate vmemmap pages from discontinuous pages using vmemmap_populate_basepages(). Signed-off-by: Sudarshan Rajagopalan <sudaraja@codeaurora.org> Reviewed-by: Gavin Shan <gshan@redhat.com> Reviewed-by: Anshuman Khandual <anshuman.khandual@arm.com> Cc: Catalin Marinas <catalin.marinas@arm.com> Cc: Will Deacon <will@kernel.org> Cc: Anshuman Khandual <anshuman.khandual@arm.com> Cc: Mark Rutland <mark.rutland@arm.com> Cc: Logan Gunthorpe <logang@deltatee.com> Cc: David Hildenbrand <david@redhat.com> Cc: Andrew Morton <akpm@linux-foundation.org> Cc: Steven Price <steven.price@arm.com> --- arch/arm64/mm/mmu.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/arch/arm64/mm/mmu.c b/arch/arm64/mm/mmu.c index 75df62fea1b6..44486fd0e883 100644 --- a/arch/arm64/mm/mmu.c +++ b/arch/arm64/mm/mmu.c @@ -1121,8 +1121,11 @@ int __meminit vmemmap_populate(unsigned long start, unsigned long end, int node, void *p = NULL; p = vmemmap_alloc_block_buf(PMD_SIZE, node, altmap); - if (!p) - return -ENOMEM; + if (!p) { + if (vmemmap_populate_basepages(addr, next, node, altmap)) + return -ENOMEM; + continue; + } pmd_set_huge(pmdp, __pa(p), __pgprot(PROT_SECT_NORMAL)); } else -- Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, a Linux Foundation Collaborative Project ^ permalink raw reply related [flat|nested] 17+ messages in thread
* Re: [PATCH v3] arm64/mm: add fallback option to allocate virtually contiguous memory 2020-10-15 0:51 ` Sudarshan Rajagopalan @ 2020-10-15 8:36 ` Will Deacon 2020-10-16 18:49 ` Sudarshan Rajagopalan 2020-10-16 18:56 ` [PATCH v4] " Sudarshan Rajagopalan ` (2 subsequent siblings) 3 siblings, 1 reply; 17+ messages in thread From: Will Deacon @ 2020-10-15 8:36 UTC (permalink / raw) To: Sudarshan Rajagopalan Cc: linux-arm-kernel, linux-kernel, Gavin Shan, Anshuman Khandual, Catalin Marinas, Mark Rutland, Logan Gunthorpe, David Hildenbrand, Andrew Morton, Steven Price On Wed, Oct 14, 2020 at 05:51:23PM -0700, Sudarshan Rajagopalan wrote: > When section mappings are enabled, we allocate vmemmap pages from > physically continuous memory of size PMD_SIZE using > vmemmap_alloc_block_buf(). Section mappings are good to reduce TLB > pressure. But when system is highly fragmented and memory blocks are > being hot-added at runtime, its possible that such physically continuous > memory allocations can fail. Rather than failing the memory hot-add > procedure, add a fallback option to allocate vmemmap pages from > discontinuous pages using vmemmap_populate_basepages(). > > Signed-off-by: Sudarshan Rajagopalan <sudaraja@codeaurora.org> > Reviewed-by: Gavin Shan <gshan@redhat.com> > Reviewed-by: Anshuman Khandual <anshuman.khandual@arm.com> > Cc: Catalin Marinas <catalin.marinas@arm.com> > Cc: Will Deacon <will@kernel.org> > Cc: Anshuman Khandual <anshuman.khandual@arm.com> > Cc: Mark Rutland <mark.rutland@arm.com> > Cc: Logan Gunthorpe <logang@deltatee.com> > Cc: David Hildenbrand <david@redhat.com> > Cc: Andrew Morton <akpm@linux-foundation.org> > Cc: Steven Price <steven.price@arm.com> > --- > arch/arm64/mm/mmu.c | 7 +++++-- > 1 file changed, 5 insertions(+), 2 deletions(-) Please can you fix the subject? I have three copies of "PATCH v3" from different days in my inbox. I know it sounds trivial, but getting these little things right really helps with review, especially when it's sitting amongst a sea of other patches. Thanks, Will ^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [PATCH v3] arm64/mm: add fallback option to allocate virtually contiguous memory 2020-10-15 8:36 ` Will Deacon @ 2020-10-16 18:49 ` Sudarshan Rajagopalan 0 siblings, 0 replies; 17+ messages in thread From: Sudarshan Rajagopalan @ 2020-10-16 18:49 UTC (permalink / raw) To: Will Deacon Cc: linux-arm-kernel, linux-kernel, Gavin Shan, Anshuman Khandual, Catalin Marinas, Mark Rutland, Logan Gunthorpe, David Hildenbrand, Andrew Morton, Steven Price On 2020-10-15 01:36, Will Deacon wrote: > On Wed, Oct 14, 2020 at 05:51:23PM -0700, Sudarshan Rajagopalan wrote: >> When section mappings are enabled, we allocate vmemmap pages from >> physically continuous memory of size PMD_SIZE using >> vmemmap_alloc_block_buf(). Section mappings are good to reduce TLB >> pressure. But when system is highly fragmented and memory blocks are >> being hot-added at runtime, its possible that such physically >> continuous >> memory allocations can fail. Rather than failing the memory hot-add >> procedure, add a fallback option to allocate vmemmap pages from >> discontinuous pages using vmemmap_populate_basepages(). >> >> Signed-off-by: Sudarshan Rajagopalan <sudaraja@codeaurora.org> >> Reviewed-by: Gavin Shan <gshan@redhat.com> >> Reviewed-by: Anshuman Khandual <anshuman.khandual@arm.com> >> Cc: Catalin Marinas <catalin.marinas@arm.com> >> Cc: Will Deacon <will@kernel.org> >> Cc: Anshuman Khandual <anshuman.khandual@arm.com> >> Cc: Mark Rutland <mark.rutland@arm.com> >> Cc: Logan Gunthorpe <logang@deltatee.com> >> Cc: David Hildenbrand <david@redhat.com> >> Cc: Andrew Morton <akpm@linux-foundation.org> >> Cc: Steven Price <steven.price@arm.com> >> --- >> arch/arm64/mm/mmu.c | 7 +++++-- >> 1 file changed, 5 insertions(+), 2 deletions(-) > > Please can you fix the subject? I have three copies of "PATCH v3" from > different days in my inbox. I know it sounds trivial, but getting these > little things right really helps with review, especially when it's > sitting > amongst a sea of other patches. Yes sure, sorry about that - will change it to "PATCH v4" to make it stand out from other patches. > > Thanks, > > Will Sudarshan -- Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, a Linux Foundation Collaborative Project ^ permalink raw reply [flat|nested] 17+ messages in thread
* [PATCH v4] arm64/mm: add fallback option to allocate virtually contiguous memory 2020-10-15 0:51 ` Sudarshan Rajagopalan 2020-10-15 8:36 ` Will Deacon @ 2020-10-16 18:56 ` Sudarshan Rajagopalan 2020-11-05 0:03 ` Sudarshan Rajagopalan 2020-11-06 13:43 ` Will Deacon 3 siblings, 0 replies; 17+ messages in thread From: Sudarshan Rajagopalan @ 2020-10-16 18:56 UTC (permalink / raw) To: linux-arm-kernel, linux-kernel Cc: Sudarshan Rajagopalan, Gavin Shan, Anshuman Khandual, Catalin Marinas, Will Deacon, Mark Rutland, Logan Gunthorpe, David Hildenbrand, Andrew Morton, Steven Price When section mappings are enabled, we allocate vmemmap pages from physically continuous memory of size PMD_SIZE using vmemmap_alloc_block_buf(). Section mappings are good to reduce TLB pressure. But when system is highly fragmented and memory blocks are being hot-added at runtime, its possible that such physically continuous memory allocations can fail. Rather than failing the memory hot-add procedure, add a fallback option to allocate vmemmap pages from discontinuous pages using vmemmap_populate_basepages(). Signed-off-by: Sudarshan Rajagopalan <sudaraja@codeaurora.org> Reviewed-by: Gavin Shan <gshan@redhat.com> Reviewed-by: Anshuman Khandual <anshuman.khandual@arm.com> Cc: Catalin Marinas <catalin.marinas@arm.com> Cc: Will Deacon <will@kernel.org> Cc: Anshuman Khandual <anshuman.khandual@arm.com> Cc: Mark Rutland <mark.rutland@arm.com> Cc: Logan Gunthorpe <logang@deltatee.com> Cc: David Hildenbrand <david@redhat.com> Cc: Andrew Morton <akpm@linux-foundation.org> Cc: Steven Price <steven.price@arm.com> --- arch/arm64/mm/mmu.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/arch/arm64/mm/mmu.c b/arch/arm64/mm/mmu.c index 75df62fea1b6..44486fd0e883 100644 --- a/arch/arm64/mm/mmu.c +++ b/arch/arm64/mm/mmu.c @@ -1121,8 +1121,11 @@ int __meminit vmemmap_populate(unsigned long start, unsigned long end, int node, void *p = NULL; p = vmemmap_alloc_block_buf(PMD_SIZE, node, altmap); - if (!p) - return -ENOMEM; + if (!p) { + if (vmemmap_populate_basepages(addr, next, node, altmap)) + return -ENOMEM; + continue; + } pmd_set_huge(pmdp, __pa(p), __pgprot(PROT_SECT_NORMAL)); } else -- Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, a Linux Foundation Collaborative Project ^ permalink raw reply related [flat|nested] 17+ messages in thread
* Re: [PATCH v4] arm64/mm: add fallback option to allocate virtually contiguous memory 2020-10-15 0:51 ` Sudarshan Rajagopalan 2020-10-15 8:36 ` Will Deacon 2020-10-16 18:56 ` [PATCH v4] " Sudarshan Rajagopalan @ 2020-11-05 0:03 ` Sudarshan Rajagopalan 2020-11-06 14:38 ` Catalin Marinas 2020-11-06 13:43 ` Will Deacon 3 siblings, 1 reply; 17+ messages in thread From: Sudarshan Rajagopalan @ 2020-11-05 0:03 UTC (permalink / raw) To: Will Deacon, Catalin Marinas, linux-arm-kernel, linux-kernel Cc: Gavin Shan, Anshuman Khandual, Mark Rutland, Logan Gunthorpe, David Hildenbrand, Andrew Morton, Steven Price On 2020-10-16 11:56, Sudarshan Rajagopalan wrote: Hello Will, Catalin, Did you have a chance to review this patch? It is reviewed by others and haven't seen any Nacks. This patch will be useful to have so that memory hotremove doesn't fail when such PMD_SIZE pages aren't available.. which is usually the case in low RAM devices. > When section mappings are enabled, we allocate vmemmap pages from > physically continuous memory of size PMD_SIZE using > vmemmap_alloc_block_buf(). Section mappings are good to reduce TLB > pressure. But when system is highly fragmented and memory blocks are > being hot-added at runtime, its possible that such physically > continuous > memory allocations can fail. Rather than failing the memory hot-add > procedure, add a fallback option to allocate vmemmap pages from > discontinuous pages using vmemmap_populate_basepages(). > > Signed-off-by: Sudarshan Rajagopalan <sudaraja@codeaurora.org> > Reviewed-by: Gavin Shan <gshan@redhat.com> > Reviewed-by: Anshuman Khandual <anshuman.khandual@arm.com> > Cc: Catalin Marinas <catalin.marinas@arm.com> > Cc: Will Deacon <will@kernel.org> > Cc: Anshuman Khandual <anshuman.khandual@arm.com> > Cc: Mark Rutland <mark.rutland@arm.com> > Cc: Logan Gunthorpe <logang@deltatee.com> > Cc: David Hildenbrand <david@redhat.com> > Cc: Andrew Morton <akpm@linux-foundation.org> > Cc: Steven Price <steven.price@arm.com> > --- > arch/arm64/mm/mmu.c | 7 +++++-- > 1 file changed, 5 insertions(+), 2 deletions(-) > > diff --git a/arch/arm64/mm/mmu.c b/arch/arm64/mm/mmu.c > index 75df62fea1b6..44486fd0e883 100644 > --- a/arch/arm64/mm/mmu.c > +++ b/arch/arm64/mm/mmu.c > @@ -1121,8 +1121,11 @@ int __meminit vmemmap_populate(unsigned long > start, unsigned long end, int node, > void *p = NULL; > > p = vmemmap_alloc_block_buf(PMD_SIZE, node, altmap); > - if (!p) > - return -ENOMEM; > + if (!p) { > + if (vmemmap_populate_basepages(addr, next, node, altmap)) > + return -ENOMEM; > + continue; > + } > > pmd_set_huge(pmdp, __pa(p), __pgprot(PROT_SECT_NORMAL)); > } else -- Sudarshan -- Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, a Linux Foundation Collaborative Project ^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [PATCH v4] arm64/mm: add fallback option to allocate virtually contiguous memory 2020-11-05 0:03 ` Sudarshan Rajagopalan @ 2020-11-06 14:38 ` Catalin Marinas 0 siblings, 0 replies; 17+ messages in thread From: Catalin Marinas @ 2020-11-06 14:38 UTC (permalink / raw) To: Sudarshan Rajagopalan Cc: Will Deacon, linux-arm-kernel, linux-kernel, Gavin Shan, Anshuman Khandual, Mark Rutland, Logan Gunthorpe, David Hildenbrand, Andrew Morton, Steven Price On Wed, Nov 04, 2020 at 04:03:36PM -0800, Sudarshan Rajagopalan wrote: > Did you have a chance to review this patch? It is reviewed by others and > haven't seen any Nacks. This patch will be useful to have so that memory > hotremove doesn't fail when such PMD_SIZE pages aren't available.. which is > usually the case in low RAM devices. Can you please post it again please with Will's ack? You posted a v4 which I think had the same message-id as v3. Mutt flagged it as duplicate and I deleted it. Just to be sure (I'll queue it when we get to -rc3). Thanks. -- Catalin ^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [PATCH v4] arm64/mm: add fallback option to allocate virtually contiguous memory 2020-10-15 0:51 ` Sudarshan Rajagopalan ` (2 preceding siblings ...) 2020-11-05 0:03 ` Sudarshan Rajagopalan @ 2020-11-06 13:43 ` Will Deacon 3 siblings, 0 replies; 17+ messages in thread From: Will Deacon @ 2020-11-06 13:43 UTC (permalink / raw) To: Sudarshan Rajagopalan Cc: linux-arm-kernel, linux-kernel, Gavin Shan, Anshuman Khandual, Catalin Marinas, Mark Rutland, Logan Gunthorpe, David Hildenbrand, Andrew Morton, Steven Price On Fri, Oct 16, 2020 at 11:56:56AM -0700, Sudarshan Rajagopalan wrote: > When section mappings are enabled, we allocate vmemmap pages from > physically continuous memory of size PMD_SIZE using > vmemmap_alloc_block_buf(). Section mappings are good to reduce TLB > pressure. But when system is highly fragmented and memory blocks are > being hot-added at runtime, its possible that such physically continuous > memory allocations can fail. Rather than failing the memory hot-add > procedure, add a fallback option to allocate vmemmap pages from > discontinuous pages using vmemmap_populate_basepages(). > > Signed-off-by: Sudarshan Rajagopalan <sudaraja@codeaurora.org> > Reviewed-by: Gavin Shan <gshan@redhat.com> > Reviewed-by: Anshuman Khandual <anshuman.khandual@arm.com> > Cc: Catalin Marinas <catalin.marinas@arm.com> > Cc: Will Deacon <will@kernel.org> > Cc: Anshuman Khandual <anshuman.khandual@arm.com> > Cc: Mark Rutland <mark.rutland@arm.com> > Cc: Logan Gunthorpe <logang@deltatee.com> > Cc: David Hildenbrand <david@redhat.com> > Cc: Andrew Morton <akpm@linux-foundation.org> > Cc: Steven Price <steven.price@arm.com> > --- > arch/arm64/mm/mmu.c | 7 +++++-- > 1 file changed, 5 insertions(+), 2 deletions(-) > > diff --git a/arch/arm64/mm/mmu.c b/arch/arm64/mm/mmu.c > index 75df62fea1b6..44486fd0e883 100644 > --- a/arch/arm64/mm/mmu.c > +++ b/arch/arm64/mm/mmu.c > @@ -1121,8 +1121,11 @@ int __meminit vmemmap_populate(unsigned long start, unsigned long end, int node, > void *p = NULL; > > p = vmemmap_alloc_block_buf(PMD_SIZE, node, altmap); > - if (!p) > - return -ENOMEM; > + if (!p) { > + if (vmemmap_populate_basepages(addr, next, node, altmap)) > + return -ENOMEM; > + continue; > + } Looks fine to me: Acked-by: Will Deacon <will@kernel.org> Will ^ permalink raw reply [flat|nested] 17+ messages in thread
* [PATCH v4] arm64/mm: add fallback option to allocate virtually contiguous memory 2020-10-15 0:51 [PATCH v3] arm64/mm: add fallback option to allocate virtually contiguous memory Sudarshan Rajagopalan 2020-10-15 0:51 ` Sudarshan Rajagopalan @ 2020-10-16 18:56 ` Sudarshan Rajagopalan 2020-11-17 18:33 ` Catalin Marinas 2 siblings, 0 replies; 17+ messages in thread From: Sudarshan Rajagopalan @ 2020-10-16 18:56 UTC (permalink / raw) To: linux-arm-kernel, linux-kernel; +Cc: Sudarshan Rajagopalan V1: The initial patch used the approach to abort at the first instance of PMD_SIZE allocation failure, unmaps all previously mapped sections using vmemmap_free and maps the entire request with vmemmap_populate_basepages to allocate virtually contiguous memory. https://lkml.org/lkml/2020/9/10/66 V2: Allocates virtually contiguous memory only for sections that failed PMD_SIZE allocation, and continous to allocate physically contiguous memory for other sections. https://lkml.org/lkml/2020/9/30/1489 V3: Addressed trivial review comments. Pass in altmap to vmemmap_populate_basepages. https://lkml.org/lkml/2020/10/12/1681 V4: Fixes checkpatch warning. Sudarshan Rajagopalan (1): arm64/mm: add fallback option to allocate virtually contiguous memory arch/arm64/mm/mmu.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) -- Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, a Linux Foundation Collaborative Project ^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [PATCH v4] arm64/mm: add fallback option to allocate virtually contiguous memory 2020-10-15 0:51 [PATCH v3] arm64/mm: add fallback option to allocate virtually contiguous memory Sudarshan Rajagopalan 2020-10-15 0:51 ` Sudarshan Rajagopalan 2020-10-16 18:56 ` Sudarshan Rajagopalan @ 2020-11-17 18:33 ` Catalin Marinas 2 siblings, 0 replies; 17+ messages in thread From: Catalin Marinas @ 2020-11-17 18:33 UTC (permalink / raw) To: linux-arm-kernel, Sudarshan Rajagopalan, linux-kernel; +Cc: Will Deacon On Fri, 16 Oct 2020 11:56:55 -0700, Sudarshan Rajagopalan wrote: > V1: The initial patch used the approach to abort at the first instance of PMD_SIZE > allocation failure, unmaps all previously mapped sections using vmemmap_free > and maps the entire request with vmemmap_populate_basepages to allocate > virtually contiguous memory. > https://lkml.org/lkml/2020/9/10/66 > > V2: Allocates virtually contiguous memory only for sections that failed > PMD_SIZE allocation, and continous to allocate physically contiguous > memory for other sections. > https://lkml.org/lkml/2020/9/30/1489 > > [...] Applied to arm64 (for-next/misc), thanks! [1/1] arm64/mm: add fallback option to allocate virtually contiguous memory https://git.kernel.org/arm64/c/9f84f39f5515 (figured out which v3 and v4 have the same message-id and presumably the same patch) -- Catalin ^ permalink raw reply [flat|nested] 17+ messages in thread
* [PATCH v3] arm64/mm: add fallback option to allocate virtually contiguous memory @ 2020-10-12 23:05 Sudarshan Rajagopalan 2020-10-12 23:05 ` Sudarshan Rajagopalan 0 siblings, 1 reply; 17+ messages in thread From: Sudarshan Rajagopalan @ 2020-10-12 23:05 UTC (permalink / raw) To: linux-arm-kernel, linux-kernel; +Cc: Sudarshan Rajagopalan V1: The initial patch used the approach to abort at the first instance of PMD_SIZE allocation failure, unmaps all previously mapped sections using vmemmap_free and maps the entire request with vmemmap_populate_basepages to allocate virtually contiguous memory. https://lkml.org/lkml/2020/9/10/66 V2: Allocates virtually contiguous memory only for sections that failed PMD_SIZE allocation, and continous to allocate physically contiguous memory for other sections. https://lkml.org/lkml/2020/9/30/1489 V3: Addressed trivial review comments. Pass in altmap to vmemmap_populate_basepages. Sudarshan Rajagopalan (1): arm64/mm: add fallback option to allocate virtually contiguous memory arch/arm64/mm/mmu.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) -- Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, a Linux Foundation Collaborative Project ^ permalink raw reply [flat|nested] 17+ messages in thread
* [PATCH v3] arm64/mm: add fallback option to allocate virtually contiguous memory 2020-10-12 23:05 [PATCH v3] " Sudarshan Rajagopalan @ 2020-10-12 23:05 ` Sudarshan Rajagopalan 2020-10-13 11:38 ` Anshuman Khandual 0 siblings, 1 reply; 17+ messages in thread From: Sudarshan Rajagopalan @ 2020-10-12 23:05 UTC (permalink / raw) To: linux-arm-kernel, linux-kernel Cc: Sudarshan Rajagopalan, Gavin Shan, Catalin Marinas, Will Deacon, Anshuman Khandual, Mark Rutland, Logan Gunthorpe, David Hildenbrand, Andrew Morton, Steven Price When section mappings are enabled, we allocate vmemmap pages from physically continuous memory of size PMD_SIZE using vmemmap_alloc_block_buf(). Section mappings are good to reduce TLB pressure. But when system is highly fragmented and memory blocks are being hot-added at runtime, its possible that such physically continuous memory allocations can fail. Rather than failing the memory hot-add procedure, add a fallback option to allocate vmemmap pages from discontinuous pages using vmemmap_populate_basepages(). Signed-off-by: Sudarshan Rajagopalan <sudaraja@codeaurora.org> Reviewed-by: Gavin Shan <gshan@redhat.com> Cc: Catalin Marinas <catalin.marinas@arm.com> Cc: Will Deacon <will@kernel.org> Cc: Anshuman Khandual <anshuman.khandual@arm.com> Cc: Mark Rutland <mark.rutland@arm.com> Cc: Logan Gunthorpe <logang@deltatee.com> Cc: David Hildenbrand <david@redhat.com> Cc: Andrew Morton <akpm@linux-foundation.org> Cc: Steven Price <steven.price@arm.com> --- arch/arm64/mm/mmu.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/arch/arm64/mm/mmu.c b/arch/arm64/mm/mmu.c index 75df62fea1b6..44486fd0e883 100644 --- a/arch/arm64/mm/mmu.c +++ b/arch/arm64/mm/mmu.c @@ -1121,8 +1121,11 @@ int __meminit vmemmap_populate(unsigned long start, unsigned long end, int node, void *p = NULL; p = vmemmap_alloc_block_buf(PMD_SIZE, node, altmap); - if (!p) - return -ENOMEM; + if (!p) { + if (vmemmap_populate_basepages(addr, next, node, altmap)) + return -ENOMEM; + continue; + } pmd_set_huge(pmdp, __pa(p), __pgprot(PROT_SECT_NORMAL)); } else -- Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, a Linux Foundation Collaborative Project ^ permalink raw reply related [flat|nested] 17+ messages in thread
* Re: [PATCH v3] arm64/mm: add fallback option to allocate virtually contiguous memory 2020-10-12 23:05 ` Sudarshan Rajagopalan @ 2020-10-13 11:38 ` Anshuman Khandual 2020-10-15 0:54 ` Sudarshan Rajagopalan 0 siblings, 1 reply; 17+ messages in thread From: Anshuman Khandual @ 2020-10-13 11:38 UTC (permalink / raw) To: Sudarshan Rajagopalan, linux-arm-kernel, linux-kernel Cc: Gavin Shan, Catalin Marinas, Will Deacon, Mark Rutland, Logan Gunthorpe, David Hildenbrand, Andrew Morton, Steven Price On 10/13/2020 04:35 AM, Sudarshan Rajagopalan wrote: > When section mappings are enabled, we allocate vmemmap pages from physically > continuous memory of size PMD_SIZE using vmemmap_alloc_block_buf(). Section > mappings are good to reduce TLB pressure. But when system is highly fragmented > and memory blocks are being hot-added at runtime, its possible that such > physically continuous memory allocations can fail. Rather than failing the > memory hot-add procedure, add a fallback option to allocate vmemmap pages from > discontinuous pages using vmemmap_populate_basepages(). There is a checkpatch warning here, which could be fixed while merging ? WARNING: Possible unwrapped commit description (prefer a maximum 75 chars per line) #7: When section mappings are enabled, we allocate vmemmap pages from physically total: 0 errors, 1 warnings, 13 lines checked > > Signed-off-by: Sudarshan Rajagopalan <sudaraja@codeaurora.org> > Reviewed-by: Gavin Shan <gshan@redhat.com> > Cc: Catalin Marinas <catalin.marinas@arm.com> > Cc: Will Deacon <will@kernel.org> > Cc: Anshuman Khandual <anshuman.khandual@arm.com> > Cc: Mark Rutland <mark.rutland@arm.com> > Cc: Logan Gunthorpe <logang@deltatee.com> > Cc: David Hildenbrand <david@redhat.com> > Cc: Andrew Morton <akpm@linux-foundation.org> > Cc: Steven Price <steven.price@arm.com> Nonetheless, this looks fine. Did not see any particular problem while creating an experimental vmemmap with interleaving section and base page mapping. Reviewed-by: Anshuman Khandual <anshuman.khandual@arm.com> > --- > arch/arm64/mm/mmu.c | 7 +++++-- > 1 file changed, 5 insertions(+), 2 deletions(-) > > diff --git a/arch/arm64/mm/mmu.c b/arch/arm64/mm/mmu.c > index 75df62fea1b6..44486fd0e883 100644 > --- a/arch/arm64/mm/mmu.c > +++ b/arch/arm64/mm/mmu.c > @@ -1121,8 +1121,11 @@ int __meminit vmemmap_populate(unsigned long start, unsigned long end, int node, > void *p = NULL; > > p = vmemmap_alloc_block_buf(PMD_SIZE, node, altmap); > - if (!p) > - return -ENOMEM; > + if (!p) { > + if (vmemmap_populate_basepages(addr, next, node, altmap)) > + return -ENOMEM; > + continue; > + } > > pmd_set_huge(pmdp, __pa(p), __pgprot(PROT_SECT_NORMAL)); > } else > ^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [PATCH v3] arm64/mm: add fallback option to allocate virtually contiguous memory 2020-10-13 11:38 ` Anshuman Khandual @ 2020-10-15 0:54 ` Sudarshan Rajagopalan 0 siblings, 0 replies; 17+ messages in thread From: Sudarshan Rajagopalan @ 2020-10-15 0:54 UTC (permalink / raw) To: Anshuman Khandual Cc: linux-arm-kernel, linux-kernel, Gavin Shan, Catalin Marinas, Will Deacon, Mark Rutland, Logan Gunthorpe, David Hildenbrand, Andrew Morton, Steven Price On 2020-10-13 04:38, Anshuman Khandual wrote: > On 10/13/2020 04:35 AM, Sudarshan Rajagopalan wrote: >> When section mappings are enabled, we allocate vmemmap pages from >> physically >> continuous memory of size PMD_SIZE using vmemmap_alloc_block_buf(). >> Section >> mappings are good to reduce TLB pressure. But when system is highly >> fragmented >> and memory blocks are being hot-added at runtime, its possible that >> such >> physically continuous memory allocations can fail. Rather than failing >> the >> memory hot-add procedure, add a fallback option to allocate vmemmap >> pages from >> discontinuous pages using vmemmap_populate_basepages(). > > There is a checkpatch warning here, which could be fixed while merging > ? > > WARNING: Possible unwrapped commit description (prefer a maximum 75 > chars per line) > #7: > When section mappings are enabled, we allocate vmemmap pages from > physically > > total: 0 errors, 1 warnings, 13 lines checked > Thanks Anshuman for the review. I sent out an updated patch fixing the checkpatch warning. >> >> Signed-off-by: Sudarshan Rajagopalan <sudaraja@codeaurora.org> >> Reviewed-by: Gavin Shan <gshan@redhat.com> >> Cc: Catalin Marinas <catalin.marinas@arm.com> >> Cc: Will Deacon <will@kernel.org> >> Cc: Anshuman Khandual <anshuman.khandual@arm.com> >> Cc: Mark Rutland <mark.rutland@arm.com> >> Cc: Logan Gunthorpe <logang@deltatee.com> >> Cc: David Hildenbrand <david@redhat.com> >> Cc: Andrew Morton <akpm@linux-foundation.org> >> Cc: Steven Price <steven.price@arm.com> > > Nonetheless, this looks fine. Did not see any particular problem > while creating an experimental vmemmap with interleaving section > and base page mapping. > > Reviewed-by: Anshuman Khandual <anshuman.khandual@arm.com> > >> --- >> arch/arm64/mm/mmu.c | 7 +++++-- >> 1 file changed, 5 insertions(+), 2 deletions(-) >> >> diff --git a/arch/arm64/mm/mmu.c b/arch/arm64/mm/mmu.c >> index 75df62fea1b6..44486fd0e883 100644 >> --- a/arch/arm64/mm/mmu.c >> +++ b/arch/arm64/mm/mmu.c >> @@ -1121,8 +1121,11 @@ int __meminit vmemmap_populate(unsigned long >> start, unsigned long end, int node, >> void *p = NULL; >> >> p = vmemmap_alloc_block_buf(PMD_SIZE, node, altmap); >> - if (!p) >> - return -ENOMEM; >> + if (!p) { >> + if (vmemmap_populate_basepages(addr, next, node, altmap)) >> + return -ENOMEM; >> + continue; >> + } >> >> pmd_set_huge(pmdp, __pa(p), __pgprot(PROT_SECT_NORMAL)); >> } else >> Sudarshan -- Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, a Linux Foundation Collaborative Project ^ permalink raw reply [flat|nested] 17+ messages in thread
* [PATCH v3] arm64/mm: add fallback option to allocate virtually @ 2020-10-01 20:16 Sudarshan Rajagopalan 2020-10-01 20:16 ` [PATCH v3] arm64/mm: add fallback option to allocate virtually contiguous memory Sudarshan Rajagopalan 0 siblings, 1 reply; 17+ messages in thread From: Sudarshan Rajagopalan @ 2020-10-01 20:16 UTC (permalink / raw) To: linux-arm-kernel, linux-kernel; +Cc: Sudarshan Rajagopalan V1: The initial patch used the approach to abort at the first instance of PMD_SIZE allocation failure, unmaps all previously mapped sections using vmemmap_free and maps the entire request with vmemmap_populate_basepages to allocate virtually contiguous memory. https://lkml.org/lkml/2020/9/10/66 V2: Allocates virtually contiguous memory only for sections that failed PMD_SIZE allocation, and continues to allocate physically contiguous memory for other sections. https://lkml.org/lkml/2020/9/30/1489 V3: Addresses Anshuman's comment to allow fallback to altmap base pages as well if and when required. Sudarshan Rajagopalan (1): arm64/mm: add fallback option to allocate virtually contiguous memory arch/arm64/mm/mmu.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) -- Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, a Linux Foundation Collaborative Project ^ permalink raw reply [flat|nested] 17+ messages in thread
* [PATCH v3] arm64/mm: add fallback option to allocate virtually contiguous memory 2020-10-01 20:16 [PATCH v3] arm64/mm: add fallback option to allocate virtually Sudarshan Rajagopalan @ 2020-10-01 20:16 ` Sudarshan Rajagopalan 2020-10-06 3:36 ` Anshuman Khandual 0 siblings, 1 reply; 17+ messages in thread From: Sudarshan Rajagopalan @ 2020-10-01 20:16 UTC (permalink / raw) To: linux-arm-kernel, linux-kernel Cc: Sudarshan Rajagopalan, Catalin Marinas, Will Deacon, Anshuman Khandual, Mark Rutland, Logan Gunthorpe, David Hildenbrand, Andrew Morton, Steven Price When section mappings are enabled, we allocate vmemmap pages from physically continuous memory of size PMD_SIZE using vmemmap_alloc_block_buf(). Section mappings are good to reduce TLB pressure. But when system is highly fragmented and memory blocks are being hot-added at runtime, its possible that such physically continuous memory allocations can fail. Rather than failing the memory hot-add procedure, add a fallback option to allocate vmemmap pages from discontinuous pages using vmemmap_populate_basepages(). Signed-off-by: Sudarshan Rajagopalan <sudaraja@codeaurora.org> Cc: Catalin Marinas <catalin.marinas@arm.com> Cc: Will Deacon <will@kernel.org> Cc: Anshuman Khandual <anshuman.khandual@arm.com> Cc: Mark Rutland <mark.rutland@arm.com> Cc: Logan Gunthorpe <logang@deltatee.com> Cc: David Hildenbrand <david@redhat.com> Cc: Andrew Morton <akpm@linux-foundation.org> Cc: Steven Price <steven.price@arm.com> --- arch/arm64/mm/mmu.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/arch/arm64/mm/mmu.c b/arch/arm64/mm/mmu.c index 75df62f..11f8639 100644 --- a/arch/arm64/mm/mmu.c +++ b/arch/arm64/mm/mmu.c @@ -1121,8 +1121,15 @@ int __meminit vmemmap_populate(unsigned long start, unsigned long end, int node, void *p = NULL; p = vmemmap_alloc_block_buf(PMD_SIZE, node, altmap); - if (!p) - return -ENOMEM; + if (!p) { + /* + * fallback allocating with virtually + * contiguous memory for this section + */ + if (vmemmap_populate_basepages(addr, next, node, NULL)) + return -ENOMEM; + continue; + } pmd_set_huge(pmdp, __pa(p), __pgprot(PROT_SECT_NORMAL)); } else -- Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, a Linux Foundation Collaborative Project ^ permalink raw reply related [flat|nested] 17+ messages in thread
* Re: [PATCH v3] arm64/mm: add fallback option to allocate virtually contiguous memory 2020-10-01 20:16 ` [PATCH v3] arm64/mm: add fallback option to allocate virtually contiguous memory Sudarshan Rajagopalan @ 2020-10-06 3:36 ` Anshuman Khandual 2020-10-12 2:54 ` Gavin Shan 0 siblings, 1 reply; 17+ messages in thread From: Anshuman Khandual @ 2020-10-06 3:36 UTC (permalink / raw) To: Sudarshan Rajagopalan, linux-arm-kernel, linux-kernel Cc: Catalin Marinas, Will Deacon, Mark Rutland, Logan Gunthorpe, David Hildenbrand, Andrew Morton, Steven Price On 10/02/2020 01:46 AM, Sudarshan Rajagopalan wrote: > When section mappings are enabled, we allocate vmemmap pages from physically > continuous memory of size PMD_SIZE using vmemmap_alloc_block_buf(). Section > mappings are good to reduce TLB pressure. But when system is highly fragmented > and memory blocks are being hot-added at runtime, its possible that such > physically continuous memory allocations can fail. Rather than failing the > memory hot-add procedure, add a fallback option to allocate vmemmap pages from > discontinuous pages using vmemmap_populate_basepages(). > > Signed-off-by: Sudarshan Rajagopalan <sudaraja@codeaurora.org> > Cc: Catalin Marinas <catalin.marinas@arm.com> > Cc: Will Deacon <will@kernel.org> > Cc: Anshuman Khandual <anshuman.khandual@arm.com> > Cc: Mark Rutland <mark.rutland@arm.com> > Cc: Logan Gunthorpe <logang@deltatee.com> > Cc: David Hildenbrand <david@redhat.com> > Cc: Andrew Morton <akpm@linux-foundation.org> > Cc: Steven Price <steven.price@arm.com> > --- > arch/arm64/mm/mmu.c | 11 +++++++++-- > 1 file changed, 9 insertions(+), 2 deletions(-) > > diff --git a/arch/arm64/mm/mmu.c b/arch/arm64/mm/mmu.c > index 75df62f..11f8639 100644 > --- a/arch/arm64/mm/mmu.c > +++ b/arch/arm64/mm/mmu.c > @@ -1121,8 +1121,15 @@ int __meminit vmemmap_populate(unsigned long start, unsigned long end, int node, > void *p = NULL; > > p = vmemmap_alloc_block_buf(PMD_SIZE, node, altmap); > - if (!p) > - return -ENOMEM; > + if (!p) { > + /* > + * fallback allocating with virtually > + * contiguous memory for this section > + */ Mapping is always virtually contiguous with or without huge pages. Please drop this comment here, as it's obvious. > + if (vmemmap_populate_basepages(addr, next, node, NULL)) > + return -ENOMEM; Please send in the 'altmap' instead of NULL for allocation from device memory if and when requested. ^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [PATCH v3] arm64/mm: add fallback option to allocate virtually contiguous memory 2020-10-06 3:36 ` Anshuman Khandual @ 2020-10-12 2:54 ` Gavin Shan 0 siblings, 0 replies; 17+ messages in thread From: Gavin Shan @ 2020-10-12 2:54 UTC (permalink / raw) To: Anshuman Khandual, Sudarshan Rajagopalan, linux-arm-kernel, linux-kernel Cc: Mark Rutland, Will Deacon, David Hildenbrand, Catalin Marinas, Steven Price, Andrew Morton, Logan Gunthorpe On 10/6/20 2:36 PM, Anshuman Khandual wrote: > On 10/02/2020 01:46 AM, Sudarshan Rajagopalan wrote: >> When section mappings are enabled, we allocate vmemmap pages from physically >> continuous memory of size PMD_SIZE using vmemmap_alloc_block_buf(). Section >> mappings are good to reduce TLB pressure. But when system is highly fragmented >> and memory blocks are being hot-added at runtime, its possible that such >> physically continuous memory allocations can fail. Rather than failing the >> memory hot-add procedure, add a fallback option to allocate vmemmap pages from >> discontinuous pages using vmemmap_populate_basepages(). >> >> Signed-off-by: Sudarshan Rajagopalan <sudaraja@codeaurora.org> >> Cc: Catalin Marinas <catalin.marinas@arm.com> >> Cc: Will Deacon <will@kernel.org> >> Cc: Anshuman Khandual <anshuman.khandual@arm.com> >> Cc: Mark Rutland <mark.rutland@arm.com> >> Cc: Logan Gunthorpe <logang@deltatee.com> >> Cc: David Hildenbrand <david@redhat.com> >> Cc: Andrew Morton <akpm@linux-foundation.org> >> Cc: Steven Price <steven.price@arm.com> >> --- >> arch/arm64/mm/mmu.c | 11 +++++++++-- >> 1 file changed, 9 insertions(+), 2 deletions(-) >> It looks good to me with Anshuman's comments fixed: Reviewed-by: Gavin Shan <gshan@redhat.com> >> diff --git a/arch/arm64/mm/mmu.c b/arch/arm64/mm/mmu.c >> index 75df62f..11f8639 100644 >> --- a/arch/arm64/mm/mmu.c >> +++ b/arch/arm64/mm/mmu.c >> @@ -1121,8 +1121,15 @@ int __meminit vmemmap_populate(unsigned long start, unsigned long end, int node, >> void *p = NULL; >> >> p = vmemmap_alloc_block_buf(PMD_SIZE, node, altmap); >> - if (!p) >> - return -ENOMEM; >> + if (!p) { >> + /* >> + * fallback allocating with virtually >> + * contiguous memory for this section >> + */ > > Mapping is always virtually contiguous with or without huge pages. > Please drop this comment here, as it's obvious. > >> + if (vmemmap_populate_basepages(addr, next, node, NULL)) >> + return -ENOMEM; > > Please send in the 'altmap' instead of NULL for allocation from > device memory if and when requested. > > _______________________________________________ > linux-arm-kernel mailing list > linux-arm-kernel@lists.infradead.org > http://lists.infradead.org/mailman/listinfo/linux-arm-kernel > ^ permalink raw reply [flat|nested] 17+ messages in thread
end of thread, other threads:[~2020-11-17 18:33 UTC | newest] Thread overview: 17+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2020-10-15 0:51 [PATCH v3] arm64/mm: add fallback option to allocate virtually contiguous memory Sudarshan Rajagopalan 2020-10-15 0:51 ` Sudarshan Rajagopalan 2020-10-15 8:36 ` Will Deacon 2020-10-16 18:49 ` Sudarshan Rajagopalan 2020-10-16 18:56 ` [PATCH v4] " Sudarshan Rajagopalan 2020-11-05 0:03 ` Sudarshan Rajagopalan 2020-11-06 14:38 ` Catalin Marinas 2020-11-06 13:43 ` Will Deacon 2020-10-16 18:56 ` Sudarshan Rajagopalan 2020-11-17 18:33 ` Catalin Marinas -- strict thread matches above, loose matches on Subject: below -- 2020-10-12 23:05 [PATCH v3] " Sudarshan Rajagopalan 2020-10-12 23:05 ` Sudarshan Rajagopalan 2020-10-13 11:38 ` Anshuman Khandual 2020-10-15 0:54 ` Sudarshan Rajagopalan 2020-10-01 20:16 [PATCH v3] arm64/mm: add fallback option to allocate virtually Sudarshan Rajagopalan 2020-10-01 20:16 ` [PATCH v3] arm64/mm: add fallback option to allocate virtually contiguous memory Sudarshan Rajagopalan 2020-10-06 3:36 ` Anshuman Khandual 2020-10-12 2:54 ` Gavin Shan
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).