linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [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; 4+ 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] 4+ 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; 4+ 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] 4+ 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; 4+ 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] 4+ 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; 4+ 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] 4+ messages in thread

end of thread, other threads:[~2020-10-12  2:54 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
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).