From patchwork Wed Jul 6 13:01:05 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Julien Grall X-Patchwork-Id: 71467 Delivered-To: patch@linaro.org Received: by 10.140.28.4 with SMTP id 4csp855252qgy; Wed, 6 Jul 2016 06:06:04 -0700 (PDT) X-Received: by 10.36.71.143 with SMTP id t137mr18923067itb.0.1467810364005; Wed, 06 Jul 2016 06:06:04 -0700 (PDT) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org. [192.237.175.120]) by mx.google.com with ESMTPS id l206si3545795ita.11.2016.07.06.06.06.03 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 06 Jul 2016 06:06:03 -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 1bKmSq-0000l8-DC; Wed, 06 Jul 2016 13:02:04 +0000 Received: from mail6.bemta14.messagelabs.com ([193.109.254.103]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1bKmSp-0000kJ-Qv for xen-devel@lists.xen.org; Wed, 06 Jul 2016 13:02:03 +0000 Received: from [193.109.254.147] by server-11.bemta-14.messagelabs.com id D4/A9-01707-B410D775; Wed, 06 Jul 2016 13:02:03 +0000 X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFrrOLMWRWlGSWpSXmKPExsVysyfVTdeLsTb cYN9lXYslHxezODB6HN39mymAMYo1My8pvyKBNePP9hbmgm3SFZ9nb2RqYOwR7WLk4hAS2MQo cW/fS2YI5zSjxK+Zf5i6GDk52AQ0Je58/gRmiwhIS1z7fJkRxGYWcJB48/EeC4gtLBAv8eTSM XYQm0VAVeLItllsIDavgIvE9i8PwGokBOQkTh6bzApicwq4Sky/9hisXgikZvEk5gmM3AsYGV YxahSnFpWlFukameklFWWmZ5TkJmbm6BoamujlphYXJ6an5iQmFesl5+duYgR6uJ6BgXEHY/9 lv0OMkhxMSqK8LN+qw4X4kvJTKjMSizPii0pzUosPMcpwcChJ8Ooz1IYLCRalpqdWpGXmAEMN Ji3BwaMkwhsDkuYtLkjMLc5Mh0idYlSUEuflA0kIgCQySvPg2mDhfYlRVkqYl5GBgUGIpyC1K DezBFX+FaM4B6OSMK8HyBSezLwSuOmvgBYzAS3+6VINsrgkESEl1cC4YOEMpRcWn6N+vdadVq 1qbfFMcsnUFafu7FOcHd7jO8nyzYWEM1xxF53j175RKnb9zdDy+aOFFZvVu5VTlBntSj2tf38 R3/8sc0GY3M3N/5K4Xh2YzXd39aEvf0wCjl2fcfBReRtPUSy3x8qiQB/R08KssTcWOL2e0ffa ZVHN7Zb9565Wq926pMRSnJFoqMVcVJwIAHoeZTlqAgAA X-Env-Sender: julien.grall@arm.com X-Msg-Ref: server-8.tower-27.messagelabs.com!1467810121!41806957!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.46; banners=-,-,- X-VirusChecked: Checked Received: (qmail 36943 invoked from network); 6 Jul 2016 13:02:02 -0000 Received: from foss.arm.com (HELO foss.arm.com) (217.140.101.70) by server-8.tower-27.messagelabs.com with SMTP; 6 Jul 2016 13:02:02 -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 7C39BBB3; Wed, 6 Jul 2016 06:02:30 -0700 (PDT) Received: from e108454-lin.cambridge.arm.com (e108454-lin.cambridge.arm.com [10.1.215.28]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id F36963F21A; Wed, 6 Jul 2016 06:01:30 -0700 (PDT) From: Julien Grall To: xen-devel@lists.xen.org Date: Wed, 6 Jul 2016 14:01:05 +0100 Message-Id: <1467810073-27971-7-git-send-email-julien.grall@arm.com> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1467810073-27971-1-git-send-email-julien.grall@arm.com> References: <1467810073-27971-1-git-send-email-julien.grall@arm.com> Cc: Julien Grall , sstabellini@kernel.org Subject: [Xen-devel] [PATCH v6 06/14] xen/arm: Rework the interface of p2m_cache_flush and use typesafe gfn 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" p2m_cache_flush is expecting GFNs in parameter and not MFNs. Rename the variable to *gfn* and use typesafe to avoid possible misusage. Also, modify the prototype of the function to describe the range using the start and the number of GFNs. This will avoid to wonder whether the end if inclusive or exclusive. Note that the type of the parameters 'start' is changed from xen_pfn_t (aka uint64_t) to gfn_t (aka unsigned long). This means that a truncation will occur for ARM32. It is fine because it will always be encoded on 28 bits maximum (40 bits address). Signed-off-by: Julien Grall Acked-by: Stefano Stabellini --- Changes in v6: - Add Stefano's acked-by Changes in v4: - This patch was originally called "xen/arm: p2m_cache_flush: Use the correct terminology and typesafe gfn" - Describe the range using the start and the number of GFNs. Changes in v3: - Add a word in the commit message about the truncation. Changes in v2: - Drop _gfn suffix --- xen/arch/arm/domctl.c | 2 +- xen/arch/arm/p2m.c | 11 ++++++----- xen/include/asm-arm/p2m.h | 2 +- 3 files changed, 8 insertions(+), 7 deletions(-) diff --git a/xen/arch/arm/domctl.c b/xen/arch/arm/domctl.c index 30453d8..f61f98a 100644 --- a/xen/arch/arm/domctl.c +++ b/xen/arch/arm/domctl.c @@ -30,7 +30,7 @@ long arch_do_domctl(struct xen_domctl *domctl, struct domain *d, if ( e < s ) return -EINVAL; - return p2m_cache_flush(d, s, e); + return p2m_cache_flush(d, _gfn(s), domctl->u.cacheflush.nr_pfns); } case XEN_DOMCTL_bind_pt_irq: { diff --git a/xen/arch/arm/p2m.c b/xen/arch/arm/p2m.c index 54a363a..1cfb62b 100644 --- a/xen/arch/arm/p2m.c +++ b/xen/arch/arm/p2m.c @@ -1469,16 +1469,17 @@ int relinquish_p2m_mapping(struct domain *d) d->arch.p2m.default_access); } -int p2m_cache_flush(struct domain *d, xen_pfn_t start_mfn, xen_pfn_t end_mfn) +int p2m_cache_flush(struct domain *d, gfn_t start, unsigned long nr) { struct p2m_domain *p2m = &d->arch.p2m; + gfn_t end = gfn_add(start, nr); - start_mfn = MAX(start_mfn, p2m->lowest_mapped_gfn); - end_mfn = MIN(end_mfn, p2m->max_mapped_gfn); + start = gfn_max(start, _gfn(p2m->lowest_mapped_gfn)); + end = gfn_min(end, _gfn(p2m->max_mapped_gfn)); return apply_p2m_changes(d, CACHEFLUSH, - pfn_to_paddr(start_mfn), - pfn_to_paddr(end_mfn), + pfn_to_paddr(gfn_x(start)), + pfn_to_paddr(gfn_x(end)), pfn_to_paddr(mfn_x(INVALID_MFN)), MATTR_MEM, 0, p2m_invalid, d->arch.p2m.default_access); diff --git a/xen/include/asm-arm/p2m.h b/xen/include/asm-arm/p2m.h index f204482..8a96e68 100644 --- a/xen/include/asm-arm/p2m.h +++ b/xen/include/asm-arm/p2m.h @@ -139,7 +139,7 @@ void p2m_dump_info(struct domain *d); mfn_t p2m_lookup(struct domain *d, gfn_t gfn, p2m_type_t *t); /* Clean & invalidate caches corresponding to a region of guest address space */ -int p2m_cache_flush(struct domain *d, xen_pfn_t start_mfn, xen_pfn_t end_mfn); +int p2m_cache_flush(struct domain *d, gfn_t start, unsigned long nr); /* Setup p2m RAM mapping for domain d from start-end. */ int p2m_populate_ram(struct domain *d, paddr_t start, paddr_t end);