lkml.org 
[lkml]   [2020]   [Apr]   [17]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v3 3/4] hugetlbfs: remove hugetlb_add_hstate() warning for existing hstate
    Date
    The routine hugetlb_add_hstate prints a warning if the hstate already
    exists. This was originally done as part of kernel command line
    parsing. If 'hugepagesz=' was specified more than once, the warning
    pr_warn("hugepagesz= specified twice, ignoring\n");
    would be printed.

    Some architectures want to enable all huge page sizes. They would
    call hugetlb_add_hstate for all supported sizes. However, this was
    done after command line processing and as a result hstates could have
    already been created for some sizes. To make sure no warning were
    printed, there would often be code like:
    if (!size_to_hstate(size)
    hugetlb_add_hstate(ilog2(size) - PAGE_SHIFT)

    The only time we want to print the warning is as the result of command
    line processing. So, remove the warning from hugetlb_add_hstate and
    add it to the single arch independent routine processing "hugepagesz=".
    After this, calls to size_to_hstate() in arch specific code can be
    removed and hugetlb_add_hstate can be called without worrying about
    warning messages.

    Signed-off-by: Mike Kravetz <mike.kravetz@oracle.com>
    Acked-by: Mina Almasry <almasrymina@google.com>
    ---
    arch/arm64/mm/hugetlbpage.c | 16 ++++------------
    arch/powerpc/mm/hugetlbpage.c | 3 +--
    arch/riscv/mm/hugetlbpage.c | 2 +-
    arch/sparc/mm/init_64.c | 19 ++++---------------
    arch/x86/mm/hugetlbpage.c | 2 +-
    mm/hugetlb.c | 9 ++++++---
    6 files changed, 17 insertions(+), 34 deletions(-)

    diff --git a/arch/arm64/mm/hugetlbpage.c b/arch/arm64/mm/hugetlbpage.c
    index f706b821aba6..21fa98b51e00 100644
    --- a/arch/arm64/mm/hugetlbpage.c
    +++ b/arch/arm64/mm/hugetlbpage.c
    @@ -441,22 +441,14 @@ void huge_ptep_clear_flush(struct vm_area_struct *vma,
    clear_flush(vma->vm_mm, addr, ptep, pgsize, ncontig);
    }

    -static void __init add_huge_page_size(unsigned long size)
    -{
    - if (size_to_hstate(size))
    - return;
    -
    - hugetlb_add_hstate(ilog2(size) - PAGE_SHIFT);
    -}
    -
    static int __init hugetlbpage_init(void)
    {
    #ifdef CONFIG_ARM64_4K_PAGES
    - add_huge_page_size(PUD_SIZE);
    + hugetlb_add_hstate(PUD_SHIFT - PAGE_SHIFT);
    #endif
    - add_huge_page_size(CONT_PMD_SIZE);
    - add_huge_page_size(PMD_SIZE);
    - add_huge_page_size(CONT_PTE_SIZE);
    + hugetlb_add_hstate(CONT_PMD_SHIFT - PAGE_SHIFT);
    + hugetlb_add_hstate(PMD_SHIFT - PAGE_SHIFT);
    + hugetlb_add_hstate(CONT_PTE_SHIFT - PAGE_SHIFT);

    return 0;
    }
    diff --git a/arch/powerpc/mm/hugetlbpage.c b/arch/powerpc/mm/hugetlbpage.c
    index 2c3fa0a7787b..4d5ed1093615 100644
    --- a/arch/powerpc/mm/hugetlbpage.c
    +++ b/arch/powerpc/mm/hugetlbpage.c
    @@ -584,8 +584,7 @@ static int __init add_huge_page_size(unsigned long long size)
    if (!arch_hugetlb_valid_size((unsigned long)size))
    return -EINVAL;

    - if (!size_to_hstate(size))
    - hugetlb_add_hstate(shift - PAGE_SHIFT);
    + hugetlb_add_hstate(shift - PAGE_SHIFT);
    return 0;
    }

    diff --git a/arch/riscv/mm/hugetlbpage.c b/arch/riscv/mm/hugetlbpage.c
    index 4e5d7e9f0eef..932dadfdca54 100644
    --- a/arch/riscv/mm/hugetlbpage.c
    +++ b/arch/riscv/mm/hugetlbpage.c
    @@ -26,7 +26,7 @@ bool __init arch_hugetlb_valid_size(unsigned long size)
    static __init int gigantic_pages_init(void)
    {
    /* With CONTIG_ALLOC, we can allocate gigantic pages at runtime */
    - if (IS_ENABLED(CONFIG_64BIT) && !size_to_hstate(1UL << PUD_SHIFT))
    + if (IS_ENABLED(CONFIG_64BIT))
    hugetlb_add_hstate(PUD_SHIFT - PAGE_SHIFT);
    return 0;
    }
    diff --git a/arch/sparc/mm/init_64.c b/arch/sparc/mm/init_64.c
    index 4618f96fd30f..ae819a16d07a 100644
    --- a/arch/sparc/mm/init_64.c
    +++ b/arch/sparc/mm/init_64.c
    @@ -325,23 +325,12 @@ 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);
    + hugetlb_add_hstate(HPAGE_64K_SHIFT - PAGE_SHIFT);
    + hugetlb_add_hstate(HPAGE_SHIFT - PAGE_SHIFT);
    + hugetlb_add_hstate(HPAGE_256MB_SHIFT - PAGE_SHIFT);
    + hugetlb_add_hstate(HPAGE_2GB_SHIFT - PAGE_SHIFT);

    return 0;
    }
    diff --git a/arch/x86/mm/hugetlbpage.c b/arch/x86/mm/hugetlbpage.c
    index 937d640a89e3..cf5781142716 100644
    --- a/arch/x86/mm/hugetlbpage.c
    +++ b/arch/x86/mm/hugetlbpage.c
    @@ -195,7 +195,7 @@ bool __init arch_hugetlb_valid_size(unsigned long size)
    static __init int gigantic_pages_init(void)
    {
    /* With compaction or CMA we can allocate gigantic pages at runtime */
    - if (boot_cpu_has(X86_FEATURE_GBPAGES) && !size_to_hstate(1UL << PUD_SHIFT))
    + if (boot_cpu_has(X86_FEATURE_GBPAGES))
    hugetlb_add_hstate(PUD_SHIFT - PAGE_SHIFT);
    return 0;
    }
    diff --git a/mm/hugetlb.c b/mm/hugetlb.c
    index b2d276408cec..0e6eb755ae94 100644
    --- a/mm/hugetlb.c
    +++ b/mm/hugetlb.c
    @@ -3222,8 +3222,7 @@ static int __init hugetlb_init(void)
    }

    default_hstate_size = HPAGE_SIZE;
    - if (!size_to_hstate(default_hstate_size))
    - hugetlb_add_hstate(HUGETLB_PAGE_ORDER);
    + hugetlb_add_hstate(HUGETLB_PAGE_ORDER);
    }
    default_hstate_idx = hstate_index(size_to_hstate(default_hstate_size));
    if (default_hstate_max_huge_pages) {
    @@ -3268,7 +3267,6 @@ void __init hugetlb_add_hstate(unsigned int order)
    unsigned long i;

    if (size_to_hstate(PAGE_SIZE << order)) {
    - pr_warn("hugepagesz= specified twice, ignoring\n");
    return;
    }
    BUG_ON(hugetlb_max_hstate >= HUGE_MAX_HSTATE);
    @@ -3343,6 +3341,11 @@ static int __init hugepagesz_setup(char *s)
    return 0;
    }

    + if (size_to_hstate(size)) {
    + pr_warn("HugeTLB: hugepagesz %s specified twice, ignoring\n", s);
    + return 0;
    + }
    +
    hugetlb_add_hstate(ilog2(size) - PAGE_SHIFT);
    return 1;
    }
    --
    2.25.2
    \
     
     \ /
      Last update: 2020-04-17 20:53    [W:2.458 / U:0.008 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site