Commit 401035d5 authored by Aneesh Kumar K.V's avatar Aneesh Kumar K.V Committed by Linus Torvalds

mm/debug_vm_pgtable: avoid none pte in pte_clear_test

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

[aneesh.kumar@linux.ibm.com: avoid kernel crash with riscv]
  Link: https://lkml.kernel.org/r/20201015033206.140550-1-aneesh.kumar@linux.ibm.comSigned-off-by: default avatarAneesh Kumar K.V <aneesh.kumar@linux.ibm.com>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Reviewed-by: default avatarAnshuman Khandual <anshuman.khandual@arm.com>
Cc: Christophe Leroy <christophe.leroy@csgroup.eu>
Cc: Michael Ellerman <mpe@ellerman.id.au>
Cc: Nathan Chancellor <natechancellor@gmail.com>
Cc: Guenter Roeck <linux@roeck-us.net>
Cc: Paul Walmsley <paul.walmsley@sifive.com>
Cc: Albert Ou <aou@eecs.berkeley.edu>
Cc: Palmer Dabbelt <palmer@dabbelt.com>
Link: https://lkml.kernel.org/r/20200902114222.181353-14-aneesh.kumar@linux.ibm.comSigned-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent 2b1dd67a
...@@ -540,12 +540,15 @@ static void __init pgd_populate_tests(struct mm_struct *mm, pgd_t *pgdp, ...@@ -540,12 +540,15 @@ static void __init pgd_populate_tests(struct mm_struct *mm, pgd_t *pgdp,
#endif /* PAGETABLE_P4D_FOLDED */ #endif /* PAGETABLE_P4D_FOLDED */
static void __init pte_clear_tests(struct mm_struct *mm, pte_t *ptep, static void __init pte_clear_tests(struct mm_struct *mm, pte_t *ptep,
unsigned long vaddr) unsigned long pfn, unsigned long vaddr,
pgprot_t prot)
{ {
pte_t pte = ptep_get(ptep); pte_t pte = pfn_pte(pfn, prot);
pr_debug("Validating PTE clear\n"); pr_debug("Validating PTE clear\n");
#ifndef CONFIG_RISCV
pte = __pte(pte_val(pte) | RANDOM_ORVALUE); pte = __pte(pte_val(pte) | RANDOM_ORVALUE);
#endif
set_pte_at(mm, vaddr, ptep, pte); set_pte_at(mm, vaddr, ptep, pte);
barrier(); barrier();
pte_clear(mm, vaddr, ptep); pte_clear(mm, vaddr, ptep);
...@@ -996,7 +999,7 @@ static int __init debug_vm_pgtable(void) ...@@ -996,7 +999,7 @@ static int __init debug_vm_pgtable(void)
ptl = pte_lockptr(mm, pmdp); ptl = pte_lockptr(mm, pmdp);
spin_lock(ptl); spin_lock(ptl);
pte_clear_tests(mm, ptep, vaddr); pte_clear_tests(mm, ptep, pte_aligned, vaddr, prot);
pte_advanced_tests(mm, vma, ptep, pte_aligned, vaddr, prot); pte_advanced_tests(mm, vma, ptep, pte_aligned, vaddr, prot);
pte_unmap_unlock(ptep, ptl); pte_unmap_unlock(ptep, ptl);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment