Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

mm/huge_memory: remove useless folio pointers passing

Since the previous commit "mm/huge_memory: Adjust try_to_migrate_one() and
split_huge_pmd_locked()" has simplified the logic by leveraging the folio
verification in page_vma_mapped_walk(), this patch removes the unnecessary
folio pointers passing.

Link: https://lkml.kernel.org/r/20250425103859.825879-3-gavinguo@igalia.com
Link: https://lore.kernel.org/all/98d1d195-7821-4627-b518-83103ade56c0@redhat.com/
Link: https://lore.kernel.org/all/91599a3c-e69e-4d79-bac5-5013c96203d7@redhat.com/
Signed-off-by: Gavin Guo <gavinguo@igalia.com>
Suggested-by: David Hildenbrand <david@redhat.com>
Acked-by: David Hildenbrand <david@redhat.com>
Reviewed-by: Zi Yan <ziy@nvidia.com>
Reviewed-by: Baolin Wang <baolin.wang@linux.alibaba.com>
Cc: Florent Revest <revest@google.com>
Cc: Gavin Shan <gshan@redhat.com>
Cc: Hugh Dickins <hughd@google.com>
Cc: Matthew Wilcox (Oracle) <willy@infradead.org>
Cc: Miaohe Lin <linmiaohe@huawei.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>

authored by

Gavin Guo and committed by
Andrew Morton
b960818d 60fbb143

