mirror of
https://github.com/Fishwaldo/linux-bl808.git
synced 2025-03-18 04:54:52 +00:00
hugetlb: fix hugepages_setup when deal with pernode
Hugepages can be specified to pernode since "hugetlbfs: extend the
definition of hugepages parameter to support node allocation", but the
following problem is observed.
Confusing behavior is observed when both 1G and 2M hugepage is set
after "numa=off".
cmdline hugepage settings:
hugepagesz=1G hugepages=0:3,1:3
hugepagesz=2M hugepages=0:1024,1:1024
results:
HugeTLB registered 1.00 GiB page size, pre-allocated 0 pages
HugeTLB registered 2.00 MiB page size, pre-allocated 1024 pages
Furthermore, confusing behavior can be also observed when an invalid node
behind a valid node. To fix this, never allocate any typical hugepage
when an invalid parameter is received.
Link: https://lkml.kernel.org/r/20220413032915.251254-3-liupeng256@huawei.com
Fixes: b5389086ad
("hugetlbfs: extend the definition of hugepages parameter to support node allocation")
Signed-off-by: Peng Liu <liupeng256@huawei.com>
Reviewed-by: Mike Kravetz <mike.kravetz@oracle.com>
Cc: Baolin Wang <baolin.wang@linux.alibaba.com>
Cc: David Hildenbrand <david@redhat.com>
Cc: Liu Yuntao <liuyuntao10@huawei.com>
Cc: Muchun Song <songmuchun@bytedance.com>
Cc: Zhenguo Yao <yaozhenguo1@gmail.com>
Cc: Kefeng Wang <wangkefeng.wang@huawei.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
This commit is contained in:
parent
0a7a0f6f7f
commit
f87442f407
1 changed files with 15 additions and 0 deletions
15
mm/hugetlb.c
15
mm/hugetlb.c
|
@ -4122,6 +4122,20 @@ bool __init __weak hugetlb_node_alloc_supported(void)
|
|||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
static void __init hugepages_clear_pages_in_node(void)
|
||||
{
|
||||
if (!hugetlb_max_hstate) {
|
||||
default_hstate_max_huge_pages = 0;
|
||||
memset(default_hugepages_in_node, 0,
|
||||
MAX_NUMNODES * sizeof(unsigned int));
|
||||
} else {
|
||||
parsed_hstate->max_huge_pages = 0;
|
||||
memset(parsed_hstate->max_huge_pages_node, 0,
|
||||
MAX_NUMNODES * sizeof(unsigned int));
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* hugepages command line processing
|
||||
* hugepages normally follows a valid hugepagsz or default_hugepagsz
|
||||
|
@ -4209,6 +4223,7 @@ static int __init hugepages_setup(char *s)
|
|||
|
||||
invalid:
|
||||
pr_warn("HugeTLB: Invalid hugepages parameter %s\n", p);
|
||||
hugepages_clear_pages_in_node();
|
||||
return 0;
|
||||
}
|
||||
__setup("hugepages=", hugepages_setup);
|
||||
|
|
Loading…
Add table
Reference in a new issue