From patchwork Tue Jul 25 17:26:53 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Oleksandr Tyshchenko X-Patchwork-Id: 9862559 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id EE873603F9 for ; Tue, 25 Jul 2017 17:30:06 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id E143E286E2 for ; Tue, 25 Jul 2017 17:30:06 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id D3F84286DB; Tue, 25 Jul 2017 17:30:06 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-3.6 required=2.0 tests=BAYES_00, DKIM_ADSP_CUSTOM_MED, DKIM_SIGNED, FREEMAIL_FROM, RCVD_IN_DNSWL_MED, RCVD_IN_SORBS_SPAM, T_DKIM_INVALID autolearn=ham version=3.3.1 Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) (using TLSv1.2 with cipher AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id 06DA4286F3 for ; Tue, 25 Jul 2017 17:30:04 +0000 (UTC) Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1da3cD-0000CC-UR; Tue, 25 Jul 2017 17:27:25 +0000 Received: from mail6.bemta3.messagelabs.com ([195.245.230.39]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1da3cC-00009U-1W for xen-devel@lists.xenproject.org; Tue, 25 Jul 2017 17:27:24 +0000 Received: from [85.158.137.68] by server-17.bemta-3.messagelabs.com id A6/82-01859-B7F77795; Tue, 25 Jul 2017 17:27:23 +0000 X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFlrDIsWRWlGSWpSXmKPExsVyMfS6k25VfXm kweSTchbft0xmcmD0OPzhCksAYxRrZl5SfkUCa8aeFXOZCiaKVUzeuYWlgXGbUBcjF4eQwHRG iXlrf7GCOCwCL1kkNs06wtTFyMkhIdDPKnH8kj6EHSdx7NoTZgi7QmLKpIfsILaQgJLE652bm SAmzWaSmPJsI1gzm4CBxP53T8CKRICK7q2aDBZnBhrUPfEsC4gtLJAgcbLrDhuIzSKgKtFy4x EriM0r4CLR/mk11DI5iZvnOsFsTqD41k/bWCAWO0usP3aAeQKjwAJGhlWMGsWpRWWpRbpGxnp JRZnpGSW5iZk5uoYGxnq5qcXFiempOYlJxXrJ+bmbGIGhVc/AwLiDsW+v3yFGSQ4mJVHeb7rl kUJ8SfkplRmJxRnxRaU5qcWHGGU4OJQkeJfXAeUEi1LTUyvSMnOAQQ6TluDgURLhvQOS5i0uS MwtzkyHSJ1itOS4cmXdFyaOKQe2A8lXE/5/YxJiycvPS5US5/UBaRAAacgozYMbB4vES4yyUs K8jAwMDEI8BalFuZklqPKvGMU5GJWEeReCTOHJzCuB2/oK6CAmoIPmzCgFOagkESEl1cA4X7D KM8p9/8tikTUzTVo5uOZfUWzg3adeV7zgsvzK+2bft0y4XzKj93HNgaBMRv4OloXpix/be000 W/HjgGiKeuSBSYWn3oZlOrEsatuVe6bQ8U1b68GQxdMDZaV9ebYmKEtXmbw6/GbOaW3DtSu8z d/PDZFI9M1lN5v9Y8a8injFnqjdPD+VWIozEg21mIuKEwHqSXR1vwIAAA== X-Env-Sender: olekstysh@gmail.com X-Msg-Ref: server-16.tower-31.messagelabs.com!1501003642!99471874!1 X-Originating-IP: [209.85.215.66] X-SpamReason: No, hits=0.5 required=7.0 tests=BODY_RANDOM_LONG X-StarScan-Received: X-StarScan-Version: 9.4.25; banners=-,-,- X-VirusChecked: Checked Received: (qmail 52666 invoked from network); 25 Jul 2017 17:27:22 -0000 Received: from mail-lf0-f66.google.com (HELO mail-lf0-f66.google.com) (209.85.215.66) by server-16.tower-31.messagelabs.com with AES128-GCM-SHA256 encrypted SMTP; 25 Jul 2017 17:27:22 -0000 Received: by mail-lf0-f66.google.com with SMTP id d80so3644971lfg.1 for ; Tue, 25 Jul 2017 10:27:22 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=FTYZtkxgiNvKUKb9L5DXy9cvNy185KmhsHw6seprfX4=; b=ovC+KXAblvOwsNLFnfNPrqXOTa9exfnTDr/4fcVCD2ktvYHXtr5bZMGXw3k4jsHUzJ 5VCM/ZaUAlfsYz5SqzSbYuxxO9NkYSAjLNRf9f+SYL2wxT4oGjzJ7JZSMe6a/YpB/HHy Tv18HgTusYXL5vFJPNzDy5BMh57FHQ8OHjUyOThywyv3AOAuK7B6tVKSlwWH7PIWx61B xuvyUdrPsBTlh/Os7+Y05nzhe4Dtktwof5kJR+Oyv/zpTI29+LMRws+oW3WZdUlCwK4s 5F4/WeYRt0XjphJmYdXkZ7UNDEF1j9cfC0tcv6vVQMsOnXJjd2qTKZYC4xdMFrwsfbXZ cxkA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=FTYZtkxgiNvKUKb9L5DXy9cvNy185KmhsHw6seprfX4=; b=jPc8+aB3k1EJYfGFbzmekrnLQ5rSH/XIDD1KWEdxPglkN1MOwkt2AHc/PNirB5bI6e NeCF2cx2A6Rjg1HBVj0IvzKAEa3n6Vn7kD24EOUF8rZE6qO/NbvFvghOTZIXySl02U0U Yj/vgiuIsYy4WpHMWeYNTFeBqFZhabf9gzpPEMfvvJAlUai0becxyA16V9K8nms1mgbU egeu7Q2v3QtTjNIysUyoW2TqPi2QtVT4+5CuPoGhW3M0xXfl4m6CGBhNDaPogElkK+cM FWoJnYYCOTqwxsiS0pgkhTkHf0hmuZF5I1UkJoBTf1Vc2otNisL8lwMypGgaA/R7OYvr Ob4A== X-Gm-Message-State: AIVw110pQWmei5+d5atJWDCh4sTSk1J94Vu9+d+1nk0mSkTFc5rzurOD Jz0SNFTjoX/wU27D X-Received: by 10.25.21.23 with SMTP id l23mr6480715lfi.156.1501003641555; Tue, 25 Jul 2017 10:27:21 -0700 (PDT) Received: from otyshchenko.kyiv.epam.com (ll-59.209.223.85.sovam.net.ua. [85.223.209.59]) by smtp.gmail.com with ESMTPSA id v145sm411748lfa.21.2017.07.25.10.27.20 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Tue, 25 Jul 2017 10:27:20 -0700 (PDT) From: Oleksandr Tyshchenko To: xen-devel@lists.xenproject.org Date: Tue, 25 Jul 2017 20:26:53 +0300 Message-Id: <1501003615-15274-12-git-send-email-olekstysh@gmail.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1501003615-15274-1-git-send-email-olekstysh@gmail.com> References: <1501003615-15274-1-git-send-email-olekstysh@gmail.com> Cc: Oleksandr Tyshchenko , Julien Grall Subject: [Xen-devel] [PATCH v2 11/13] iommu/arm: smmu: Squash map_pages/unmap_pages with map_page/unmap_page 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" X-Virus-Scanned: ClamAV using ClamSMTP From: Oleksandr Tyshchenko Eliminate TODO by squashing single-page stuff with multi-page one. Signed-off-by: Oleksandr Tyshchenko CC: Julien Grall Acked-by: Julien Grall --- Changes in v1: - Changes in v2: - --- xen/drivers/passthrough/arm/smmu.c | 48 +++++--------------------------------- 1 file changed, 6 insertions(+), 42 deletions(-) diff --git a/xen/drivers/passthrough/arm/smmu.c b/xen/drivers/passthrough/arm/smmu.c index 652b58c..021031a 100644 --- a/xen/drivers/passthrough/arm/smmu.c +++ b/xen/drivers/passthrough/arm/smmu.c @@ -2737,8 +2737,8 @@ static void arm_smmu_iommu_domain_teardown(struct domain *d) xfree(xen_domain); } -static int __must_check arm_smmu_map_page(struct domain *d, unsigned long gfn, - unsigned long mfn, unsigned int flags) +static int __must_check arm_smmu_map_pages(struct domain *d, unsigned long gfn, + unsigned long mfn, unsigned int order, unsigned int flags) { p2m_type_t t; @@ -2763,10 +2763,11 @@ static int __must_check arm_smmu_map_page(struct domain *d, unsigned long gfn, * The function guest_physmap_add_entry replaces the current mapping * if there is already one... */ - return guest_physmap_add_entry(d, _gfn(gfn), _mfn(mfn), 0, t); + return guest_physmap_add_entry(d, _gfn(gfn), _mfn(mfn), order, t); } -static int __must_check arm_smmu_unmap_page(struct domain *d, unsigned long gfn) +static int __must_check arm_smmu_unmap_pages(struct domain *d, + unsigned long gfn, unsigned int order) { /* * This function should only be used by gnttab code when the domain @@ -2775,44 +2776,7 @@ static int __must_check arm_smmu_unmap_page(struct domain *d, unsigned long gfn) if ( !is_domain_direct_mapped(d) ) return -EINVAL; - return guest_physmap_remove_page(d, _gfn(gfn), _mfn(gfn), 0); -} - -/* TODO: Optimize by squashing map_pages/unmap_pages with map_page/unmap_page */ -static int __must_check arm_smmu_map_pages(struct domain *d, unsigned long gfn, - unsigned long mfn, unsigned int order, unsigned int flags) -{ - unsigned long i; - int rc = 0; - - for (i = 0; i < (1UL << order); i++) { - rc = arm_smmu_map_page(d, gfn + i, mfn + i, flags); - if (unlikely(rc)) { - while (i--) - /* If statement to satisfy __must_check. */ - if (arm_smmu_unmap_page(d, gfn + i)) - continue; - - break; - } - } - - return rc; -} - -static int __must_check arm_smmu_unmap_pages(struct domain *d, - unsigned long gfn, unsigned int order) -{ - unsigned long i; - int rc = 0; - - for (i = 0; i < (1UL << order); i++) { - int ret = arm_smmu_unmap_page(d, gfn + i); - if (!rc) - rc = ret; - } - - return rc; + return guest_physmap_remove_page(d, _gfn(gfn), _mfn(gfn), order); } static const struct iommu_ops arm_smmu_iommu_ops = {