mm: hugetlb: fix per-node size calculation for hugetlb_cma
Subsystems (2)
PATCH 1/1 mm: hugetlb: fix per-node size calculation for hugetlb_cma
Aslan found a bug in the per-node hugetlb_cma area size calculation:
the total remaining size should cap the per-node area size instead of be the minimal possible allocation.
Without the fix:
[ 0.004136] hugetlb_cma: reserve 2048 MiB, up to 1024 MiB per node [ 0.004138] cma: Reserved 2048 MiB at 0x0000000180000000 [ 0.004139] hugetlb_cma: reserved 2048 MiB on node 0
With the fix:
[ 0.006780] hugetlb_cma: reserve 2048 MiB, up to 1024 MiB per node [ 0.006786] cma: Reserved 1024 MiB at 0x00000001c0000000 [ 0.006787] hugetlb_cma: reserved 1024 MiB on node 0 [ 0.006788] cma: Reserved 1024 MiB at 0x00000003c0000000 [ 0.006789] hugetlb_cma: reserved 1024 MiB on node 1
--- mm/hugetlb.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
mm/hugetlb.c +1 -1
@@ -5590,7 +5590,7 @@ void __init hugetlb_cma_reserve(int order) min_pfn = min_low_pfn; max_pfn = max_low_pfn;#endif - size =max (per_node, hugetlb_cma_size - reserved); + size =min (per_node, hugetlb_cma_size - reserved); size =round_up (size,PAGE_SIZE << order);if (size > ((max_pfn - min_pfn) <<PAGE_SHIFT ) /2 ) {
Signature · 1 line
2.25.1
PATCH v2 1/1 mm: hugetlb: fix per-node size calculation for hugetlb_cma
Aslan found a bug in the per-node hugetlb_cma area size calculation:
the total remaining size should cap the per-node area size instead of be the minimal possible allocation.
Without the fix:
[ 0.004136] hugetlb_cma: reserve 2048 MiB, up to 1024 MiB per node [ 0.004138] cma: Reserved 2048 MiB at 0x0000000180000000 [ 0.004139] hugetlb_cma: reserved 2048 MiB on node 0
With the fix:
[ 0.006780] hugetlb_cma: reserve 2048 MiB, up to 1024 MiB per node [ 0.006786] cma: Reserved 1024 MiB at 0x00000001c0000000 [ 0.006787] hugetlb_cma: reserved 1024 MiB on node 0 [ 0.006788] cma: Reserved 1024 MiB at 0x00000003c0000000 [ 0.006789] hugetlb_cma: reserved 1024 MiB on node 1
--- mm/hugetlb.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
mm/hugetlb.c +1 -1
@@ -5590,7 +5590,7 @@ void __init hugetlb_cma_reserve(int order) min_pfn = min_low_pfn; max_pfn = max_low_pfn;#endif - size =max (per_node, hugetlb_cma_size - reserved); + size =min (per_node, hugetlb_cma_size - reserved); size =round_up (size,PAGE_SIZE << order);if (size > ((max_pfn - min_pfn) <<PAGE_SHIFT ) /2 ) {
Signature · 1 line
2.25.1
Quoted 10 lines · Roman Gushchin
Aslan found a bug in the per-node
hugetlb_cmaarea size calculation:
the total remaining size should cap the per-node area size instead of be the minimal possible allocation.Without the fix:
[ 0.004136] hugetlb_cma: reserve 2048 MiB, up to 1024 MiB per node [ 0.004138] cma: Reserved 2048 MiB at 0x0000000180000000 [ 0.004139] hugetlb_cma: reserved 2048 MiB on node 0With the fix:
Quoted 8 lines
[ 0.006780] hugetlb_cma: reserve 2048 MiB, up to 1024 MiB per node [ 0.006786] cma: Reserved 1024 MiB at 0x00000001c0000000 [ 0.006787] hugetlb_cma: reserved 1024 MiB on node 0 [ 0.006788] cma: Reserved 1024 MiB at 0x00000003c0000000 [ 0.006789] hugetlb_cma: reserved 1024 MiB on node 1Reported-by Aslan Barkirov <[email protected]>Signed-off-by Roman Gushchin <[email protected]>
I'm deeply sorry, I've made a typo in Aslan's name.
v2 fixes this.
Thanks!