lkml.org 
[lkml]   [2021]   [Feb]   [22]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.4 35/35] kvm: check tlbs_dirty directly
    Date
    From: Lai Jiangshan <laijs@linux.alibaba.com>

    commit 88bf56d04bc3564542049ec4ec168a8b60d0b48c upstream

    In kvm_mmu_notifier_invalidate_range_start(), tlbs_dirty is used as:
    need_tlb_flush |= kvm->tlbs_dirty;
    with need_tlb_flush's type being int and tlbs_dirty's type being long.

    It means that tlbs_dirty is always used as int and the higher 32 bits
    is useless. We need to check tlbs_dirty in a correct way and this
    change checks it directly without propagating it to need_tlb_flush.

    Note: it's _extremely_ unlikely this neglecting of higher 32 bits can
    cause problems in practice. It would require encountering tlbs_dirty
    on a 4 billion count boundary, and KVM would need to be using shadow
    paging or be running a nested guest.

    Cc: stable@vger.kernel.org
    Fixes: a4ee1ca4a36e ("KVM: MMU: delay flush all tlbs on sync_page path")
    Signed-off-by: Lai Jiangshan <laijs@linux.alibaba.com>
    Message-Id: <20201217154118.16497-1-jiangshanlai@gmail.com>
    Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
    [sudip: adjust context]
    Signed-off-by: Sudip Mukherjee <sudipm.mukherjee@gmail.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    ---
    virt/kvm/kvm_main.c | 3 +--
    1 file changed, 1 insertion(+), 2 deletions(-)

    --- a/virt/kvm/kvm_main.c
    +++ b/virt/kvm/kvm_main.c
    @@ -346,9 +346,8 @@ static void kvm_mmu_notifier_invalidate_
    */
    kvm->mmu_notifier_count++;
    need_tlb_flush = kvm_unmap_hva_range(kvm, start, end);
    - need_tlb_flush |= kvm->tlbs_dirty;
    /* we've to flush the tlb before the pages can be freed */
    - if (need_tlb_flush)
    + if (need_tlb_flush || kvm->tlbs_dirty)
    kvm_flush_remote_tlbs(kvm);

    spin_unlock(&kvm->mmu_lock);

    \
     
     \ /
      Last update: 2021-02-22 14:40    [W:4.201 / U:0.064 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site