lkml.org 
[lkml]   [2016]   [Mar]   [9]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[RFC 7/9] powerpc/hugetlb: Change follow_huge_* routines for BOOK3S 64K
    Date
    With this change, BOOK3S 64K platforms will not use 'follow_huge_addr'
    function any more and always return ERR_PTR(-ENIVAL), hence skipping
    the BUG_ON(flags & FOLL_GET) test in 'follow_page_mask' function. These
    platforms will then fall back on generic follow_huge_* functions for
    everything else. While being here, also added 'follow_huge_pgd' function
    which was missing earlier.

    Signed-off-by: Anshuman Khandual <khandual@linux.vnet.ibm.com>
    ---
    arch/powerpc/mm/hugetlbpage.c | 14 ++++++++++++++
    1 file changed, 14 insertions(+)

    diff --git a/arch/powerpc/mm/hugetlbpage.c b/arch/powerpc/mm/hugetlbpage.c
    index f6e4712..89b748a 100644
    --- a/arch/powerpc/mm/hugetlbpage.c
    +++ b/arch/powerpc/mm/hugetlbpage.c
    @@ -631,6 +631,10 @@ follow_huge_addr(struct mm_struct *mm, unsigned long address, int write)
    unsigned long mask, flags;
    struct page *page = ERR_PTR(-EINVAL);

    +#if defined(CONFIG_PPC_64K_PAGES) && defined(CONFIG_PPC_BOOK3S_64)
    + return ERR_PTR(-EINVAL);
    +#endif
    +
    local_irq_save(flags);
    ptep = find_linux_pte_or_hugepte(mm->pgd, address, &is_thp, &shift);
    if (!ptep)
    @@ -658,6 +662,7 @@ no_page:
    return page;
    }

    +#if !defined(CONFIG_PPC_64K_PAGES) || !defined(CONFIG_PPC_BOOK3S_64)
    struct page *
    follow_huge_pmd(struct mm_struct *mm, unsigned long address,
    pmd_t *pmd, int write)
    @@ -674,6 +679,15 @@ follow_huge_pud(struct mm_struct *mm, unsigned long address,
    return NULL;
    }

    +struct page *
    +follow_huge_pgd(struct mm_struct *mm, unsigned long address,
    + pgd_t *pgd, int write)
    +{
    + BUG();
    + return NULL;
    +}
    +#endif /* !defined(CONFIG_PPC_64K_PAGE) || !defined(CONFIG_BOOK3S_64) */
    +
    static unsigned long hugepte_addr_end(unsigned long addr, unsigned long end,
    unsigned long sz)
    {
    --
    2.1.0
    \
     
     \ /
      Last update: 2016-03-09 13:41    [W:6.484 / U:0.016 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site