lkml.org 
[lkml]   [2021]   [Jan]   [28]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    Subject[PATCH v3 1/9] hugetlb: Pass vma into huge_pte_alloc()
    From
    From: Peter Xu <peterx@redhat.com>

    It is a preparation work to be able to behave differently in the per
    architecture huge_pte_alloc() according to different VMA attributes.

    Signed-off-by: Peter Xu <peterx@redhat.com>
    Signed-off-by: Axel Rasmussen <axelrasmussen@google.com>
    ---
    arch/arm64/mm/hugetlbpage.c | 2 +-
    arch/ia64/mm/hugetlbpage.c | 3 ++-
    arch/mips/mm/hugetlbpage.c | 4 ++--
    arch/parisc/mm/hugetlbpage.c | 2 +-
    arch/powerpc/mm/hugetlbpage.c | 3 ++-
    arch/s390/mm/hugetlbpage.c | 2 +-
    arch/sh/mm/hugetlbpage.c | 2 +-
    arch/sparc/mm/hugetlbpage.c | 2 +-
    include/linux/hugetlb.h | 2 +-
    mm/hugetlb.c | 6 +++---
    mm/userfaultfd.c | 2 +-
    11 files changed, 16 insertions(+), 14 deletions(-)

    diff --git a/arch/arm64/mm/hugetlbpage.c b/arch/arm64/mm/hugetlbpage.c
    index 55ecf6de9ff7..5b32ec888698 100644
    --- a/arch/arm64/mm/hugetlbpage.c
    +++ b/arch/arm64/mm/hugetlbpage.c
    @@ -252,7 +252,7 @@ void set_huge_swap_pte_at(struct mm_struct *mm, unsigned long addr,
    set_pte(ptep, pte);
    }

    -pte_t *huge_pte_alloc(struct mm_struct *mm,
    +pte_t *huge_pte_alloc(struct mm_struct *mm, struct vm_area_struct *vma,
    unsigned long addr, unsigned long sz)
    {
    pgd_t *pgdp;
    diff --git a/arch/ia64/mm/hugetlbpage.c b/arch/ia64/mm/hugetlbpage.c
    index b331f94d20ac..f993cb36c062 100644
    --- a/arch/ia64/mm/hugetlbpage.c
    +++ b/arch/ia64/mm/hugetlbpage.c
    @@ -25,7 +25,8 @@ unsigned int hpage_shift = HPAGE_SHIFT_DEFAULT;
    EXPORT_SYMBOL(hpage_shift);

    pte_t *
    -huge_pte_alloc(struct mm_struct *mm, unsigned long addr, unsigned long sz)
    +huge_pte_alloc(struct mm_struct *mm, struct vm_area_struct *vma,
    + unsigned long addr, unsigned long sz)
    {
    unsigned long taddr = htlbpage_to_page(addr);
    pgd_t *pgd;
    diff --git a/arch/mips/mm/hugetlbpage.c b/arch/mips/mm/hugetlbpage.c
    index b9f76f433617..871a100fb361 100644
    --- a/arch/mips/mm/hugetlbpage.c
    +++ b/arch/mips/mm/hugetlbpage.c
    @@ -21,8 +21,8 @@
    #include <asm/tlb.h>
    #include <asm/tlbflush.h>

    -pte_t *huge_pte_alloc(struct mm_struct *mm, unsigned long addr,
    - unsigned long sz)
    +pte_t *huge_pte_alloc(struct mm_struct *mm, structt vm_area_struct *vma,
    + unsigned long addr, unsigned long sz)
    {
    pgd_t *pgd;
    p4d_t *p4d;
    diff --git a/arch/parisc/mm/hugetlbpage.c b/arch/parisc/mm/hugetlbpage.c
    index d7ba014a7fbb..e141441bfa64 100644
    --- a/arch/parisc/mm/hugetlbpage.c
    +++ b/arch/parisc/mm/hugetlbpage.c
    @@ -44,7 +44,7 @@ hugetlb_get_unmapped_area(struct file *file, unsigned long addr,
    }


    -pte_t *huge_pte_alloc(struct mm_struct *mm,
    +pte_t *huge_pte_alloc(struct mm_struct *mm, struct vm_area_struct *vma,
    unsigned long addr, unsigned long sz)
    {
    pgd_t *pgd;
    diff --git a/arch/powerpc/mm/hugetlbpage.c b/arch/powerpc/mm/hugetlbpage.c
    index 8b3cc4d688e8..d57276b8791c 100644
    --- a/arch/powerpc/mm/hugetlbpage.c
    +++ b/arch/powerpc/mm/hugetlbpage.c
    @@ -106,7 +106,8 @@ static int __hugepte_alloc(struct mm_struct *mm, hugepd_t *hpdp,
    * At this point we do the placement change only for BOOK3S 64. This would
    * possibly work on other subarchs.
    */
    -pte_t *huge_pte_alloc(struct mm_struct *mm, unsigned long addr, unsigned long sz)
    +pte_t *huge_pte_alloc(struct mm_struct *mm, struct vm_area_struct *vma,
    + unsigned long addr, unsigned long sz)
    {
    pgd_t *pg;
    p4d_t *p4;
    diff --git a/arch/s390/mm/hugetlbpage.c b/arch/s390/mm/hugetlbpage.c
    index 3b5a4d25ca9b..da36d13ffc16 100644
    --- a/arch/s390/mm/hugetlbpage.c
    +++ b/arch/s390/mm/hugetlbpage.c
    @@ -189,7 +189,7 @@ pte_t huge_ptep_get_and_clear(struct mm_struct *mm,
    return pte;
    }

    -pte_t *huge_pte_alloc(struct mm_struct *mm,
    +pte_t *huge_pte_alloc(struct mm_struct *mm, struct vm_area_struct *vma,
    unsigned long addr, unsigned long sz)
    {
    pgd_t *pgdp;
    diff --git a/arch/sh/mm/hugetlbpage.c b/arch/sh/mm/hugetlbpage.c
    index 220d7bc43d2b..999ab5916e69 100644
    --- a/arch/sh/mm/hugetlbpage.c
    +++ b/arch/sh/mm/hugetlbpage.c
    @@ -21,7 +21,7 @@
    #include <asm/tlbflush.h>
    #include <asm/cacheflush.h>

    -pte_t *huge_pte_alloc(struct mm_struct *mm,
    +pte_t *huge_pte_alloc(struct mm_struct *mm, struct vm_area_struct *vma,
    unsigned long addr, unsigned long sz)
    {
    pgd_t *pgd;
    diff --git a/arch/sparc/mm/hugetlbpage.c b/arch/sparc/mm/hugetlbpage.c
    index ad4b42f04988..04d8790f6c32 100644
    --- a/arch/sparc/mm/hugetlbpage.c
    +++ b/arch/sparc/mm/hugetlbpage.c
    @@ -279,7 +279,7 @@ unsigned long pud_leaf_size(pud_t pud) { return 1UL << tte_to_shift(*(pte_t *)&p
    unsigned long pmd_leaf_size(pmd_t pmd) { return 1UL << tte_to_shift(*(pte_t *)&pmd); }
    unsigned long pte_leaf_size(pte_t pte) { return 1UL << tte_to_shift(pte); }

    -pte_t *huge_pte_alloc(struct mm_struct *mm,
    +pte_t *huge_pte_alloc(struct mm_struct *mm, struct vm_area_struct *vma,
    unsigned long addr, unsigned long sz)
    {
    pgd_t *pgd;
    diff --git a/include/linux/hugetlb.h b/include/linux/hugetlb.h
    index ebca2ef02212..1e0abb609976 100644
    --- a/include/linux/hugetlb.h
    +++ b/include/linux/hugetlb.h
    @@ -161,7 +161,7 @@ extern struct list_head huge_boot_pages;

    /* arch callbacks */

    -pte_t *huge_pte_alloc(struct mm_struct *mm,
    +pte_t *huge_pte_alloc(struct mm_struct *mm, struct vm_area_struct *vma,
    unsigned long addr, unsigned long sz);
    pte_t *huge_pte_offset(struct mm_struct *mm,
    unsigned long addr, unsigned long sz);
    diff --git a/mm/hugetlb.c b/mm/hugetlb.c
    index 18f6ee317900..07b23c81b1db 100644
    --- a/mm/hugetlb.c
    +++ b/mm/hugetlb.c
    @@ -3766,7 +3766,7 @@ int copy_hugetlb_page_range(struct mm_struct *dst, struct mm_struct *src,
    src_pte = huge_pte_offset(src, addr, sz);
    if (!src_pte)
    continue;
    - dst_pte = huge_pte_alloc(dst, addr, sz);
    + dst_pte = huge_pte_alloc(dst, vma, addr, sz);
    if (!dst_pte) {
    ret = -ENOMEM;
    break;
    @@ -4503,7 +4503,7 @@ vm_fault_t hugetlb_fault(struct mm_struct *mm, struct vm_area_struct *vma,
    */
    mapping = vma->vm_file->f_mapping;
    i_mmap_lock_read(mapping);
    - ptep = huge_pte_alloc(mm, haddr, huge_page_size(h));
    + ptep = huge_pte_alloc(mm, vma, haddr, huge_page_size(h));
    if (!ptep) {
    i_mmap_unlock_read(mapping);
    return VM_FAULT_OOM;
    @@ -5392,7 +5392,7 @@ void adjust_range_if_pmd_sharing_possible(struct vm_area_struct *vma,
    #endif /* CONFIG_ARCH_WANT_HUGE_PMD_SHARE */

    #ifdef CONFIG_ARCH_WANT_GENERAL_HUGETLB
    -pte_t *huge_pte_alloc(struct mm_struct *mm,
    +pte_t *huge_pte_alloc(struct mm_struct *mm, struct vm_area_struct *vma,
    unsigned long addr, unsigned long sz)
    {
    pgd_t *pgd;
    diff --git a/mm/userfaultfd.c b/mm/userfaultfd.c
    index 7423808640ef..b2ce61c1b50d 100644
    --- a/mm/userfaultfd.c
    +++ b/mm/userfaultfd.c
    @@ -290,7 +290,7 @@ static __always_inline ssize_t __mcopy_atomic_hugetlb(struct mm_struct *dst_mm,
    mutex_lock(&hugetlb_fault_mutex_table[hash]);

    err = -ENOMEM;
    - dst_pte = huge_pte_alloc(dst_mm, dst_addr, vma_hpagesize);
    + dst_pte = huge_pte_alloc(dst_mm, dst_vma, dst_addr, vma_hpagesize);
    if (!dst_pte) {
    mutex_unlock(&hugetlb_fault_mutex_table[hash]);
    i_mmap_unlock_read(mapping);
    --
    2.30.0.365.g02bc693789-goog
    \
     
     \ /
      Last update: 2021-01-28 23:53    [W:4.128 / U:0.024 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site