lkml.org 
[lkml]   [2023]   [May]   [22]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[PATCH 16/31] mm/debug_vm_pgtable,page_table_check: warn pte map fails
    Failures here would be surprising: pte_advanced_tests() and
    pte_clear_tests() and __page_table_check_pte_clear_range() each
    issue a warning if pte_offset_map() or pte_offset_map_lock() fails.

    Signed-off-by: Hugh Dickins <hughd@google.com>
    ---
    mm/debug_vm_pgtable.c | 9 ++++++++-
    mm/page_table_check.c | 2 ++
    2 files changed, 10 insertions(+), 1 deletion(-)

    diff --git a/mm/debug_vm_pgtable.c b/mm/debug_vm_pgtable.c
    index c54177aabebd..ee119e33fef1 100644
    --- a/mm/debug_vm_pgtable.c
    +++ b/mm/debug_vm_pgtable.c
    @@ -138,6 +138,9 @@ static void __init pte_advanced_tests(struct pgtable_debug_args *args)
    return;

    pr_debug("Validating PTE advanced\n");
    + if (WARN_ON(!args->ptep))
    + return;
    +
    pte = pfn_pte(args->pte_pfn, args->page_prot);
    set_pte_at(args->mm, args->vaddr, args->ptep, pte);
    flush_dcache_page(page);
    @@ -619,6 +622,9 @@ static void __init pte_clear_tests(struct pgtable_debug_args *args)
    * the unexpected overhead of cache flushing is acceptable.
    */
    pr_debug("Validating PTE clear\n");
    + if (WARN_ON(!args->ptep))
    + return;
    +
    #ifndef CONFIG_RISCV
    pte = __pte(pte_val(pte) | RANDOM_ORVALUE);
    #endif
    @@ -1377,7 +1383,8 @@ static int __init debug_vm_pgtable(void)
    args.ptep = pte_offset_map_lock(args.mm, args.pmdp, args.vaddr, &ptl);
    pte_clear_tests(&args);
    pte_advanced_tests(&args);
    - pte_unmap_unlock(args.ptep, ptl);
    + if (args.ptep)
    + pte_unmap_unlock(args.ptep, ptl);

    ptl = pmd_lock(args.mm, args.pmdp);
    pmd_clear_tests(&args);
    diff --git a/mm/page_table_check.c b/mm/page_table_check.c
    index 25d8610c0042..0c511330dbc9 100644
    --- a/mm/page_table_check.c
    +++ b/mm/page_table_check.c
    @@ -240,6 +240,8 @@ void __page_table_check_pte_clear_range(struct mm_struct *mm,
    pte_t *ptep = pte_offset_map(&pmd, addr);
    unsigned long i;

    + if (WARN_ON(!ptep))
    + return;
    for (i = 0; i < PTRS_PER_PTE; i++) {
    __page_table_check_pte_clear(mm, addr, *ptep);
    addr += PAGE_SIZE;
    --
    2.35.3
    \
     
     \ /
      Last update: 2023-05-22 07:11    [W:4.092 / U:0.204 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site