Messages in this thread | | | From | Tianyu Lan <> | Date | Mon, 7 Jan 2019 11:42:59 +0800 | Subject | Re: [PATCH 11/11] KVM/MMU: Flush tlb in the kvm_age_rmapp() |
| |
Hi Sean: Thanks for your review.
On Sat, Jan 5, 2019 at 12:12 AM Sean Christopherson <sean.j.christopherson@intel.com> wrote: > > On Fri, Jan 04, 2019 at 04:54:05PM +0800, lantianyu1986@gmail.com wrote: > > From: Lan Tianyu <Tianyu.Lan@microsoft.com> > > > > 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@microsoft.com> > > --- > > 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
| |