Message ID | 20240209065036.1412670-1-anshuman.khandual@arm.com (mailing list archive) |
---|---|
State | New |
Headers | show |
Series | mm/hugetlb: Ensure adequate CMA areas available for hugetlb_cma[] | expand |
On Fri, 9 Feb 2024 12:20:36 +0530 Anshuman Khandual <anshuman.khandual@arm.com> 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? And I think this could be detected at compile-time? BUILD_BUG_ON()? > for_each_online_node(nid) { > int res; > char name[CMA_MAX_NAME]; > -- > 2.25.1
On 2/10/24 03:46, Andrew Morton wrote: > On Fri, 9 Feb 2024 12:20:36 +0530 Anshuman Khandual <anshuman.khandual@arm.com> 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 >
diff --git a/mm/hugetlb.c b/mm/hugetlb.c index a188b7c60f4f..fda8ced69832 100644 --- 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); for_each_online_node(nid) { int res; char name[CMA_MAX_NAME];
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. Cc: Muchun Song <muchun.song@linux.dev> Cc: Andrew Morton <akpm@linux-foundation.org> Cc: linux-mm@kvack.org Cc: linux-kernel@vger.kernel.org Signed-off-by: Anshuman Khandual <anshuman.khandual@arm.com> --- This applies on v6.8-rc3 mm/hugetlb.c | 7 +++++++ 1 file changed, 7 insertions(+)