lkml.org 
[lkml]   [2020]   [Jun]   [23]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.7 064/477] powerpc/book3s64/radix/tlb: Determine hugepage flush correctly
    Date
    From: Aneesh Kumar K.V <aneesh.kumar@linux.ibm.com>

    [ Upstream commit 8f53f9c0f68ab2168f637494b9e24034899c1310 ]

    With a 64K page size flush with start and end:

    (start, end) = (721f680d0000, 721f680e0000)

    results in:

    (hstart, hend) = (721f68200000, 721f68000000)

    ie. hstart is above hend, which indicates no huge page flush is
    needed.

    However the current logic incorrectly sets hflush = true in this case,
    because hstart != hend.

    That causes us to call __tlbie_va_range() passing hstart/hend, to do a
    huge page flush even though we don't need to. __tlbie_va_range() will
    skip the actual tlbie operation for start > end. But it will still end
    up calling fixup_tlbie_va_range() and doing the TLB fixups in there,
    which is harmless but unnecessary work.

    Reported-by: Bharata B Rao <bharata@linux.ibm.com>
    Signed-off-by: Aneesh Kumar K.V <aneesh.kumar@linux.ibm.com>
    Reviewed-by: Nicholas Piggin <npiggin@gmail.com>
    [mpe: Drop else case, hflush is already false, flesh out change log]
    Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
    Link: https://lore.kernel.org/r/20200513030616.152288-1-aneesh.kumar@linux.ibm.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    arch/powerpc/mm/book3s64/radix_tlb.c | 4 +---
    1 file changed, 1 insertion(+), 3 deletions(-)

    diff --git a/arch/powerpc/mm/book3s64/radix_tlb.c b/arch/powerpc/mm/book3s64/radix_tlb.c
    index 758ade2c2b6ed..b5cc9b23cf024 100644
    --- a/arch/powerpc/mm/book3s64/radix_tlb.c
    +++ b/arch/powerpc/mm/book3s64/radix_tlb.c
    @@ -884,9 +884,7 @@ is_local:
    if (IS_ENABLED(CONFIG_TRANSPARENT_HUGEPAGE)) {
    hstart = (start + PMD_SIZE - 1) & PMD_MASK;
    hend = end & PMD_MASK;
    - if (hstart == hend)
    - hflush = false;
    - else
    + if (hstart < hend)
    hflush = true;
    }

    --
    2.25.1


    \
     
     \ /
      Last update: 2020-06-23 23:44    [W:4.312 / U:0.008 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site