From mboxrd@z Thu Jan 1 00:00:00 1970 From: Paolo Bonzini Subject: Re: [PATCH A] KVM: Simplify kvm->tlbs_dirty handling Date: Wed, 19 Feb 2014 13:04:37 +0100 Message-ID: <53049DD5.3040702@redhat.com> References: <20140218172150.7723d3a5.yoshikawa_takuya_b1@lab.ntt.co.jp> <20140218172247.ca61f503.yoshikawa_takuya_b1@lab.ntt.co.jp> <530322CF.1000402@redhat.com> <5303FE62.1080101@lab.ntt.co.jp> Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Cc: kvm@vger.kernel.org To: Takuya Yoshikawa , gleb@kernel.org Return-path: Received: from mx1.redhat.com ([209.132.183.28]:16026 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751825AbaBSME4 (ORCPT ); Wed, 19 Feb 2014 07:04:56 -0500 In-Reply-To: <5303FE62.1080101@lab.ntt.co.jp> Sender: kvm-owner@vger.kernel.org List-ID: Il 19/02/2014 01:44, Takuya Yoshikawa ha scritto: > (2014/02/18 18:07), Paolo Bonzini wrote: >> Il 18/02/2014 09:22, Takuya Yoshikawa ha scritto: >>> When this was introduced, kvm_flush_remote_tlbs() could be called >>> without holding mmu_lock. It is now acknowledged that the function >>> must be called before releasing mmu_lock, and all callers have already >>> been changed to do so. >>> >>> There is no need to use smp_mb() and cmpxchg() any more. >>> >>> Signed-off-by: Takuya Yoshikawa >> >> I prefer this patch, and in fact we can make it even simpler: >> >> diff --git a/include/linux/kvm_host.h b/include/linux/kvm_host.h >> index ed1cc89..9816b68 100644 >> --- a/include/linux/kvm_host.h >> +++ b/include/linux/kvm_host.h >> @@ -401,7 +401,9 @@ struct kvm { >> unsigned long mmu_notifier_seq; >> long mmu_notifier_count; >> #endif >> + /* Protected by mmu_lock */ >> bool tlbs_dirty; >> + >> struct list_head devices; >> }; >> >> diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c >> index 51744da..f5668a4 100644 >> --- a/virt/kvm/kvm_main.c >> +++ b/virt/kvm/kvm_main.c >> @@ -188,12 +188,6 @@ void kvm_flush_remote_tlbs(struct kvm *kvm) >> { >> if (make_all_cpus_request(kvm, KVM_REQ_TLB_FLUSH)) >> ++kvm->stat.remote_tlb_flush; >> - /* >> - * tlbs_dirty is used only for optimizing x86's shadow paging >> code with >> - * mmu notifiers in mind, see the note on sync_page(). Since it is >> - * always protected with mmu_lock there, should >> kvm_flush_remote_tlbs() >> - * be called before releasing mmu_lock, this is safe. >> - */ >> kvm->tlbs_dirty = false; >> } >> EXPORT_SYMBOL_GPL(kvm_flush_remote_tlbs); >> >> >> What do you think? > > I agree. > > But please check Xiao's comment and my reply to it. Yes, I'll wait some time in case Xiao can get back to his patch set, and then make up my mind on what patch to apply. In any case, if Xiao patches go in a change will be needed. For patch A it would be reverted, for patch B it would edit the comment. So the two patches aren't a lot different in this respect. Paolo