Re: [v4 PATCH 6/7] mm: khugepaged: reorg some khugepaged helpers

Zach O'Keefe
2022-06-16T00:27:49Z

On 15 Jun 10:29, Yang Shi wrote:
> The khugepaged_{enabled|always|req_madv} are not khugepaged only
> anymore, move them to huge_mm.h and rename to hugepage_flags_xxx, and
> remove khugepaged_req_madv due to no users.
>
> Also move khugepaged_defrag to khugepaged.c since its only caller is in
> that file, it doesn't have to be in a header file.
>
> Signed-off-by: Yang Shi <shy828301@gmail.com>
> ---
> include/linux/huge_mm.h | 8 ++++++++
> include/linux/khugepaged.h | 14 --------------
> mm/huge_memory.c | 4 ++--
> mm/khugepaged.c | 18 +++++++++++-------
> 4 files changed, 21 insertions(+), 23 deletions(-)
>
> diff --git a/include/linux/huge_mm.h b/include/linux/huge_mm.h
> index 9d97d7ee6234..4cf546af7d97 100644
> --- a/include/linux/huge_mm.h
> +++ b/include/linux/huge_mm.h
> @@ -116,6 +116,14 @@ extern struct kobj_attribute shmem_enabled_attr;
>
> extern unsigned long transparent_hugepage_flags;
>
> +#define hugepage_flags_enabled() \
> + (transparent_hugepage_flags & \
> + ((1<<TRANSPARENT_HUGEPAGE_FLAG) | \
> + (1<<TRANSPARENT_HUGEPAGE_REQ_MADV_FLAG)))
> +#define hugepage_flags_always() \
> + (transparent_hugepage_flags & \
> + (1<<TRANSPARENT_HUGEPAGE_FLAG))
> +
> /*
> * Do the below checks:
> * - For file vma, check if the linear page offset of vma is
> diff --git a/include/linux/khugepaged.h b/include/linux/khugepaged.h
> index ea5fd4c398f7..384f034ae947 100644
> --- a/include/linux/khugepaged.h
> +++ b/include/linux/khugepaged.h
> @@ -24,20 +24,6 @@ static inline void collapse_pte_mapped_thp(struct mm_struct *mm,
> }
> #endif
>
> -#define khugepaged_enabled() \
> - (transparent_hugepage_flags & \
> - ((1<<TRANSPARENT_HUGEPAGE_FLAG) | \
> - (1<<TRANSPARENT_HUGEPAGE_REQ_MADV_FLAG)))
> -#define khugepaged_always() \
> - (transparent_hugepage_flags & \
> - (1<<TRANSPARENT_HUGEPAGE_FLAG))
> -#define khugepaged_req_madv() \
> - (transparent_hugepage_flags & \
> - (1<<TRANSPARENT_HUGEPAGE_REQ_MADV_FLAG))
> -#define khugepaged_defrag() \
> - (transparent_hugepage_flags & \
> - (1<<TRANSPARENT_HUGEPAGE_DEFRAG_KHUGEPAGED_FLAG))
> -
> static inline void khugepaged_fork(struct mm_struct *mm, struct mm_struct *oldmm)
> {
> if (test_bit(MMF_VM_HUGEPAGE, &oldmm->flags))
> diff --git a/mm/huge_memory.c b/mm/huge_memory.c
> index d0c37d99917b..0f2cce2d7041 100644
> --- a/mm/huge_memory.c
> +++ b/mm/huge_memory.c
> @@ -117,11 +117,11 @@ bool hugepage_vma_check(struct vm_area_struct *vma,
> if (!in_pf && shmem_file(vma->vm_file))
> return shmem_huge_enabled(vma);
>
> - if (!khugepaged_enabled())
> + if (!hugepage_flags_enabled())
> return false;
>
> /* THP settings require madvise. */
> - if (!(vm_flags & VM_HUGEPAGE) && !khugepaged_always())
> + if (!(vm_flags & VM_HUGEPAGE) && !hugepage_flags_always())
> return false;
>
> /* Only regular file is valid */
> diff --git a/mm/khugepaged.c b/mm/khugepaged.c
> index 2a676f37c921..d8ebb60aae36 100644
> --- a/mm/khugepaged.c
> +++ b/mm/khugepaged.c
> @@ -472,7 +472,7 @@ void khugepaged_enter_vma(struct vm_area_struct *vma,
> unsigned long vm_flags)
> {
> if (!test_bit(MMF_VM_HUGEPAGE, &vma->vm_mm->flags) &&
> - khugepaged_enabled()) {
> + hugepage_flags_enabled()) {
> if (hugepage_vma_check(vma, vm_flags, false, false))
> __khugepaged_enter(vma->vm_mm);
> }
> @@ -763,6 +763,10 @@ static bool khugepaged_scan_abort(int nid)
> return false;
> }
>
> +#define khugepaged_defrag() \
> + (transparent_hugepage_flags & \
> + (1<<TRANSPARENT_HUGEPAGE_DEFRAG_KHUGEPAGED_FLAG))
> +
> /* Defrag for khugepaged will enter direct reclaim/compaction if necessary */
> static inline gfp_t alloc_hugepage_khugepaged_gfpmask(void)
> {
> @@ -860,7 +864,7 @@ static struct page *khugepaged_alloc_hugepage(bool *wait)
> khugepaged_alloc_sleep();
> } else
> count_vm_event(THP_COLLAPSE_ALLOC);
> - } while (unlikely(!hpage) && likely(khugepaged_enabled()));
> + } while (unlikely(!hpage) && likely(hugepage_flags_enabled()));
>
> return hpage;
> }
> @@ -2186,7 +2190,7 @@ static unsigned int khugepaged_scan_mm_slot(unsigned int pages,
> static int khugepaged_has_work(void)
> {
> return !list_empty(&khugepaged_scan.mm_head) &&
> - khugepaged_enabled();
> + hugepage_flags_enabled();
> }
>
> static int khugepaged_wait_event(void)
> @@ -2251,7 +2255,7 @@ static void khugepaged_wait_work(void)
> return;
> }
>
> - if (khugepaged_enabled())
> + if (hugepage_flags_enabled())
> wait_event_freezable(khugepaged_wait, khugepaged_wait_event());
> }
>
> @@ -2282,7 +2286,7 @@ static void set_recommended_min_free_kbytes(void)
> int nr_zones = 0;
> unsigned long recommended_min;
>
> - if (!khugepaged_enabled()) {
> + if (!hugepage_flags_enabled()) {
> calculate_min_free_kbytes();
> goto update_wmarks;
> }
> @@ -2332,7 +2336,7 @@ int start_stop_khugepaged(void)
> int err = 0;
>
> mutex_lock(&khugepaged_mutex);
> - if (khugepaged_enabled()) {
> + if (hugepage_flags_enabled()) {
> if (!khugepaged_thread)
> khugepaged_thread = kthread_run(khugepaged, NULL,
> "khugepaged");
> @@ -2358,7 +2362,7 @@ int start_stop_khugepaged(void)
> void khugepaged_min_free_kbytes_update(void)
> {
> mutex_lock(&khugepaged_mutex);
> - if (khugepaged_enabled() && khugepaged_thread)
> + if (hugepage_flags_enabled() && khugepaged_thread)
> set_recommended_min_free_kbytes();
> mutex_unlock(&khugepaged_mutex);
> }
> --
> 2.26.3
>

Reviewed-by: Zach O'Keefe <zokeefe@google.com>