lkml.org 
[lkml]   [2020]   [Sep]   [15]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.8 157/177] kvm x86/mmu: use KVM_REQ_MMU_SYNC to sync when needed
    Date
    From: Lai Jiangshan <laijs@linux.alibaba.com>

    commit f6f6195b888c28a0b59ceb0562daff92a2be86c3 upstream.

    When kvm_mmu_get_page() gets a page with unsynced children, the spt
    pagetable is unsynchronized with the guest pagetable. But the
    guest might not issue a "flush" operation on it when the pagetable
    entry is changed from zero or other cases. The hypervisor has the
    responsibility to synchronize the pagetables.

    KVM behaved as above for many years, But commit 8c8560b83390
    ("KVM: x86/mmu: Use KVM_REQ_TLB_FLUSH_CURRENT for MMU specific flushes")
    inadvertently included a line of code to change it without giving any
    reason in the changelog. It is clear that the commit's intention was to
    change KVM_REQ_TLB_FLUSH -> KVM_REQ_TLB_FLUSH_CURRENT, so we don't
    needlessly flush other contexts; however, one of the hunks changed
    a nearby KVM_REQ_MMU_SYNC instead. This patch changes it back.

    Link: https://lore.kernel.org/lkml/20200320212833.3507-26-sean.j.christopherson@intel.com/
    Cc: Sean Christopherson <sean.j.christopherson@intel.com>
    Cc: Vitaly Kuznetsov <vkuznets@redhat.com>
    Signed-off-by: Lai Jiangshan <laijs@linux.alibaba.com>
    Message-Id: <20200902135421.31158-1-jiangshanlai@gmail.com>
    fixes: 8c8560b83390 ("KVM: x86/mmu: Use KVM_REQ_TLB_FLUSH_CURRENT for MMU specific flushes")
    Cc: stable@vger.kernel.org
    Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    ---
    arch/x86/kvm/mmu/mmu.c | 2 +-
    1 file changed, 1 insertion(+), 1 deletion(-)

    --- a/arch/x86/kvm/mmu/mmu.c
    +++ b/arch/x86/kvm/mmu/mmu.c
    @@ -2521,7 +2521,7 @@ static struct kvm_mmu_page *kvm_mmu_get_
    }

    if (sp->unsync_children)
    - kvm_make_request(KVM_REQ_TLB_FLUSH_CURRENT, vcpu);
    + kvm_make_request(KVM_REQ_MMU_SYNC, vcpu);

    __clear_sp_write_flooding_count(sp);
    trace_kvm_mmu_get_page(sp, false);

    \
     
     \ /
      Last update: 2020-09-15 17:10    [W:6.202 / U:0.004 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site