Hi Paolo: Thanks for your review. On Mon, Oct 15, 2018 at 6:04 PM Paolo Bonzini <pbonzini@xxxxxxxxxx> wrote: > > On 13/10/2018 16:53, lantianyu1986@xxxxxxxxx wrote: > > + bool flush = false; > > int i; > > > > spin_lock(&kvm->mmu_lock); > > @@ -5654,18 +5655,27 @@ void kvm_zap_gfn_range(struct kvm *kvm, gfn_t gfn_start, gfn_t gfn_end) > > slots = __kvm_memslots(kvm, i); > > kvm_for_each_memslot(memslot, slots) { > > gfn_t start, end; > > + bool flush_tlb = true; > > > > start = max(gfn_start, memslot->base_gfn); > > end = min(gfn_end, memslot->base_gfn + memslot->npages); > > if (start >= end) > > continue; > > > > - slot_handle_level_range(kvm, memslot, kvm_zap_rmapp, > > - PT_PAGE_TABLE_LEVEL, PT_MAX_HUGEPAGE_LEVEL, > > - start, end - 1, true); > > + if (kvm_available_flush_tlb_with_range()) > > + flush_tlb = false; > > This should be moved outside the for, because it's invariant. > > > + flush = slot_handle_level_range(kvm, memslot, > > + kvm_zap_rmapp, PT_PAGE_TABLE_LEVEL, > > + PT_MAX_HUGEPAGE_LEVEL, start, > > + end - 1, flush_tlb); > > ... and this should be "flush |= ". > > } > > } > > > > + if (flush && kvm_available_flush_tlb_with_range()) > > + kvm_flush_remote_tlbs_with_address(kvm, gfn_start, > > + gfn_end - gfn_start + 1); > > + > > ... and this can be just if (flush), because if flush_tlb is true then > slot_handle_level_range always returns false. OK. Will update. -- Best regards Tianyu Lan _______________________________________________ devel mailing list devel@xxxxxxxxxxxxxxxxxxxxxx http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel