From patchwork Wed Apr 17 17:58:15 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Julien Grall X-Patchwork-Id: 162414 Delivered-To: patch@linaro.org Received: by 2002:a02:c6d8:0:0:0:0:0 with SMTP id r24csp5795937jan; Wed, 17 Apr 2019 10:59:53 -0700 (PDT) X-Google-Smtp-Source: APXvYqyzympgzPyr/RAsjRQlCREF+vbZNrUvGcn99ga+v8lEp+QzSQpBhptY2YgNabdFst/auk0c X-Received: by 2002:a25:8408:: with SMTP id u8mr38776660ybk.332.1555523992998; Wed, 17 Apr 2019 10:59:52 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1555523992; cv=none; d=google.com; s=arc-20160816; b=h7fNgDY933NaX/LU0Fjkq7jW2Ux32/MD4sGNaAYE4YjX9DCklIhmdHNnWGjHXmKJO6 ix/BVOmfluAMr7+i7BKd8QxnFblFU4G1Z+Ac3BeaNsQXNV6PRdCDk2+hA3VBqMnwFs9o /qQrAIfYGv6ui5ByPpOu+Uq4AP4ksHQgIBzk1hxN/eXDqgamlCXajbs6liKFQ6gW00R7 aC41giJ+6OAO8FmoGJxDFluKO5jpzi75yzHEeqz3x39ZFH0ftj/MvVMj6mwB6r0ZWa24 8iD+B0tHgU9zkBmMnsfyShc4PljuXf4sSKeHgNry6rpGzMQrwl1pkdCGuM3VR6dIU6PC XT0Q== 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=047f3LoULHuz8PW+Oy68iOnaeN6g48i9e51KMBC2AmM=; b=rS3Ew3WW9Yi1H6+azc6QDgW2JSrfYT535Bcbi8yJk5WyxD2fDJ59RT+zZeVCkbSvRI XANB7tGMInk/FcRaTp9vmEbcdUxXj8/FkY4caqM2du00ibvF3T9axWLOU0s0mtptUUcX enn9Ax2AGu74yVc/fi//Y3yk6LGHltPK+G0Y8pJPunKj+of1voYqVW7R8SP/iwhvV3b+ h6b+NfmCA6lxGdNe/b17z1U3KvoixAjg38vEtjbffE6kCS2eLvd4SRFR/6l9Z6jvlkNR z4de97fO515kWUsSz8Ck1lrxGsCuLNLuUK300ttP5mPdMJXNjt7CpMuk0pvc3kxOD06B Klpw== 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 x9si17012416ybb.36.2019.04.17.10.59.52 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Wed, 17 Apr 2019 10:59:52 -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 1hGopN-0004Eq-FK; Wed, 17 Apr 2019 17:58:33 +0000 Received: from us1-rack-dfw2.inumbo.com ([104.130.134.6]) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1hGopM-0004DH-4e for xen-devel@lists.xenproject.org; Wed, 17 Apr 2019 17:58:32 +0000 X-Inumbo-ID: 68f85e92-613a-11e9-92d7-bc764e045a96 Received: from foss.arm.com (unknown [217.140.101.70]) by us1-rack-dfw2.inumbo.com (Halon) with ESMTP id 68f85e92-613a-11e9-92d7-bc764e045a96; Wed, 17 Apr 2019 17:58:30 +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 AC4BD1688; Wed, 17 Apr 2019 10:58:30 -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 9C1773F59C; Wed, 17 Apr 2019 10:58:29 -0700 (PDT) From: Julien Grall To: xen-devel@lists.xenproject.org Date: Wed, 17 Apr 2019 18:58:15 +0100 Message-Id: <20190417175815.16905-8-julien.grall@arm.com> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20190417175815.16905-1-julien.grall@arm.com> References: <20190417175815.16905-1-julien.grall@arm.com> Subject: [Xen-devel] [PATCH 7/7] 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 , sstabellini@kernel.org, Andrii_Anisov@epam.com 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 --- 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; }