lkml.org 
[lkml]   [2021]   [Jul]   [9]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.14 13/25] mm: page_vma_mapped_walk(): crossing page table boundary
    Date
    From: Hugh Dickins <hughd@google.com>

    [ Upstream commit 448282487483d6fa5b2eeeafaa0acc681e544a9c ]

    page_vma_mapped_walk() cleanup: adjust the test for crossing page table
    boundary - I believe pvmw->address is always page-aligned, but nothing
    else here assumed that; and remember to reset pvmw->pte to NULL after
    unmapping the page table, though I never saw any bug from that.

    Link: https://lkml.kernel.org/r/799b3f9c-2a9e-dfef-5d89-26e9f76fd97@google.com
    Signed-off-by: Hugh Dickins <hughd@google.com>
    Acked-by: Kirill A. Shutemov <kirill.shutemov@linux.intel.com>
    Cc: Alistair Popple <apopple@nvidia.com>
    Cc: Matthew Wilcox <willy@infradead.org>
    Cc: Peter Xu <peterx@redhat.com>
    Cc: Ralph Campbell <rcampbell@nvidia.com>
    Cc: Wang Yugui <wangyugui@e16-tech.com>
    Cc: Will Deacon <will@kernel.org>
    Cc: Yang Shi <shy828301@gmail.com>
    Cc: Zi Yan <ziy@nvidia.com>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    mm/page_vma_mapped.c | 8 ++++----
    1 file changed, 4 insertions(+), 4 deletions(-)

    diff --git a/mm/page_vma_mapped.c b/mm/page_vma_mapped.c
    index 92d7f574b8ab..2463ba78959b 100644
    --- a/mm/page_vma_mapped.c
    +++ b/mm/page_vma_mapped.c
    @@ -239,16 +239,16 @@ bool page_vma_mapped_walk(struct page_vma_mapped_walk *pvmw)
    if (pvmw->address >= end)
    return not_found(pvmw);
    /* Did we cross page table boundary? */
    - if (pvmw->address % PMD_SIZE == 0) {
    - pte_unmap(pvmw->pte);
    + if ((pvmw->address & (PMD_SIZE - PAGE_SIZE)) == 0) {
    if (pvmw->ptl) {
    spin_unlock(pvmw->ptl);
    pvmw->ptl = NULL;
    }
    + pte_unmap(pvmw->pte);
    + pvmw->pte = NULL;
    goto restart;
    - } else {
    - pvmw->pte++;
    }
    + pvmw->pte++;
    } while (pte_none(*pvmw->pte));

    if (!pvmw->ptl) {
    --
    2.30.2


    \
     
     \ /
      Last update: 2021-07-09 15:20    [W:3.920 / U:0.592 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site