pte_clear_tests operate on an existing pte entry. Make sure that is not a none
pte entry.

Signed-off-by: Aneesh Kumar K.V <aneesh.ku...@linux.ibm.com>
---
 mm/debug_vm_pgtable.c | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/mm/debug_vm_pgtable.c b/mm/debug_vm_pgtable.c
index 09ce9974c187..7d9f8e1d790f 100644
--- a/mm/debug_vm_pgtable.c
+++ b/mm/debug_vm_pgtable.c
@@ -531,7 +531,7 @@ static void __init pgd_populate_tests(struct mm_struct *mm, 
pgd_t *pgdp,
 static void __init pte_clear_tests(struct mm_struct *mm, pte_t *ptep,
                                   unsigned long vaddr)
 {
-       pte_t pte = ptep_get(ptep);
+       pte_t pte =  ptep_get_and_clear(mm, vaddr, ptep);
 
        pr_debug("Validating PTE clear\n");
        pte = __pte(pte_val(pte) | RANDOM_ORVALUE);
@@ -929,7 +929,7 @@ static int __init debug_vm_pgtable(void)
        p4d_t *p4dp, *saved_p4dp;
        pud_t *pudp, *saved_pudp;
        pmd_t *pmdp, *saved_pmdp, pmd;
-       pte_t *ptep;
+       pte_t *ptep, pte;
        pgtable_t saved_ptep;
        pgprot_t prot, protnone;
        phys_addr_t paddr;
@@ -1034,6 +1034,8 @@ static int __init debug_vm_pgtable(void)
         */
 
        ptep = pte_alloc_map_lock(mm, pmdp, vaddr, &ptl);
+       pte = pfn_pte(pte_aligned, prot);
+       set_pte_at(mm, vaddr, ptep, pte);
        pte_clear_tests(mm, ptep, vaddr);
        pte_advanced_tests(mm, vma, ptep, pte_aligned, vaddr, prot);
        pte_unmap_unlock(ptep, ptl);
-- 
2.26.2

Reply via email to