On 09/02/2020 05:12 PM, Aneesh Kumar K.V wrote:
> Make sure we call pte accessors with correct lock held.
> 
> Signed-off-by: Aneesh Kumar K.V <aneesh.ku...@linux.ibm.com>
> ---
>  mm/debug_vm_pgtable.c | 35 ++++++++++++++++++++++-------------
>  1 file changed, 22 insertions(+), 13 deletions(-)
> 
> diff --git a/mm/debug_vm_pgtable.c b/mm/debug_vm_pgtable.c
> index f59cf6a9b05e..2bc1952e5f83 100644
> --- a/mm/debug_vm_pgtable.c
> +++ b/mm/debug_vm_pgtable.c
> @@ -1035,30 +1035,39 @@ static int __init debug_vm_pgtable(void)
>  
>       hugetlb_basic_tests(pte_aligned, prot);
>  
> -     pte_clear_tests(mm, ptep, vaddr);
> -     pmd_clear_tests(mm, pmdp);
> -     pud_clear_tests(mm, pudp);
> -     p4d_clear_tests(mm, p4dp);
> -     pgd_clear_tests(mm, pgdp);
> +     /*
> +      * Page table modifying tests. They need to hold
> +      * proper page table lock.
> +      */
>  
>       ptl = pte_lockptr(mm, pmdp);
>       spin_lock(ptl);
> -
> +     pte_clear_tests(mm, ptep, vaddr);
>       pte_advanced_tests(mm, vma, ptep, pte_aligned, vaddr, prot);
> -     pmd_advanced_tests(mm, vma, pmdp, pmd_aligned, vaddr, prot);
> -     pud_advanced_tests(mm, vma, pudp, pud_aligned, vaddr, prot);
> -     hugetlb_advanced_tests(mm, vma, ptep, pte_aligned, vaddr, prot);
> -
> +     pte_unmap_unlock(ptep, ptl);
>  
> +     ptl = pmd_lock(mm, pmdp);
> +     pmd_clear_tests(mm, pmdp);
> +     pmd_advanced_tests(mm, vma, pmdp, pmd_aligned, vaddr, prot);
>       pmd_huge_tests(pmdp, pmd_aligned, prot);
> +     pmd_populate_tests(mm, pmdp, saved_ptep);
> +     spin_unlock(ptl);
> +
> +     ptl = pud_lock(mm, pudp);
> +     pud_clear_tests(mm, pudp);
> +     pud_advanced_tests(mm, vma, pudp, pud_aligned, vaddr, prot);
>       pud_huge_tests(pudp, pud_aligned, prot);
> +     pud_populate_tests(mm, pudp, saved_pmdp);
> +     spin_unlock(ptl);
>  
> -     pte_unmap_unlock(ptep, ptl);
> +     hugetlb_advanced_tests(mm, vma, ptep, pte_aligned, vaddr, prot);
>  
> -     pmd_populate_tests(mm, pmdp, saved_ptep);
> -     pud_populate_tests(mm, pudp, saved_pmdp);
> +     spin_lock(&mm->page_table_lock);
> +     p4d_clear_tests(mm, p4dp);
> +     pgd_clear_tests(mm, pgdp);
>       p4d_populate_tests(mm, p4dp, saved_pudp);
>       pgd_populate_tests(mm, pgdp, saved_p4dp);
> +     spin_unlock(&mm->page_table_lock);
>  
>       p4d_free(mm, saved_p4dp);
>       pud_free(mm, saved_pudp);
> 

This patch, in itself looks good but will probably require folding with
the previous one to prevent the git bisect problem on arm64.

Reply via email to