From mboxrd@z Thu Jan 1 00:00:00 1970 From: David Vrabel Subject: Re: [PATCH v2 3/4] xen/arm: introduce GNTTABOP_cache_flush Date: Mon, 6 Oct 2014 16:21:38 +0100 Message-ID: <5432B382.3040000@citrix.com> References: <1412347845-27755-3-git-send-email-stefano.stabellini@eu.citrix.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: In-Reply-To: <1412347845-27755-3-git-send-email-stefano.stabellini@eu.citrix.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org To: Stefano Stabellini , xen-devel@lists.xensource.com Cc: julien.grall@citrix.com, Ian.Campbell@citrix.com List-Id: xen-devel@lists.xenproject.org On 03/10/14 15:50, Stefano Stabellini wrote: > Introduce a new hypercall to perform cache maintenance operation on > behalf of the guest. The argument is a machine address and a size. The > implementation checks that the memory range is owned by the guest or the > guest has been granted access to it by another domain. > > Signed-off-by: Stefano Stabellini [...] > --- a/xen/common/grant_table.c > +++ b/xen/common/grant_table.c > @@ -2641,6 +2641,79 @@ do_grant_table_op( [...] > + > + page = mfn_to_page(mfn); > + owner = page_get_owner_and_reference(page); > + if ( !owner ) > + { > + rcu_unlock_domain(d); > + return -EFAULT; > + } > + > + spin_lock(&owner->grant_table->lock); The grant table lock is already heavily contended, so you should skip the lock and the grant_map_exists() check if d == owner. > + > + if ( !grant_map_exists(d, owner->grant_table, mfn) ) Looping over all grant table entries or all maptrack entries looks expensive to me. Perhaps consider allowing suitably privileged domains to clean/invalidate any address without having to check if it's been granted. Instead of this hypercall, could the guest clean/invalidate by set/way? I guess this would need a suitable IPA which could be obtained by some (offset) 1:1 mapping in the stage 2 tables? David