lkml.org 
[lkml]   [2022]   [Apr]   [4]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[v3 PATCH 7/8] mm: khugepaged: introduce khugepaged_enter_vma() helper
    Date
    The khugepaged_enter_vma_merge() actually does as the same thing as the
    khugepaged_enter() section called by shmem_mmap(), so consolidate them
    into one helper and rename it to khugepaged_enter_vma().

    Signed-off-by: Yang Shi <shy828301@gmail.com>
    ---
    include/linux/khugepaged.h | 8 ++++----
    mm/khugepaged.c | 26 +++++++++-----------------
    mm/mmap.c | 8 ++++----
    mm/shmem.c | 12 ++----------
    4 files changed, 19 insertions(+), 35 deletions(-)

    diff --git a/include/linux/khugepaged.h b/include/linux/khugepaged.h
    index 6acf9701151e..f4b12be155ab 100644
    --- a/include/linux/khugepaged.h
    +++ b/include/linux/khugepaged.h
    @@ -10,8 +10,8 @@ extern void khugepaged_destroy(void);
    extern int start_stop_khugepaged(void);
    extern void __khugepaged_enter(struct mm_struct *mm);
    extern void __khugepaged_exit(struct mm_struct *mm);
    -extern void khugepaged_enter_vma_merge(struct vm_area_struct *vma,
    - unsigned long vm_flags);
    +extern void khugepaged_enter_vma(struct vm_area_struct *vma,
    + unsigned long vm_flags);
    extern void khugepaged_fork(struct mm_struct *mm,
    struct mm_struct *oldmm);
    extern void khugepaged_exit(struct mm_struct *mm);
    @@ -49,8 +49,8 @@ static inline void khugepaged_enter(struct vm_area_struct *vma,
    unsigned long vm_flags)
    {
    }
    -static inline void khugepaged_enter_vma_merge(struct vm_area_struct *vma,
    - unsigned long vm_flags)
    +static inline void khugepaged_enter_vma(struct vm_area_struct *vma,
    + unsigned long vm_flags)
    {
    }
    static inline void collapse_pte_mapped_thp(struct mm_struct *mm,
    diff --git a/mm/khugepaged.c b/mm/khugepaged.c
    index ec5b0a691d87..c5c3202d7401 100644
    --- a/mm/khugepaged.c
    +++ b/mm/khugepaged.c
    @@ -365,7 +365,7 @@ int hugepage_madvise(struct vm_area_struct *vma,
    * register it here without waiting a page fault that
    * may not happen any time soon.
    */
    - khugepaged_enter_vma_merge(vma, *vm_flags);
    + khugepaged_enter_vma(vma, *vm_flags);
    break;
    case MADV_NOHUGEPAGE:
    *vm_flags &= ~VM_HUGEPAGE;
    @@ -505,23 +505,15 @@ void __khugepaged_enter(struct mm_struct *mm)
    wake_up_interruptible(&khugepaged_wait);
    }

    -void khugepaged_enter_vma_merge(struct vm_area_struct *vma,
    - unsigned long vm_flags)
    +void khugepaged_enter_vma(struct vm_area_struct *vma,
    + unsigned long vm_flags)
    {
    - unsigned long hstart, hend;
    -
    - /*
    - * khugepaged only supports read-only files for non-shmem files.
    - * khugepaged does not yet work on special mappings. And
    - * file-private shmem THP is not supported.
    - */
    - if (!hugepage_vma_check(vma, vm_flags))
    - return;
    -
    - hstart = (vma->vm_start + ~HPAGE_PMD_MASK) & HPAGE_PMD_MASK;
    - hend = vma->vm_end & HPAGE_PMD_MASK;
    - if (hstart < hend)
    - khugepaged_enter(vma, vm_flags);
    + if (!test_bit(MMF_VM_HUGEPAGE, &vma->vm_mm->flags) &&
    + khugepaged_enabled() &&
    + (((vma->vm_start + ~HPAGE_PMD_MASK) & HPAGE_PMD_MASK) <
    + (vma->vm_end & HPAGE_PMD_MASK)))
    + if (hugepage_vma_check(vma, vm_flags))
    + __khugepaged_enter(vma->vm_mm);
    }

    void __khugepaged_exit(struct mm_struct *mm)
    diff --git a/mm/mmap.c b/mm/mmap.c
    index 3aa839f81e63..604c8dece5dd 100644
    --- a/mm/mmap.c
    +++ b/mm/mmap.c
    @@ -1218,7 +1218,7 @@ struct vm_area_struct *vma_merge(struct mm_struct *mm,
    end, prev->vm_pgoff, NULL, prev);
    if (err)
    return NULL;
    - khugepaged_enter_vma_merge(prev, vm_flags);
    + khugepaged_enter_vma(prev, vm_flags);
    return prev;
    }

    @@ -1245,7 +1245,7 @@ struct vm_area_struct *vma_merge(struct mm_struct *mm,
    }
    if (err)
    return NULL;
    - khugepaged_enter_vma_merge(area, vm_flags);
    + khugepaged_enter_vma(area, vm_flags);
    return area;
    }

    @@ -2460,7 +2460,7 @@ int expand_upwards(struct vm_area_struct *vma, unsigned long address)
    }
    }
    anon_vma_unlock_write(vma->anon_vma);
    - khugepaged_enter_vma_merge(vma, vma->vm_flags);
    + khugepaged_enter_vma(vma, vma->vm_flags);
    validate_mm(mm);
    return error;
    }
    @@ -2538,7 +2538,7 @@ int expand_downwards(struct vm_area_struct *vma,
    }
    }
    anon_vma_unlock_write(vma->anon_vma);
    - khugepaged_enter_vma_merge(vma, vma->vm_flags);
    + khugepaged_enter_vma(vma, vma->vm_flags);
    validate_mm(mm);
    return error;
    }
    diff --git a/mm/shmem.c b/mm/shmem.c
    index 529c9ad3e926..92eca974771d 100644
    --- a/mm/shmem.c
    +++ b/mm/shmem.c
    @@ -2239,11 +2239,7 @@ static int shmem_mmap(struct file *file, struct vm_area_struct *vma)

    file_accessed(file);
    vma->vm_ops = &shmem_vm_ops;
    - if (IS_ENABLED(CONFIG_TRANSPARENT_HUGEPAGE) &&
    - ((vma->vm_start + ~HPAGE_PMD_MASK) & HPAGE_PMD_MASK) <
    - (vma->vm_end & HPAGE_PMD_MASK)) {
    - khugepaged_enter(vma, vma->vm_flags);
    - }
    + khugepaged_enter_vma(vma, vma->vm_flags);
    return 0;
    }

    @@ -4136,11 +4132,7 @@ int shmem_zero_setup(struct vm_area_struct *vma)
    vma->vm_file = file;
    vma->vm_ops = &shmem_vm_ops;

    - if (IS_ENABLED(CONFIG_TRANSPARENT_HUGEPAGE) &&
    - ((vma->vm_start + ~HPAGE_PMD_MASK) & HPAGE_PMD_MASK) <
    - (vma->vm_end & HPAGE_PMD_MASK)) {
    - khugepaged_enter(vma, vma->vm_flags);
    - }
    + khugepaged_enter_vma(vma, vma->vm_flags);

    return 0;
    }
    --
    2.26.3
    \
     
     \ /
      Last update: 2022-04-05 00:38    [W:4.099 / U:0.072 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site