From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755188Ab3KOBMa (ORCPT ); Thu, 14 Nov 2013 20:12:30 -0500 Received: from mx1.redhat.com ([209.132.183.28]:8221 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754939Ab3KOBMK (ORCPT ); Thu, 14 Nov 2013 20:12:10 -0500 Date: Thu, 14 Nov 2013 16:39:59 -0200 From: Marcelo Tosatti To: Xiao Guangrong Cc: gleb@redhat.com, avi.kivity@gmail.com, pbonzini@redhat.com, linux-kernel@vger.kernel.org, kvm@vger.kernel.org Subject: Re: [PATCH v3 04/15] KVM: MMU: flush tlb out of mmu lock when write-protect the sptes Message-ID: <20131114183959.GA27064@amt.cnet> References: <1382534973-13197-1-git-send-email-xiaoguangrong@linux.vnet.ibm.com> <1382534973-13197-5-git-send-email-xiaoguangrong@linux.vnet.ibm.com> <20131114003609.GA15692@amt.cnet> <52845C6C.6060708@linux.vnet.ibm.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <52845C6C.6060708@linux.vnet.ibm.com> User-Agent: Mutt/1.5.21 (2010-09-15) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Thu, Nov 14, 2013 at 01:15:24PM +0800, Xiao Guangrong wrote: > > Hi Marcelo, > > On 11/14/2013 08:36 AM, Marcelo Tosatti wrote: > > > > > Any code location which reads the writable bit in the spte and assumes if its not > > set, that the translation which the spte refers to is not cached in a > > remote CPU's TLB can become buggy. (*) > > > > It might be the case that now its not an issue, but its so subtle that > > it should be improved. > > > > Can you add a fat comment on top of is_writeable_bit describing this? > > (and explain why is_writable_pte users do not make an assumption > > about (*). > > > > "Writeable bit of locklessly modifiable sptes might be cleared > > but TLBs not flushed: so whenever reading locklessly modifiable sptes > > you cannot assume TLBs are flushed". > > > > For example this one is unclear: > > > > if (!can_unsync && is_writable_pte(*sptep)) > > goto set_pte; > > And: > > > > if (!is_writable_pte(spte) && > > !(pt_protect && spte_is_locklessly_modifiable(spte))) > > return false; > > > > This is safe because get_dirty_log/kvm_mmu_slot_remove_write_access are > > serialized by a single mutex (if there were two mutexes, it would not be > > safe). Can you add an assert to both > > kvm_mmu_slot_remove_write_access/kvm_vm_ioctl_get_dirty_log > > for (slots_lock) is locked, and explain? > > > > So just improve the comments please, thanks (no need to resend whole > > series). > > Thank you very much for your time to review it and really appreciate > for you detailed the issue so clearly to me. > > I will do it on the top of this patchset or after it is merged > (if it's possiable). Ok, can you explain why every individual caller of is_writable_pte have no such assumption now? (the one mentioned above is not clear to me for example, should explain all of them). OK to improve comments later.