On Fri, Jun 21, 2024 at 10:25:01AM -0400, Peter Xu wrote: > +pmd_t pudp_invalidate(struct vm_area_struct *vma, unsigned long address, > + pud_t *pudp) > +{ > + unsigned long old_pud; > + > + VM_WARN_ON_ONCE(!pmd_present(*pmdp)); > + old_pmd = pmd_hugepage_update(vma->vm_mm, address, pmdp, _PAGE_PRESENT, _PAGE_INVALID); > + flush_pmd_tlb_range(vma, address, address + HPAGE_PMD_SIZE); > + return __pmd(old_pmd); > +} I'll need an amend at least here, and my test harness won't catch it even if it's a mistake as silly as it could be.. My apologies for such noise. Below is what I plan to squash into this patch when I repost v2. ===8<=== diff --git a/arch/powerpc/mm/book3s64/pgtable.c b/arch/powerpc/mm/book3s64/pgtable.c index c6ae969020e0..ea2c83634434 100644 --- a/arch/powerpc/mm/book3s64/pgtable.c +++ b/arch/powerpc/mm/book3s64/pgtable.c @@ -176,15 +176,15 @@ pmd_t pmdp_invalidate(struct vm_area_struct *vma, unsigned long address, return __pmd(old_pmd); } -pmd_t pudp_invalidate(struct vm_area_struct *vma, unsigned long address, +pud_t pudp_invalidate(struct vm_area_struct *vma, unsigned long address, pud_t *pudp) { unsigned long old_pud; - VM_WARN_ON_ONCE(!pmd_present(*pmdp)); - old_pmd = pmd_hugepage_update(vma->vm_mm, address, pmdp, _PAGE_PRESENT, _PAGE_INVALID); - flush_pmd_tlb_range(vma, address, address + HPAGE_PMD_SIZE); - return __pmd(old_pmd); + VM_WARN_ON_ONCE(!pud_present(*pudp)); + old_pud = pud_hugepage_update(vma->vm_mm, address, pudp, _PAGE_PRESENT, _PAGE_INVALID); + flush_pud_tlb_range(vma, address, address + HPAGE_PUD_SIZE); + return __pud(old_pud); } pmd_t pmdp_huge_get_and_clear_full(struct vm_area_struct *vma, ===8<=== -- Peter Xu