From patchwork Wed Jul 20 16:10:55 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Julien Grall X-Patchwork-Id: 72447 Delivered-To: patch@linaro.org Received: by 10.140.29.52 with SMTP id a49csp66508qga; Wed, 20 Jul 2016 09:14:19 -0700 (PDT) X-Received: by 10.107.55.135 with SMTP id e129mr6097981ioa.129.1469031251093; Wed, 20 Jul 2016 09:14:11 -0700 (PDT) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org. [192.237.175.120]) by mx.google.com with ESMTPS id 64si2548992ioq.86.2016.07.20.09.14.10 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 20 Jul 2016 09:14:11 -0700 (PDT) Received-SPF: neutral (google.com: 192.237.175.120 is neither permitted nor denied by best guess record for domain of xen-devel-bounces@lists.xen.org) client-ip=192.237.175.120; Authentication-Results: mx.google.com; spf=neutral (google.com: 192.237.175.120 is neither permitted nor denied by best guess record for domain of xen-devel-bounces@lists.xen.org) smtp.mailfrom=xen-devel-bounces@lists.xen.org Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1bPu63-0007iq-Mm; Wed, 20 Jul 2016 16:11:43 +0000 Received: from mail6.bemta5.messagelabs.com ([195.245.231.135]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1bPu62-0007ge-2R for xen-devel@lists.xen.org; Wed, 20 Jul 2016 16:11:42 +0000 Received: from [85.158.139.211] by server-6.bemta-5.messagelabs.com id 39/BB-29022-DB2AF875; Wed, 20 Jul 2016 16:11:41 +0000 X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFrrGLMWRWlGSWpSXmKPExsVysyfVTXfPov5 wgyUHzC2WfFzM4sDocXT3b6YAxijWzLyk/IoE1oydu5YyFnyXq7jy6BlbA+NFiS5GLg4hgU2M Ep8mP2OCcE4zSkw6c56xi5GTg01AU+LO509MILaIgLTEtc+XGUGKmAXaGSWWb/zH0sXIwSEsE Chx40YYSA2LgKrE/d8vWEFsXgFXiY9nV4DZEgJyEiePTQazOYHi50/+BJsvJOAisentN+YJjN wLGBlWMaoXpxaVpRbpmuslFWWmZ5TkJmbm6BoamOrlphYXJ6an5iQmFesl5+duYgT6lwEIdjA em+x8iFGSg0lJlFdVtDdciC8pP6UyI7E4I76oNCe1+BCjDAeHkgTv4oX94UKCRanpqRVpmTnA QINJS3DwKInwHgdJ8xYXJOYWZ6ZDpE4xKkqJ87qDJARAEhmleXBtsOC+xCgrJczLCHSIEE9Ba lFuZgmq/CtGcQ5GJWHeQJApPJl5JXDTXwEtZgJaPEcAbHFJIkJKqoExw8RJ7Uakh+raT7xTJb 6EvowpMfJI4GWwzy/I0lQsbAi99s5WrzDZyz/1wcOdHct2Lr+iOndX50Wn1hMe56cqKkbd7jv rFLXXZoLUNNmILfrVdnF1ssmT7BLPJ6cERLxPmjft1s2AjRPuaa6qkT4me/AZh8cjY0m1r+5/ ++fIKopY7Kv9+FWJpTgj0VCLuag4EQBzSdtQaQIAAA== X-Env-Sender: julien.grall@arm.com X-Msg-Ref: server-16.tower-206.messagelabs.com!1469031100!34668453!1 X-Originating-IP: [217.140.101.70] X-SpamReason: No, hits=0.0 required=7.0 tests= X-StarScan-Received: X-StarScan-Version: 8.77; banners=-,-,- X-VirusChecked: Checked Received: (qmail 16167 invoked from network); 20 Jul 2016 16:11:40 -0000 Received: from foss.arm.com (HELO foss.arm.com) (217.140.101.70) by server-16.tower-206.messagelabs.com with SMTP; 20 Jul 2016 16:11:40 -0000 Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.72.51.249]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 93DDABF3; Wed, 20 Jul 2016 09:12:50 -0700 (PDT) Received: from e108454-lin.cambridge.arm.com (e108454-lin.cambridge.arm.com [10.1.218.32]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id E7A3D3F387; Wed, 20 Jul 2016 09:11:38 -0700 (PDT) From: Julien Grall To: xen-devel@lists.xen.org Date: Wed, 20 Jul 2016 17:10:55 +0100 Message-Id: <1469031064-23344-14-git-send-email-julien.grall@arm.com> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1469031064-23344-1-git-send-email-julien.grall@arm.com> References: <1469031064-23344-1-git-send-email-julien.grall@arm.com> Cc: proskurin@sec.in.tum.de, Julien Grall , sstabellini@kernel.org, wei.chen@linaro.org, steve.capper@arm.com Subject: [Xen-devel] [PATCH 13/22] xen/arm: p2m: Introduce p2m_{read, write}_{, un}lock helpers X-BeenThere: xen-devel@lists.xen.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" Some functions in the p2m code do not require to modify the P2M code. Document it by introducing separate helpers to lock the p2m. This patch does not change the lock. This will be done in a subsequent patch. Signed-off-by: Julien Grall --- xen/arch/arm/p2m.c | 49 +++++++++++++++++++++++++++++++++++++------------ 1 file changed, 37 insertions(+), 12 deletions(-) diff --git a/xen/arch/arm/p2m.c b/xen/arch/arm/p2m.c index 4c279dc..d74c249 100644 --- a/xen/arch/arm/p2m.c +++ b/xen/arch/arm/p2m.c @@ -47,11 +47,36 @@ static bool_t p2m_mapping(lpae_t pte) return p2m_valid(pte) && !pte.p2m.table; } +static inline void p2m_write_lock(struct p2m_domain *p2m) +{ + spin_lock(&p2m->lock); +} + +static inline void p2m_write_unlock(struct p2m_domain *p2m) +{ + spin_unlock(&p2m->lock); +} + +static inline void p2m_read_lock(struct p2m_domain *p2m) +{ + spin_lock(&p2m->lock); +} + +static inline void p2m_read_unlock(struct p2m_domain *p2m) +{ + spin_unlock(&p2m->lock); +} + +static inline int p2m_is_locked(struct p2m_domain *p2m) +{ + return spin_is_locked(&p2m->lock); +} + void p2m_dump_info(struct domain *d) { struct p2m_domain *p2m = &d->arch.p2m; - spin_lock(&p2m->lock); + p2m_read_lock(p2m); printk("p2m mappings for domain %d (vmid %d):\n", d->domain_id, p2m->vmid); BUG_ON(p2m->stats.mappings[0] || p2m->stats.shattered[0]); @@ -60,7 +85,7 @@ void p2m_dump_info(struct domain *d) printk(" 2M mappings: %ld (shattered %ld)\n", p2m->stats.mappings[2], p2m->stats.shattered[2]); printk(" 4K mappings: %ld\n", p2m->stats.mappings[3]); - spin_unlock(&p2m->lock); + p2m_read_unlock(p2m); } void memory_type_changed(struct domain *d) @@ -166,7 +191,7 @@ static mfn_t __p2m_lookup(struct domain *d, gfn_t gfn, p2m_type_t *t) p2m_type_t _t; unsigned int level, root_table; - ASSERT(spin_is_locked(&p2m->lock)); + ASSERT(p2m_is_locked(p2m)); BUILD_BUG_ON(THIRD_MASK != PAGE_MASK); /* Allow t to be NULL */ @@ -233,9 +258,9 @@ mfn_t p2m_lookup(struct domain *d, gfn_t gfn, p2m_type_t *t) mfn_t ret; struct p2m_domain *p2m = &d->arch.p2m; - spin_lock(&p2m->lock); + p2m_read_lock(p2m); ret = __p2m_lookup(d, gfn, t); - spin_unlock(&p2m->lock); + p2m_read_unlock(p2m); return ret; } @@ -476,7 +501,7 @@ static int __p2m_get_mem_access(struct domain *d, gfn_t gfn, #undef ACCESS }; - ASSERT(spin_is_locked(&p2m->lock)); + ASSERT(p2m_is_locked(p2m)); /* If no setting was ever set, just return rwx. */ if ( !p2m->mem_access_enabled ) @@ -945,7 +970,7 @@ static int apply_p2m_changes(struct domain *d, */ flush_pt = iommu_enabled && !iommu_has_feature(d, IOMMU_FEAT_COHERENT_WALK); - spin_lock(&p2m->lock); + p2m_write_lock(p2m); /* Static mapping. P2M_ROOT_PAGES > 1 are handled below */ if ( P2M_ROOT_PAGES == 1 ) @@ -1149,7 +1174,7 @@ out: unmap_domain_page(mappings[level]); } - spin_unlock(&p2m->lock); + p2m_write_unlock(p2m); if ( rc < 0 && ( op == INSERT ) && addr != start_gpaddr ) @@ -1530,7 +1555,7 @@ struct page_info *get_page_from_gva(struct vcpu *v, vaddr_t va, if ( v != current ) return NULL; - spin_lock(&p2m->lock); + p2m_read_lock(p2m); rc = gvirt_to_maddr(va, &maddr, flags); @@ -1550,7 +1575,7 @@ err: if ( !page && p2m->mem_access_enabled ) page = p2m_mem_access_check_and_get_page(va, flags); - spin_unlock(&p2m->lock); + p2m_read_unlock(p2m); return page; } @@ -1824,9 +1849,9 @@ int p2m_get_mem_access(struct domain *d, gfn_t gfn, int ret; struct p2m_domain *p2m = p2m_get_hostp2m(d); - spin_lock(&p2m->lock); + p2m_read_lock(p2m); ret = __p2m_get_mem_access(d, gfn, access); - spin_unlock(&p2m->lock); + p2m_read_unlock(p2m); return ret; }