lkml.org 
[lkml]   [2020]   [Nov]   [30]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    From
    Subject[RFC PATCH 0/3] Fix several bugs in KVM stage 2 translation
    Date
    Several problems about KVM stage 2 translation were found when testing based
    on the mainline code. The following is description of the problems and the
    corresponding patchs.

    When installing a new pte entry or updating an old valid entry in stage 2
    translation, we use get_page()/put_page() to record page_count of the page-table
    pages. PATCH 1/3 aims to fix incorrect use of get_page()/put_page() in stage 2,
    which might make page-table pages unable to be freed when unmapping a range.

    When dirty logging of a guest with hugepages is finished, we should merge tables
    back into a block entry if adjustment of huge mapping is found necessary.
    In addition to installing the block entry, mapping of the lower-levels for the
    block should also be unmapped to avoid multiple TLB entries.
    PATCH 2/3 adds unmap operation when merge tables into a block entry.

    The rewrite of page-table code and fault handling add two different handlers
    for "just relaxing permissions" and "map by stage2 page-table walk", that's
    great improvement. Yet, in function user_mem_abort(), conditions where we choose
    the above two fault handlers are not strictly distinguished. This will causes
    guest errors such as infinite-loop (soft lockup will occur in result), because of
    calling the inappropriate fault handler. So, a solution that can strictly
    distinguish conditions is introduced in PATCH 3/3.

    Yanan Wang (3):
    KVM: arm64: Fix possible memory leak in kvm stage2
    KVM: arm64: Fix handling of merging tables into a block entry
    KVM: arm64: Add usage of stage 2 fault lookup level in
    user_mem_abort()

    arch/arm64/include/asm/esr.h | 1 +
    arch/arm64/include/asm/kvm_emulate.h | 5 +++++
    arch/arm64/kvm/hyp/pgtable.c | 22 +++++++++++++++++-----
    arch/arm64/kvm/mmu.c | 11 +++++++++--
    4 files changed, 32 insertions(+), 7 deletions(-)

    --
    2.19.1

    \
     
     \ /
      Last update: 2020-11-30 13:23    [W:2.566 / U:0.044 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site