mirror of https://gitee.com/openkylin/linux.git
sparc64: Register hugepages during arch init
Add hstate for each supported hugepage size using arch initcall. This change fixes some hugepage parameter parsing inconsistencies: case 1: no hugepage parameters Without hugepage parameters, only a hugepages-8192kB entry is visible in sysfs. It's different from x86_64 where both 2M and 1G hugepage sizes are available. case 2: default_hugepagesz=[64K|256M|2G] When specifying only a default_hugepagesz parameter, the default hugepage size isn't really changed and it stays at 8M. This is again different from x86_64. Orabug: 25869946 Reviewed-by: Bob Picco <bob.picco@oracle.com> Signed-off-by: Nitin Gupta <nitin.m.gupta@oracle.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
fc290a114f
commit
8399e4b88a
|
@ -325,6 +325,29 @@ static void __update_mmu_tsb_insert(struct mm_struct *mm, unsigned long tsb_inde
|
|||
}
|
||||
|
||||
#ifdef CONFIG_HUGETLB_PAGE
|
||||
static void __init add_huge_page_size(unsigned long size)
|
||||
{
|
||||
unsigned int order;
|
||||
|
||||
if (size_to_hstate(size))
|
||||
return;
|
||||
|
||||
order = ilog2(size) - PAGE_SHIFT;
|
||||
hugetlb_add_hstate(order);
|
||||
}
|
||||
|
||||
static int __init hugetlbpage_init(void)
|
||||
{
|
||||
add_huge_page_size(1UL << HPAGE_64K_SHIFT);
|
||||
add_huge_page_size(1UL << HPAGE_SHIFT);
|
||||
add_huge_page_size(1UL << HPAGE_256MB_SHIFT);
|
||||
add_huge_page_size(1UL << HPAGE_2GB_SHIFT);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
arch_initcall(hugetlbpage_init);
|
||||
|
||||
static int __init setup_hugepagesz(char *string)
|
||||
{
|
||||
unsigned long long hugepage_size;
|
||||
|
@ -364,7 +387,7 @@ static int __init setup_hugepagesz(char *string)
|
|||
goto out;
|
||||
}
|
||||
|
||||
hugetlb_add_hstate(hugepage_shift - PAGE_SHIFT);
|
||||
add_huge_page_size(hugepage_size);
|
||||
rc = 1;
|
||||
|
||||
out:
|
||||
|
|
Loading…
Reference in New Issue