From patchwork Tue May 14 12:21:25 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Julien Grall X-Patchwork-Id: 164144 Delivered-To: patch@linaro.org Received: by 2002:a92:9e1a:0:0:0:0:0 with SMTP id q26csp2551973ili; Tue, 14 May 2019 05:23:03 -0700 (PDT) X-Google-Smtp-Source: APXvYqxc8DCIZmb7PQrybQmUh65nwqB5DNnPZGQ7imEPHnFeogp2xrEs+1ezpg6TkkpUvJ8AIwCU X-Received: by 2002:a5e:9607:: with SMTP id a7mr2483964ioq.151.1557836583395; Tue, 14 May 2019 05:23:03 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1557836583; cv=none; d=google.com; s=arc-20160816; b=tmdrAbKoKbH08zERcWzKkq/JS125NlxbXa5iDv/5xmgpyVIBhXRVfnxWESP8nJl20g wKtkE/3ZJyjaDFPOxaDjVMvhr5b0/lBqPzqQ6j0i86Y1N6KhT/pEOud+VwkIQC+3d3cK BBL3laJXfLclQ/CpdasDftV09ewi3EFw8auZkB04NKTz5NNYY7tZmo67SUlwFIVOegaM +CwSXg7UEQgo5D5rm38rAa6Rru9CFyrbR4rlS/DU8UTw3b72ZAg64o8NpMiXBmI6FXrW SvftjeIyxJsUvavr6xfoDM5IBO8iCRmwceTvhlM0GfMH/QfEeAHRSsjcCGvS9TXIrXUV rBQw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:mime-version:cc :list-subscribe:list-help:list-post:list-unsubscribe:list-id :precedence:subject:references:in-reply-to:message-id:date:to:from; bh=g3Z4pVaRU9xc9T/B8NCdJWDiIuJKE3zj4IDLXRCZPkI=; b=TrhXUbpeB6I92cxzmsjGy3P+HnPCmfZ4fKHjihfAAlQ0R509H2+i2l3hKQ2TfCG1mV BTKcgsDpHi+ACiTg0ZbkYuCdcxOTD8PeK/WT1RtryKTAEANw0h7EtjMrIP3Fia6eoHQ3 E4Lx+cXka2ioXM+mRZxh8yHsdjxu+Bmt+Y1RUJOn5GC9X0c7kxSsjLHt3VBQ84EGSgTB Nkpz7VpxsmTiDOJSShR+s6XhkyscAAfg+RFxadOd4ZhNiGRx6saqtWqpyYxuQFbijwIz WAJ/XY2rdXer650IZ6mMA3+KJ2ZuzPL92J22w5aKsffKqn+bka4ClIXuvIfSAskhIecb Oo+w== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of xen-devel-bounces@lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org Return-Path: Received: from lists.xenproject.org (lists.xenproject.org. [192.237.175.120]) by mx.google.com with ESMTPS id q7si4547480iot.11.2019.05.14.05.23.03 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Tue, 14 May 2019 05:23:03 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of xen-devel-bounces@lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of xen-devel-bounces@lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1hQWRe-0008UK-4Y; Tue, 14 May 2019 12:22:10 +0000 Received: from all-amaz-eas1.inumbo.com ([34.197.232.57] helo=us1-amaz-eas2.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1hQWRc-0008ST-Ug for xen-devel@lists.xenproject.org; Tue, 14 May 2019 12:22:08 +0000 X-Inumbo-ID: e3e6a51e-7642-11e9-8509-abde66b4cdf3 Received: from foss.arm.com (unknown [217.140.101.70]) by us1-amaz-eas2.inumbo.com (Halon) with ESMTP id e3e6a51e-7642-11e9-8509-abde66b4cdf3; Tue, 14 May 2019 12:22:07 +0000 (UTC) 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 45F65341; Tue, 14 May 2019 05:22:07 -0700 (PDT) Received: from e108454-lin.cambridge.arm.com (e108454-lin.cambridge.arm.com [10.1.196.50]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 12BFF3F71E; Tue, 14 May 2019 05:22:05 -0700 (PDT) From: Julien Grall To: xen-devel@lists.xenproject.org Date: Tue, 14 May 2019 13:21:25 +0100 Message-Id: <20190514122136.28215-17-julien.grall@arm.com> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20190514122136.28215-1-julien.grall@arm.com> References: <20190514122136.28215-1-julien.grall@arm.com> Subject: [Xen-devel] [PATCH MM-PART1 v3 8/8] xen/arm: mm: Flush the TLBs even if a mapping failed in create_xen_entries X-BeenThere: xen-devel@lists.xenproject.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Cc: Oleksandr_Tyshchenko@epam.com, Julien Grall , Stefano Stabellini , Andrii Anisov MIME-Version: 1.0 Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" At the moment, create_xen_entries will only flush the TLBs if the full range has successfully been updated. This may lead to leave unwanted entries in the TLBs if we fail to update some entries. Signed-off-by: Julien Grall Reviewed-by: Andrii Anisov Reviewed-by: Stefano Stabellini --- Changes in v2: - Add Andrii's reviewed-by - Add Stefano's reviewed-by --- xen/arch/arm/mm.c | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/xen/arch/arm/mm.c b/xen/arch/arm/mm.c index 8ee828d445..9d584e4cbf 100644 --- a/xen/arch/arm/mm.c +++ b/xen/arch/arm/mm.c @@ -984,7 +984,7 @@ static int create_xen_entries(enum xenmap_operation op, unsigned long nr_mfns, unsigned int flags) { - int rc; + int rc = 0; unsigned long addr = virt, addr_end = addr + nr_mfns * PAGE_SIZE; lpae_t pte, *entry; lpae_t *third = NULL; @@ -1013,7 +1013,8 @@ static int create_xen_entries(enum xenmap_operation op, { printk("%s: trying to replace an existing mapping addr=%lx mfn=%"PRI_mfn"\n", __func__, addr, mfn_x(mfn)); - return -EINVAL; + rc = -EINVAL; + goto out; } if ( op == RESERVE ) break; @@ -1030,7 +1031,8 @@ static int create_xen_entries(enum xenmap_operation op, { printk("%s: trying to %s a non-existing mapping addr=%lx\n", __func__, op == REMOVE ? "remove" : "modify", addr); - return -EINVAL; + rc = -EINVAL; + goto out; } if ( op == REMOVE ) pte.bits = 0; @@ -1043,7 +1045,8 @@ static int create_xen_entries(enum xenmap_operation op, { printk("%s: Incorrect combination for addr=%lx\n", __func__, addr); - return -EINVAL; + rc = -EINVAL; + goto out; } } write_pte(entry, pte); @@ -1052,11 +1055,14 @@ static int create_xen_entries(enum xenmap_operation op, BUG(); } } +out: + /* + * Flush the TLBs even in case of failure because we may have + * partially modified the PT. This will prevent any unexpected + * behavior afterwards. + */ flush_xen_tlb_range_va(virt, PAGE_SIZE * nr_mfns); - rc = 0; - -out: return rc; }