Skip to contentSkip to conversation

arm64/mm: add fallback option to allocate virtually contiguous memory

PATCH Applied Sudarshan Rajagopalan 3 participants 8 messages Oct 15, 2020 – Nov 17, 2020 arm64

lore
Share & tools
lore
#0 lore raw

PATCH v3 1/1 arm64/mm: add fallback option to allocate virtually contiguous memory

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(-)
Signature · 2 lines
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum,
a Linux Foundation Collaborative Project
#1 lore raw

PATCH v3 1/1 arm64/mm: add fallback option to allocate virtually contiguous memory

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().

Cc Catalin Marinas <[email protected]>
Cc Will Deacon <[email protected]>
Cc Anshuman Khandual <[email protected]>
Cc Mark Rutland <[email protected]>
Cc Logan Gunthorpe <[email protected]>
Cc David Hildenbrand <[email protected]>
Cc Andrew Morton <[email protected]>
Cc Steven Price <[email protected]>
---
 arch/arm64/mm/mmu.c | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)
arch/arm64/mm/mmu.c +5 -2
index 75df62fea1b6..44486fd0e883 100644
@@ -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
Signature · 2 lines
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum,
a Linux Foundation Collaborative Project
maintainer
#2 lore raw
Quoted 20 lines · Sudarshan Rajagopalan

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().

Cc Catalin Marinas <[email protected]>
Cc Will Deacon <[email protected]>
Cc Anshuman Khandual <[email protected]>
Cc Mark Rutland <[email protected]>
Cc Logan Gunthorpe <[email protected]>
Cc David Hildenbrand <[email protected]>
Cc Andrew Morton <[email protected]>
Cc Steven Price <[email protected]>
Quoted 3 lines
---
 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

#3 lore raw
Quoted 25 lines · Will Deacon
Quoted 20 lines · Sudarshan Rajagopalan

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().

Cc Catalin Marinas <[email protected]>
Cc Will Deacon <[email protected]>
Cc Anshuman Khandual <[email protected]>
Cc Mark Rutland <[email protected]>
Cc Logan Gunthorpe <[email protected]>
Cc David Hildenbrand <[email protected]>
Cc Andrew Morton <[email protected]>
Cc Steven Price <[email protected]>
Quoted 3 lines
---
 arch/arm64/mm/mmu.c | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)
Quoted 4 lines

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.

Quoted 4 lines

Thanks,

Will

Sudarshan

--
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, a Linux Foundation Collaborative Project

#4 lore raw
In reply to Sudarshan Rajagopalan

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.

Quoted 43 lines

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().

Cc Catalin Marinas <[email protected]>
Cc Will Deacon <[email protected]>
Cc Anshuman Khandual <[email protected]>
Cc Mark Rutland <[email protected]>
Cc Logan Gunthorpe <[email protected]>
Cc David Hildenbrand <[email protected]>
Cc Andrew Morton <[email protected]>
Cc Steven Price <[email protected]>
---
 arch/arm64/mm/mmu.c | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)
arch/arm64/mm/mmu.c +5 -2
index 75df62fea1b6..44486fd0e883 100644
@@ -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

Signature · 4 lines
Sudarshan

--
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, a Linux Foundation Collaborative Project
maintainer
#5 lore raw
Quoted 4 lines · Sudarshan Rajagopalan

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.

Signature · 1 line
Catalin
maintainer Acked-by on v3 1/1
#6 lore raw
In reply to Sudarshan Rajagopalan
Quoted 29 lines · Sudarshan Rajagopalan

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().

Cc Catalin Marinas <[email protected]>
Cc Will Deacon <[email protected]>
Cc Anshuman Khandual <[email protected]>
Cc Mark Rutland <[email protected]>
Cc Logan Gunthorpe <[email protected]>
Cc David Hildenbrand <[email protected]>
Cc Andrew Morton <[email protected]>
Cc Steven Price <[email protected]>
---
 arch/arm64/mm/mmu.c | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)
arch/arm64/mm/mmu.c +0 -0
index 75df62fea1b6..44486fd0e883 100644

arch/arm64/mm/mmu.c int __meminit vmemmap_populate(unsigned long start, unsigned long end, int node, · line 1128

Quoted 10 lines
arch/arm64/mm/mmu.c +5 -2
@@ -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:

Will

maintainer Applied
#7 lore raw
In reply to Sudarshan Rajagopalan
Quoted 6 lines · 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

Quoted 6 lines

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)

Signature · 1 line
Catalin