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 2/9] mm/hugetlb: Add follow_huge_pgd function
    Date
    This just adds 'follow_huge_pgd' function which is will be used
    later in this series to make 'follow_page_mask' function aware
    of PGD based huge page implementation.

    Signed-off-by: Anshuman Khandual <khandual@linux.vnet.ibm.com>
    ---
    include/linux/hugetlb.h | 3 +++
    mm/hugetlb.c | 10 ++++++++++
    2 files changed, 13 insertions(+)

    diff --git a/include/linux/hugetlb.h b/include/linux/hugetlb.h
    index 7d953c2..71832e1 100644
    --- a/include/linux/hugetlb.h
    +++ b/include/linux/hugetlb.h
    @@ -115,6 +115,8 @@ struct page *follow_huge_pmd(struct mm_struct *mm, unsigned long address,
    pmd_t *pmd, int flags);
    struct page *follow_huge_pud(struct mm_struct *mm, unsigned long address,
    pud_t *pud, int flags);
    +struct page *follow_huge_pgd(struct mm_struct *mm, unsigned long address,
    + pgd_t *pgd, int flags);
    int pmd_huge(pmd_t pmd);
    int pud_huge(pud_t pmd);
    unsigned long hugetlb_change_protection(struct vm_area_struct *vma,
    @@ -143,6 +145,7 @@ static inline void hugetlb_show_meminfo(void)
    }
    #define follow_huge_pmd(mm, addr, pmd, flags) NULL
    #define follow_huge_pud(mm, addr, pud, flags) NULL
    +#define follow_huge_pgd(mm, addr, pgd, flags) NULL
    #define prepare_hugepage_range(file, addr, len) (-EINVAL)
    #define pmd_huge(x) 0
    #define pud_huge(x) 0
    diff --git a/mm/hugetlb.c b/mm/hugetlb.c
    index a478b7b..844c18f 100644
    --- a/mm/hugetlb.c
    +++ b/mm/hugetlb.c
    @@ -4353,6 +4353,16 @@ follow_huge_pud(struct mm_struct *mm, unsigned long address,
    return pte_page(*(pte_t *)pud) + ((address & ~PUD_MASK) >> PAGE_SHIFT);
    }

    +struct page * __weak
    +follow_huge_pgd(struct mm_struct *mm, unsigned long address,
    + pgd_t *pgd, int flags)
    +{
    + if (flags & FOLL_GET)
    + return NULL;
    +
    + return pte_page(*(pte_t *)pgd) + ((address & ~PGDIR_MASK) >> PAGE_SHIFT);
    +}
    +
    #ifdef CONFIG_MEMORY_FAILURE

    /*
    --
    2.1.0
    \
     
     \ /
      Last update: 2016-03-09 13:41    [W:2.230 / U:1.344 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site