mm-allocate-thp-on-hugezeropage-wp-fault.patch removed from -mm tree
The quilt patch titled
Subject: mm: allocate THP on hugezeropage wp-fault
has been removed from the -mm tree. Its filename was
mm-allocate-thp-on-hugezeropage-wp-fault.patch
This patch was dropped because it was merged into the mm-stable branch of git://git.kernel.org/pub/scm/linux/kernel/git/akpm/mm
------------------------------------------------------
From: Dev Jain <[email protected]>
Subject: mm: allocate THP on hugezeropage wp-fault
Date: Tue, 8 Oct 2024 11:47:46 +0530
Introduce do_huge_zero_wp_pmd() to handle wp-fault on a hugezeropage and replace it with a PMD-mapped THP. Remember to flush TLB entry corresponding to the hugezeropage. In case of failure, fallback to splitting the PMD.
---
mm/huge_memory.c | 41 ++++++++++++++++++++++++++++++++++++++++- 1 file changed, 40 insertions(+), 1 deletion(-)
mm/huge_memory.c renamed from mm/huge_memory.c~mm-allocate-thp-on-hugezeropage-wp-fault +40 -1
@@ -1781,6 +1781,38 @@ unlock:spin_unlock (vmf->ptl); } +static vm_fault_t do_huge_zero_wp_pmd (struct vm_fault *vmf) +{ +unsigned long haddr = vmf->address &HPAGE_PMD_MASK ; +struct vm_area_struct *vma = vmf->vma; +struct mmu_notifier_range range; +struct folio *folio; +vm_fault_t ret =0 ; + + folio =vma_alloc_anon_folio_pmd (vma, vmf->address); +if (unlikely (!folio)) +return VM_FAULT_FALLBACK ; + +mmu_notifier_range_init (&range,MMU_NOTIFY_CLEAR ,0 , vma->vm_mm, haddr, + haddr +HPAGE_PMD_SIZE ); +mmu_notifier_invalidate_range_start (&range); + vmf->ptl =pmd_lock (vma->vm_mm, vmf->pmd); +if (unlikely (!pmd_same (pmdp_get (vmf->pmd), vmf->orig_pmd))) + goto release; + ret =check_stable_address_space (vma->vm_mm); +if (ret) + goto release; + (void )pmdp_huge_clear_flush (vma, haddr, vmf->pmd); +map_anon_folio_pmd (folio, vmf->pmd, vma, haddr); + goto unlock; +release: +folio_put (folio); +unlock: +spin_unlock (vmf->ptl); +mmu_notifier_invalidate_range_end (&range); +return ret; +} +vm_fault_t do_huge_pmd_wp_page (struct vm_fault *vmf) {const bool unshare = vmf->flags &FAULT_FLAG_UNSHARE ;
@@ -1793,8 +1825,15 @@ vm_fault_t do_huge_pmd_wp_page(struct vm vmf->ptl =pmd_lockptr (vma->vm_mm, vmf->pmd);VM_BUG_ON_VMA (!vma->anon_vma, vma); -if (is_huge_zero_pmd (orig_pmd)) +if (is_huge_zero_pmd (orig_pmd)) { +vm_fault_t ret =do_huge_zero_wp_pmd (vmf); + +if (!(ret &VM_FAULT_FALLBACK )) +return ret; + +/* Fallback to splitting PMD if THP cannot be allocated */ goto fallback; + }spin_lock (vmf->ptl);
_
Patches currently in -mm which might be from [email protected] are