Hi Sean: Thanks for your review. On Sat, Jan 5, 2019 at 12:12 AM Sean Christopherson <sean.j.christopherson@xxxxxxxxx> wrote: > > On Fri, Jan 04, 2019 at 04:54:05PM +0800, lantianyu1986@xxxxxxxxx wrote: > > From: Lan Tianyu <Tianyu.Lan@xxxxxxxxxxxxx> > > > > This patch is to flush tlb in the kvm_age_rmapp() when tlb range flush > > is available and flush request is true. > > > > Signed-off-by: Lan Tianyu <Tianyu.Lan@xxxxxxxxxxxxx> > > --- > > arch/x86/kvm/mmu.c | 7 +++++++ > > 1 file changed, 7 insertions(+) > > > > diff --git a/arch/x86/kvm/mmu.c b/arch/x86/kvm/mmu.c > > index a5728f51bf7d..bc402a72956a 100644 > > --- a/arch/x86/kvm/mmu.c > > +++ b/arch/x86/kvm/mmu.c > > @@ -1958,10 +1958,17 @@ static int kvm_age_rmapp(struct kvm *kvm, struct kvm_rmap_head *rmap_head, > > u64 *sptep; > > struct rmap_iterator uninitialized_var(iter); > > int young = 0; > > + bool flush = (bool)data; > > > > for_each_rmap_spte(rmap_head, &iter, sptep) > > young |= mmu_spte_age(sptep); > > > > + if (young && flush) { > > + kvm_flush_remote_tlbs_with_address(kvm, gfn, > > + KVM_PAGES_PER_HPAGE(level)); > > + young = 0; > > + } > > + > > young shouldn't be cleared, the tracing will be wrong and the caller > might actually care about the return value. Yes, this is wrong and will update. > I'm assuming you're > clearing young to avoid the flush in kvm_mmu_notifier_clear_flush_young(), > but keeping that flush is silly since it will never be invoked. Just > squash this patch with patch 10/11 so that you can remove the unnecessary > flush in kvm_mmu_notifier_clear_flush_young() and preserve young. > The platform may provide tlb flush with address range as granularity. My changes are to use range flush when it's available. kvm_mmu_notifier_clear_flush_young() is common function for all platforms and most platforms still need the flush in the kvm_mmu_notifier_clear_flush_young(). I think it's better to separate flush request and "young" from return value of kvm_age_hva(). New flush parameter I added in the patch 10 can be changed to a pointer and kvm_age_hva() can use it to return flush request. -- Best regards Tianyu Lan