On Thu, Apr 4, 2024 at 11:56 AM Roman Gushchin <roman.gushchin@xxxxxxxxx> wrote: > > On Thu, Apr 04, 2024 at 04:25:15PM +0000, Frank van der Linden wrote: > > The hugetlb_cma code passes 0 in the order_per_bit argument to > > cma_declare_contiguous_nid (the alignment, computed using the > > page order, is correctly passed in). > > > > This causes a bit in the cma allocation bitmap to always represent > > a 4k page, making the bitmaps potentially very large, and slower. > > > > So, correctly pass in the order instead. > > > > Signed-off-by: Frank van der Linden <fvdl@xxxxxxxxxx> > > Cc: Roman Gushchin <roman.gushchin@xxxxxxxxx> > > Fixes: cf11e85fc08c ("mm: hugetlb: optionally allocate gigantic hugepages using cma") > > Hi Frank, > > there is a comment just above your changes which explains why order_per_bit is 0. > Is this not true anymore? If so, please, fix the comment too. Please, clarify. > > Thanks! Hi Roman, I'm assuming you're referring to this comment: /* * Note that 'order per bit' is based on smallest size that * may be returned to CMA allocator in the case of * huge page demotion. */ That comment was added in a01f43901cfb9 ("hugetlb: be sure to free demoted CMA pages to CMA"). It talks about HUGETLB_PAGE_ORDER being the minimum order being given back to the CMA allocator (after hugetlb demotion), therefore order_per_bit must be HUGETLB_PAGE_ORDER. See the commit message for that commit: "Therefore, at region setup time we use HUGETLB_PAGE_ORDER as the smallest possible huge page size that can be given back to CMA." But the commit, while correctly changing the alignment, left the order_per_bit argument at 0, even though it clearly intended to set it at HUGETLB_PAGE_ORDER. The confusion may have been that cma_declare_contiguous_nid has 9 arguments, several of which can be left at 0 meaning 'use default', so it's easy to misread. In other words, the comment was correct, but the code was not. After this patch, comment and code match.