+20 -21
+7 -8
include/linux/huge_mm.h
··· 395 395 void deferred_split_folio(struct folio *folio, bool partially_mapped); 396 396 397 397 void __split_huge_pmd(struct vm_area_struct *vma, pmd_t *pmd, 398 - unsigned long address, bool freeze, struct folio *folio); 398 + unsigned long address, bool freeze); 399 399 400 400 #define split_huge_pmd(__vma, __pmd, __address) \ 401 401 do { \ ··· 403 403 if (is_swap_pmd(*____pmd) || pmd_trans_huge(*____pmd) \ 404 404 || pmd_devmap(*____pmd)) \ 405 405 __split_huge_pmd(__vma, __pmd, __address, \ 406 - false, NULL); \ 406 + false); \ 407 407 } while (0) 408 408 409 - 410 409 void split_huge_pmd_address(struct vm_area_struct *vma, unsigned long address, 411 - bool freeze, struct folio *folio); 410 + bool freeze); 412 411 413 412 void __split_huge_pud(struct vm_area_struct *vma, pud_t *pud, 414 413 unsigned long address); ··· 500 501 } 501 502 502 503 void split_huge_pmd_locked(struct vm_area_struct *vma, unsigned long address, 503 - pmd_t *pmd, bool freeze, struct folio *folio); 504 + pmd_t *pmd, bool freeze); 504 505 bool unmap_huge_pmd_locked(struct vm_area_struct *vma, unsigned long addr, 505 506 pmd_t *pmdp, struct folio *folio); 506 507 ··· 575 576 do { } while (0) 576 577 577 578 static inline void __split_huge_pmd(struct vm_area_struct *vma, pmd_t *pmd, 578 - unsigned long address, bool freeze, struct folio *folio) {} 579 + unsigned long address, bool freeze) {} 579 580 static inline void split_huge_pmd_address(struct vm_area_struct *vma, 580 - unsigned long address, bool freeze, struct folio *folio) {} 581 + unsigned long address, bool freeze) {} 581 582 static inline void split_huge_pmd_locked(struct vm_area_struct *vma, 582 583 unsigned long address, pmd_t *pmd, 583 - bool freeze, struct folio *folio) {} 584 + bool freeze) {} 584 585 585 586 static inline bool unmap_huge_pmd_locked(struct vm_area_struct *vma, 586 587 unsigned long addr, pmd_t *pmdp,
+8 -8
mm/huge_memory.c
··· 1785 1785 pte_free(dst_mm, pgtable); 1786 1786 spin_unlock(src_ptl); 1787 1787 spin_unlock(dst_ptl); 1788 - __split_huge_pmd(src_vma, src_pmd, addr, false, NULL); 1788 + __split_huge_pmd(src_vma, src_pmd, addr, false); 1789 1789 return -EAGAIN; 1790 1790 } 1791 1791 add_mm_counter(dst_mm, MM_ANONPAGES, HPAGE_PMD_NR); ··· 2007 2007 folio_unlock(folio); 2008 2008 spin_unlock(vmf->ptl); 2009 2009 fallback: 2010 - __split_huge_pmd(vma, vmf->pmd, vmf->address, false, NULL); 2010 + __split_huge_pmd(vma, vmf->pmd, vmf->address, false); 2011 2011 return VM_FAULT_FALLBACK; 2012 2012 } 2013 2013 ··· 3080 3080 } 3081 3081 3082 3082 void split_huge_pmd_locked(struct vm_area_struct *vma, unsigned long address, 3083 - pmd_t *pmd, bool freeze, struct folio *folio) 3083 + pmd_t *pmd, bool freeze) 3084 3084 { 3085 3085 VM_WARN_ON_ONCE(!IS_ALIGNED(address, HPAGE_PMD_SIZE)); 3086 3086 if (pmd_trans_huge(*pmd) || pmd_devmap(*pmd) || ··· 3089 3089 } 3090 3090 3091 3091 void __split_huge_pmd(struct vm_area_struct *vma, pmd_t *pmd, 3092 - unsigned long address, bool freeze, struct folio *folio) 3092 + unsigned long address, bool freeze) 3093 3093 { 3094 3094 spinlock_t *ptl; 3095 3095 struct mmu_notifier_range range; ··· 3099 3099 (address & HPAGE_PMD_MASK) + HPAGE_PMD_SIZE); 3100 3100 mmu_notifier_invalidate_range_start(&range); 3101 3101 ptl = pmd_lock(vma->vm_mm, pmd); 3102 - split_huge_pmd_locked(vma, range.start, pmd, freeze, folio); 3102 + split_huge_pmd_locked(vma, range.start, pmd, freeze); 3103 3103 spin_unlock(ptl); 3104 3104 mmu_notifier_invalidate_range_end(&range); 3105 3105 } 3106 3106 3107 3107 void split_huge_pmd_address(struct vm_area_struct *vma, unsigned long address, 3108 - bool freeze, struct folio *folio) 3108 + bool freeze) 3109 3109 { 3110 3110 pmd_t *pmd = mm_find_pmd(vma->vm_mm, address); 3111 3111 3112 3112 if (!pmd) 3113 3113 return; 3114 3114 3115 - __split_huge_pmd(vma, pmd, address, freeze, folio); 3115 + __split_huge_pmd(vma, pmd, address, freeze); 3116 3116 } 3117 3117 3118 3118 static inline void split_huge_pmd_if_needed(struct vm_area_struct *vma, unsigned long address) ··· 3124 3124 if (!IS_ALIGNED(address, HPAGE_PMD_SIZE) && 3125 3125 range_in_vma(vma, ALIGN_DOWN(address, HPAGE_PMD_SIZE), 3126 3126 ALIGN(address, HPAGE_PMD_SIZE))) 3127 - split_huge_pmd_address(vma, address, false, NULL); 3127 + split_huge_pmd_address(vma, address, false); 3128 3128 } 3129 3129 3130 3130 void vma_adjust_trans_huge(struct vm_area_struct *vma,
+2 -2
mm/memory.c
··· 1808 1808 next = pmd_addr_end(addr, end); 1809 1809 if (is_swap_pmd(*pmd) || pmd_trans_huge(*pmd) || pmd_devmap(*pmd)) { 1810 1810 if (next - addr != HPAGE_PMD_SIZE) 1811 - __split_huge_pmd(vma, pmd, addr, false, NULL); 1811 + __split_huge_pmd(vma, pmd, addr, false); 1812 1812 else if (zap_huge_pmd(tlb, vma, pmd, addr)) { 1813 1813 addr = next; 1814 1814 continue; ··· 5932 5932 5933 5933 split: 5934 5934 /* COW or write-notify handled on pte level: split pmd. */ 5935 - __split_huge_pmd(vma, vmf->pmd, vmf->address, false, NULL); 5935 + __split_huge_pmd(vma, vmf->pmd, vmf->address, false); 5936 5936 5937 5937 return VM_FAULT_FALLBACK; 5938 5938 }
+1 -1
mm/mprotect.c
··· 379 379 if (is_swap_pmd(_pmd) || pmd_trans_huge(_pmd) || pmd_devmap(_pmd)) { 380 380 if ((next - addr != HPAGE_PMD_SIZE) || 381 381 pgtable_split_needed(vma, cp_flags)) { 382 - __split_huge_pmd(vma, pmd, addr, false, NULL); 382 + __split_huge_pmd(vma, pmd, addr, false); 383 383 /* 384 384 * For file-backed, the pmd could have been 385 385 * cleared; make sure pmd populated if
+2 -2
mm/rmap.c
··· 1944 1944 * restart so we can process the PTE-mapped THP. 1945 1945 */ 1946 1946 split_huge_pmd_locked(vma, pvmw.address, 1947 - pvmw.pmd, false, folio); 1947 + pvmw.pmd, false); 1948 1948 flags &= ~TTU_SPLIT_HUGE_PMD; 1949 1949 page_vma_mapped_walk_restart(&pvmw); 1950 1950 continue; ··· 2320 2320 if (!pvmw.pte) { 2321 2321 if (flags & TTU_SPLIT_HUGE_PMD) { 2322 2322 split_huge_pmd_locked(vma, pvmw.address, 2323 - pvmw.pmd, true, NULL); 2323 + pvmw.pmd, true); 2324 2324 ret = false; 2325 2325 page_vma_mapped_walk_done(&pvmw); 2326 2326 break;