lkml.org 
[lkml]   [2021]   [Oct]   [22]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    From
    SubjectRe: [PATCH 2/3] KVM: x86/mmu: Drop a redundant remote TLB flush in kvm_zap_gfn_range()
    Date
    On 22.10.2021 03:00, Sean Christopherson wrote:
    > Remove an unnecessary remote TLB flush in kvm_zap_gfn_range() now that
    > said function holds mmu_lock for write for its entire duration. The
    > flush was added by the now-reverted commit to allow TDP MMU to flush while
    > holding mmu_lock for read, as the transition from write=>read required
    > dropping the lock and thus a pending flush needed to be serviced.
    >
    > Fixes: 5a324c24b638 ("Revert "KVM: x86/mmu: Allow zap gfn range to operate under the mmu read lock"")
    > Cc: Maxim Levitsky <mlevitsk@redhat.com>
    > Cc: Maciej S. Szmigiero <maciej.szmigiero@oracle.com>
    > Cc: Ben Gardon <bgardon@google.com>
    > Signed-off-by: Sean Christopherson <seanjc@google.com>
    > ---
    > arch/x86/kvm/mmu/mmu.c | 3 ---
    > 1 file changed, 3 deletions(-)
    >
    > diff --git a/arch/x86/kvm/mmu/mmu.c b/arch/x86/kvm/mmu/mmu.c
    > index f82b192bba0b..e8b8a665e2e9 100644
    > --- a/arch/x86/kvm/mmu/mmu.c
    > +++ b/arch/x86/kvm/mmu/mmu.c
    > @@ -5700,9 +5700,6 @@ void kvm_zap_gfn_range(struct kvm *kvm, gfn_t gfn_start, gfn_t gfn_end)
    > end - 1, true, flush);
    > }
    > }
    > - if (flush)
    > - kvm_flush_remote_tlbs_with_address(kvm, gfn_start,
    > - gfn_end - gfn_start);
    > }
    >
    > if (is_tdp_mmu_enabled(kvm)) {
    >

    Unfortunately, it seems that a pending flush from __kvm_zap_rmaps()
    can be reset back to false by the following line:
    > flush = kvm_tdp_mmu_zap_gfn_range(kvm, i, gfn_start, gfn_end, flush);

    kvm_tdp_mmu_zap_gfn_range() calls __kvm_tdp_mmu_zap_gfn_range with
    "can_yield" set to true, which passes it to zap_gfn_range, which has
    this code:
    > if (can_yield &&
    > tdp_mmu_iter_cond_resched(kvm, &iter, flush, shared)) {
    > flush = false;
    > continue;
    > }

    Thanks,
    Maciej

    \
     
     \ /
      Last update: 2021-10-22 13:45    [W:2.640 / U:0.124 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site