Message ID | 20200902114222.181353-11-aneesh.kumar@linux.ibm.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | mm/debug_vm_pgtable fixes | expand |
On 09/02/2020 05:12 PM, Aneesh Kumar K.V wrote: > Architectures like ppc64 use deposited page table while updating the > huge pte entries. > > Signed-off-by: Aneesh Kumar K.V <aneesh.kumar@linux.ibm.com> > --- > mm/debug_vm_pgtable.c | 10 +++++++--- > 1 file changed, 7 insertions(+), 3 deletions(-) > > diff --git a/mm/debug_vm_pgtable.c b/mm/debug_vm_pgtable.c > index 2bc1952e5f83..26023d990bd0 100644 > --- a/mm/debug_vm_pgtable.c > +++ b/mm/debug_vm_pgtable.c > @@ -154,7 +154,7 @@ static void __init pmd_basic_tests(unsigned long pfn, pgprot_t prot) > static void __init pmd_advanced_tests(struct mm_struct *mm, > struct vm_area_struct *vma, pmd_t *pmdp, > unsigned long pfn, unsigned long vaddr, > - pgprot_t prot) > + pgprot_t prot, pgtable_t pgtable) > { > pmd_t pmd; > > @@ -165,6 +165,8 @@ static void __init pmd_advanced_tests(struct mm_struct *mm, > /* Align the address wrt HPAGE_PMD_SIZE */ > vaddr = (vaddr & HPAGE_PMD_MASK) + HPAGE_PMD_SIZE; > > + pgtable_trans_huge_deposit(mm, pmdp, pgtable); > + > pmd = pmd_mkhuge(pfn_pmd(pfn, prot)); > set_pmd_at(mm, vaddr, pmdp, pmd); > pmdp_set_wrprotect(mm, vaddr, pmdp); > @@ -193,6 +195,8 @@ static void __init pmd_advanced_tests(struct mm_struct *mm, > pmdp_test_and_clear_young(vma, vaddr, pmdp); > pmd = READ_ONCE(*pmdp); > WARN_ON(pmd_young(pmd)); > + > + pgtable = pgtable_trans_huge_withdraw(mm, pmdp); > } > > static void __init pmd_leaf_tests(unsigned long pfn, pgprot_t prot) > @@ -371,7 +375,7 @@ static void __init pud_basic_tests(unsigned long pfn, pgprot_t prot) { } > static void __init pmd_advanced_tests(struct mm_struct *mm, > struct vm_area_struct *vma, pmd_t *pmdp, > unsigned long pfn, unsigned long vaddr, > - pgprot_t prot) > + pgprot_t prot, pgtable_t pgtable) > { > } > static void __init pud_advanced_tests(struct mm_struct *mm, > @@ -1048,7 +1052,7 @@ static int __init debug_vm_pgtable(void) > > ptl = pmd_lock(mm, pmdp); > pmd_clear_tests(mm, pmdp); > - pmd_advanced_tests(mm, vma, pmdp, pmd_aligned, vaddr, prot); > + pmd_advanced_tests(mm, vma, pmdp, pmd_aligned, vaddr, prot, saved_ptep); > pmd_huge_tests(pmdp, pmd_aligned, prot); > pmd_populate_tests(mm, pmdp, saved_ptep); > spin_unlock(ptl); > Moving this down further in the series has not really helped the possible git bisect problem on arm64. Nonetheless, the patch in itself, makes sense. Reviewed-by: Anshuman Khandual <anshuman.khandual@arm.com>
diff --git a/mm/debug_vm_pgtable.c b/mm/debug_vm_pgtable.c index 2bc1952e5f83..26023d990bd0 100644 --- a/mm/debug_vm_pgtable.c +++ b/mm/debug_vm_pgtable.c @@ -154,7 +154,7 @@ static void __init pmd_basic_tests(unsigned long pfn, pgprot_t prot) static void __init pmd_advanced_tests(struct mm_struct *mm, struct vm_area_struct *vma, pmd_t *pmdp, unsigned long pfn, unsigned long vaddr, - pgprot_t prot) + pgprot_t prot, pgtable_t pgtable) { pmd_t pmd; @@ -165,6 +165,8 @@ static void __init pmd_advanced_tests(struct mm_struct *mm, /* Align the address wrt HPAGE_PMD_SIZE */ vaddr = (vaddr & HPAGE_PMD_MASK) + HPAGE_PMD_SIZE; + pgtable_trans_huge_deposit(mm, pmdp, pgtable); + pmd = pmd_mkhuge(pfn_pmd(pfn, prot)); set_pmd_at(mm, vaddr, pmdp, pmd); pmdp_set_wrprotect(mm, vaddr, pmdp); @@ -193,6 +195,8 @@ static void __init pmd_advanced_tests(struct mm_struct *mm, pmdp_test_and_clear_young(vma, vaddr, pmdp); pmd = READ_ONCE(*pmdp); WARN_ON(pmd_young(pmd)); + + pgtable = pgtable_trans_huge_withdraw(mm, pmdp); } static void __init pmd_leaf_tests(unsigned long pfn, pgprot_t prot) @@ -371,7 +375,7 @@ static void __init pud_basic_tests(unsigned long pfn, pgprot_t prot) { } static void __init pmd_advanced_tests(struct mm_struct *mm, struct vm_area_struct *vma, pmd_t *pmdp, unsigned long pfn, unsigned long vaddr, - pgprot_t prot) + pgprot_t prot, pgtable_t pgtable) { } static void __init pud_advanced_tests(struct mm_struct *mm, @@ -1048,7 +1052,7 @@ static int __init debug_vm_pgtable(void) ptl = pmd_lock(mm, pmdp); pmd_clear_tests(mm, pmdp); - pmd_advanced_tests(mm, vma, pmdp, pmd_aligned, vaddr, prot); + pmd_advanced_tests(mm, vma, pmdp, pmd_aligned, vaddr, prot, saved_ptep); pmd_huge_tests(pmdp, pmd_aligned, prot); pmd_populate_tests(mm, pmdp, saved_ptep); spin_unlock(ptl);
Architectures like ppc64 use deposited page table while updating the huge pte entries. Signed-off-by: Aneesh Kumar K.V <aneesh.kumar@linux.ibm.com> --- mm/debug_vm_pgtable.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-)