[PATCH 02/12] mm: khugepaged: drop the hugepage_madvise()
From: Baolin Wang
Date: Thu Sep 17 2026 - 23:59:30 EST
After commit 2fd4e7693674 ("mm: fix incorrect vm_flags usage when checking
allowable orders for tmpfs"), hugepage_madvise() no longer calls any
khugepaged related functions and only updates the VMA flags. So remove this
helper and update the VMA flags directly in madvise_update_vma(), which
simplifies the code.
Signed-off-by: Baolin Wang <baolin.wang@xxxxxxxxxxxxxxxxx>
---
include/linux/huge_mm.h | 8 --------
mm/khugepaged.c | 22 ----------------------
mm/madvise.c | 8 +++++---
3 files changed, 5 insertions(+), 33 deletions(-)
diff --git a/include/linux/huge_mm.h b/include/linux/huge_mm.h
index 8ca0fa3be2ac..334c387ad997 100644
--- a/include/linux/huge_mm.h
+++ b/include/linux/huge_mm.h
@@ -508,8 +508,6 @@ change_huge_pud(struct mmu_gather *tlb, struct vm_area_struct *vma,
__split_huge_pud(__vma, __pud, __address); \
} while (0)
-int hugepage_madvise(struct vm_area_struct *vma, vm_flags_t *vm_flags,
- int advice);
void vma_adjust_trans_huge(struct vm_area_struct *vma, unsigned long start,
unsigned long end, struct vm_area_struct *next);
spinlock_t *__pmd_trans_huge_lock(pmd_t *pmd, struct vm_area_struct *vma);
@@ -707,12 +705,6 @@ static inline bool unmap_huge_pmd_locked(struct vm_area_struct *vma,
#define split_huge_pud(__vma, __pmd, __address) \
do { } while (0)
-static inline int hugepage_madvise(struct vm_area_struct *vma,
- vm_flags_t *vm_flags, int advice)
-{
- return -EINVAL;
-}
-
static inline void vma_adjust_trans_huge(struct vm_area_struct *vma,
unsigned long start,
unsigned long end,
diff --git a/mm/khugepaged.c b/mm/khugepaged.c
index 21d75f5b4b4d..f81ecaaa4890 100644
--- a/mm/khugepaged.c
+++ b/mm/khugepaged.c
@@ -380,28 +380,6 @@ static unsigned int collapse_max_ptes_swap(struct collapse_control *cc,
return cc->policy.max_ptes_swap;
}
-int hugepage_madvise(struct vm_area_struct *vma,
- vm_flags_t *vm_flags, int advice)
-{
- switch (advice) {
- case MADV_HUGEPAGE:
- *vm_flags &= ~VM_NOHUGEPAGE;
- *vm_flags |= VM_HUGEPAGE;
- break;
- case MADV_NOHUGEPAGE:
- *vm_flags &= ~VM_HUGEPAGE;
- *vm_flags |= VM_NOHUGEPAGE;
- /*
- * Setting VM_NOHUGEPAGE will prevent khugepaged from scanning
- * this vma even if we leave the mm registered in khugepaged if
- * it got registered before VM_NOHUGEPAGE was set.
- */
- break;
- }
-
- return 0;
-}
-
int __init khugepaged_init(void)
{
mm_slot_cache = KMEM_CACHE(mm_slot, 0);
diff --git a/mm/madvise.c b/mm/madvise.c
index eb491fa88325..4150f6a8cf64 100644
--- a/mm/madvise.c
+++ b/mm/madvise.c
@@ -1598,10 +1598,12 @@ static int madvise_vma_behavior(struct madvise_behavior *madv_behavior)
goto out;
break;
case MADV_HUGEPAGE:
+ new_flags &= ~VM_NOHUGEPAGE;
+ new_flags |= VM_HUGEPAGE;
+ break;
case MADV_NOHUGEPAGE:
- error = hugepage_madvise(vma, &new_flags, behavior);
- if (error)
- goto out;
+ new_flags &= ~VM_HUGEPAGE;
+ new_flags |= VM_NOHUGEPAGE;
break;
case __MADV_SET_ANON_VMA_NAME:
/* Only anonymous mappings can be named */
--
2.47.3