Re: [PATCH] mm/hugetlb: Ensure adequate CMA areas available for hugetlb_cma[]

From: Anshuman Khandual
Date: Sun Feb 11 2024 - 21:07:15 EST




On 2/10/24 03:46, Andrew Morton wrote:
> On Fri, 9 Feb 2024 12:20:36 +0530 Anshuman Khandual <anshuman.khandual@xxxxxxx> wrote:
>
>> HugeTLB CMA area array is being created for possible MAX_NUMNODES without
>> ensuring corresponding MAX_CMA_AREAS support in CMA. Let's just warn for
>> such scenarios indicating need for CONFIG_CMA_AREAS adjustment.
>>
>> ...
>>
>> --- a/mm/hugetlb.c
>> +++ b/mm/hugetlb.c
>> @@ -7750,6 +7750,13 @@ void __init hugetlb_cma_reserve(int order)
>> }
>>
>> reserved = 0;
>> +
>> + /*
>> + * There needs to be enough MAX_CMA_AREAS to accommodate
>> + * MAX_NUMNODES heap areas being created here. Otherwise
>> + * adjust CONFIG_CMA_AREAS as required.
>> + */
>> + VM_WARN_ON(MAX_CMA_AREAS < MAX_NUMNODES);
>
> Could this simply be fixed up in Kconfig logic?

CMA_AREAS should default as (1 << NODES_SHIFT) ? But the system admin might want
to create more heap areas for other purposes as well. The idea here is to ensure
MAX_CMA_AREAS is at least MAX_NUMNODES if HugeTLB support is enabled. Do we have
some other methods ?

>
> And I think this could be detected at compile-time? BUILD_BUG_ON()?

Right, was thinking about this at first. Makes sense, will change here, seems to
be the right location for a build check as well.

>
>> for_each_online_node(nid) {
>> int res;
>> char name[CMA_MAX_NAME];
>> --
>> 2.25.1
>