Received: by 10.223.185.116 with SMTP id b49csp455985wrg; Fri, 16 Feb 2018 01:42:47 -0800 (PST) X-Google-Smtp-Source: AH8x227GOiOT4s72DBpdABf48xbgpyVjxf6Re4h3ALmm17CPKZ6+xPCXg2sDt3Obxlz6iwlsDXnL X-Received: by 2002:a17:902:e81:: with SMTP id 1-v6mr5417067plx.169.1518774167753; Fri, 16 Feb 2018 01:42:47 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1518774167; cv=none; d=google.com; s=arc-20160816; b=PbeWL/FkLijHdFTRWPpsAdrJVIye/9cI3d8fokT/jLc7N2XwkeiPBFSux8uftOIaAh wOFvnlOLoGcqBbD3e98+SOH4EPRL0yzs6aOA2TtYdhK70SVHrQHxo9hmPHbCy0hm9Kk2 +MugJDPAIuhpsdSfrk0/BlBB6SrMNGWtZyL06blLEzw2MHRs2re+7MoSIZM9qO9fexUz OHtPtMDVypelWPv828zfkxD8mZ+yFtHXqVHN7iFt/bEsq2xM8hP6OLO0QRMuvdmfGg3R 6paVwIuWpkSBUW6TqHPMwJ9HUkc5MrX4lZYrd7TTv/J2bE66CMirhBYMkS5FqmHzmHmG 8gbg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:mime-version:user-agent:references :in-reply-to:message-id:date:subject:cc:to:from :arc-authentication-results; bh=JZi6hWC2NgonGc/2AQd5c+/tWvwI/aEZ5wXS+iEMSLs=; b=D2cMoeKn6Qp8hh8ojS6K8GzJtZPrAM+dwG4uLh1s04wL+isIzFrSnJf/GnWcsls1fF HPDiDjLtTOLIOiodQxUGpiFY+vBu1IrIeAahOQyB8sg4NmRGx/4MqSwmtvhhiqKN3bY2 RvxhSUiX4VIo57Jmzc4MOcCcNTz92GZuneDnTA3dHrRb+YSJg3J9HYOFZcPWgCS7pyNN AdsVhO7sj1iq7u8L5Kqj5GSRAW8JC/Ccdfvi7p2x0Nx3csn7JvLElyYqM9xgNTRyjyPE ISgpgpgSubb1RwQCgc4xAQo7ha5hbDvZU8k9o6b1AYn/wlmZDVfpGy5xWiJiuBQaiogZ ZZ4A== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id x1si2634176pgv.124.2018.02.16.01.42.32; Fri, 16 Feb 2018 01:42:47 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1426721AbeBOQ4j (ORCPT + 99 others); Thu, 15 Feb 2018 11:56:39 -0500 Received: from mail.linuxfoundation.org ([140.211.169.12]:59880 "EHLO mail.linuxfoundation.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1423596AbeBOPjs (ORCPT ); Thu, 15 Feb 2018 10:39:48 -0500 Received: from localhost (LFbn-1-12258-90.w90-92.abo.wanadoo.fr [90.92.71.90]) by mail.linuxfoundation.org (Postfix) with ESMTPSA id 8CB9E10F0; Thu, 15 Feb 2018 15:39:47 +0000 (UTC) From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Mark Rutland , Laura Abbott , Shanker Donthineni , Will Deacon Subject: [PATCH 4.15 028/202] [Variant 3/Meltdown] arm64: erratum: Work around Falkor erratum #E1003 in trampoline code Date: Thu, 15 Feb 2018 16:15:28 +0100 Message-Id: <20180215151714.424342752@linuxfoundation.org> X-Mailer: git-send-email 2.16.1 In-Reply-To: <20180215151712.768794354@linuxfoundation.org> References: <20180215151712.768794354@linuxfoundation.org> User-Agent: quilt/0.65 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 4.15-stable review patch. If anyone has any objections, please let me know. ------------------ From: Will Deacon Commit d1777e686ad1 upstream. We rely on an atomic swizzling of TTBR1 when transitioning from the entry trampoline to the kernel proper on an exception. We can't rely on this atomicity in the face of Falkor erratum #E1003, so on affected cores we can issue a TLB invalidation to invalidate the walk cache prior to jumping into the kernel. There is still the possibility of a TLB conflict here due to conflicting walk cache entries prior to the invalidation, but this doesn't appear to be the case on these CPUs in practice. Reviewed-by: Mark Rutland Tested-by: Laura Abbott Tested-by: Shanker Donthineni Signed-off-by: Will Deacon Signed-off-by: Greg Kroah-Hartman --- arch/arm64/Kconfig | 17 +++++------------ arch/arm64/kernel/entry.S | 12 ++++++++++++ 2 files changed, 17 insertions(+), 12 deletions(-) --- a/arch/arm64/Kconfig +++ b/arch/arm64/Kconfig @@ -522,20 +522,13 @@ config CAVIUM_ERRATUM_30115 config QCOM_FALKOR_ERRATUM_1003 bool "Falkor E1003: Incorrect translation due to ASID change" default y - select ARM64_PAN if ARM64_SW_TTBR0_PAN help On Falkor v1, an incorrect ASID may be cached in the TLB when ASID - and BADDR are changed together in TTBRx_EL1. The workaround for this - issue is to use a reserved ASID in cpu_do_switch_mm() before - switching to the new ASID. Saying Y here selects ARM64_PAN if - ARM64_SW_TTBR0_PAN is selected. This is done because implementing and - maintaining the E1003 workaround in the software PAN emulation code - would be an unnecessary complication. The affected Falkor v1 CPU - implements ARMv8.1 hardware PAN support and using hardware PAN - support versus software PAN emulation is mutually exclusive at - runtime. - - If unsure, say Y. + and BADDR are changed together in TTBRx_EL1. Since we keep the ASID + in TTBR1_EL1, this situation only occurs in the entry trampoline and + then only for entries in the walk cache, since the leaf translation + is unchanged. Work around the erratum by invalidating the walk cache + entries for the trampoline before entering the kernel proper. config QCOM_FALKOR_ERRATUM_1009 bool "Falkor E1009: Prematurely complete a DSB after a TLBI" --- a/arch/arm64/kernel/entry.S +++ b/arch/arm64/kernel/entry.S @@ -989,6 +989,18 @@ __ni_sys_trace: sub \tmp, \tmp, #(SWAPPER_DIR_SIZE + RESERVED_TTBR0_SIZE) bic \tmp, \tmp, #USER_ASID_FLAG msr ttbr1_el1, \tmp +#ifdef CONFIG_QCOM_FALKOR_ERRATUM_1003 +alternative_if ARM64_WORKAROUND_QCOM_FALKOR_E1003 + /* ASID already in \tmp[63:48] */ + movk \tmp, #:abs_g2_nc:(TRAMP_VALIAS >> 12) + movk \tmp, #:abs_g1_nc:(TRAMP_VALIAS >> 12) + /* 2MB boundary containing the vectors, so we nobble the walk cache */ + movk \tmp, #:abs_g0_nc:((TRAMP_VALIAS & ~(SZ_2M - 1)) >> 12) + isb + tlbi vae1, \tmp + dsb nsh +alternative_else_nop_endif +#endif /* CONFIG_QCOM_FALKOR_ERRATUM_1003 */ .endm .macro tramp_unmap_kernel, tmp