From patchwork Tue May 14 12:11:32 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Julien Grall X-Patchwork-Id: 164143 Delivered-To: patch@linaro.org Received: by 2002:a92:9e1a:0:0:0:0:0 with SMTP id q26csp2541049ili; Tue, 14 May 2019 05:13:23 -0700 (PDT) X-Google-Smtp-Source: APXvYqxn9kvt9f8i3ivZGEPaDnXKnVZ9EU8YAB1HaCR4/caeKpsodxVBISvIRotC43X9PbfulwVz X-Received: by 2002:a02:9685:: with SMTP id w5mr23516147jai.131.1557836003916; Tue, 14 May 2019 05:13:23 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1557836003; cv=none; d=google.com; s=arc-20160816; b=Jj2gdBGk2uP/gbO4foYIAUPF2K6Pd0wfPbLaSneKaEogZjbeeOjtdgfZVkZhtsD4Dl zsAc8b4imiN6VtzNSTLS7Gcm7JBSUz5E4fZsVkHM5eLnxpyLnWgoKGTV4vLY/yynI+Sq Yd38/z05/tgu8Mei9nliDv3Vjk0mHsSTtcMvt7YnRQFvHBXBeBhBOkx/N5onR1JGRUzb aKKJ6IFPz3p9Lk0mNEm4PAdBLOBwaXBLtSX4yMD1UszUG6ND/bzlTTgUUmWVDzxGG3uN DmpK5k4JDQDI3Vp1WizYswSCw/aWAf3fdNE5FFl+OXTrONfKPX71+P7OUoV6CymsZ5mb BtBA== 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=gEYewxJeXZz6ct2bgaYXko3m92omf3+vmPKb86HVJZ0aIoajl+y6zCYgErEPDrsz4R iPOtD8JdbvlBGEjRYEfPAHAg6CZYWVy78048Cc6PZnMet6t0VjSyrygYS6j1e4VKSff1 c1r/epWLVoer99wAjCi0bmePvkyOH4YXyTaSnZ5i17gMewX1Mz5tyaawq2dwmLHBBslr qjwyIusI6hEQGYQ56AMp+avIivALiQGwGvJVVOFi9YmG8dmsWBqv7bCcea+IQzcYXV7p vYGLsdMmE5BJSenLxu3EXFJGIcO6+lsLy9Bn6HfmfwajHHVorEVbzjQ4H8PXYoxjiCUB EnQw== 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 m73si1489296itm.73.2019.05.14.05.13.23 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Tue, 14 May 2019 05:13:23 -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 1hQWHh-0006N0-MM; Tue, 14 May 2019 12:11:53 +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 1hQWHg-0006Lr-8Q for xen-devel@lists.xenproject.org; Tue, 14 May 2019 12:11:52 +0000 X-Inumbo-ID: 74a179be-7641-11e9-99f4-1f59df7d2d55 Received: from foss.arm.com (unknown [217.140.101.70]) by us1-amaz-eas2.inumbo.com (Halon) with ESMTP id 74a179be-7641-11e9-99f4-1f59df7d2d55; Tue, 14 May 2019 12:11:51 +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 1B93415AD; Tue, 14 May 2019 05:11:51 -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 DC6B13F71E; Tue, 14 May 2019 05:11:49 -0700 (PDT) From: Julien Grall To: xen-devel@lists.xenproject.org Date: Tue, 14 May 2019 13:11:32 +0100 Message-Id: <20190514121132.26732-9-julien.grall@arm.com> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20190514121132.26732-1-julien.grall@arm.com> References: <20190514121132.26732-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; }