Received: by 2002:ac0:a5b6:0:0:0:0:0 with SMTP id m51-v6csp3317860imm; Tue, 29 May 2018 05:17:12 -0700 (PDT) X-Google-Smtp-Source: ADUXVKJ0Rhh+FtgqKpVgRT86fBArCnBNCMpyZMRlWYnrYd2I8bNPAMnMjYyOdKzLTkHyanbh8SAZ X-Received: by 2002:a63:343:: with SMTP id 64-v6mr6886710pgd.354.1527596232167; Tue, 29 May 2018 05:17:12 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1527596232; cv=none; d=google.com; s=arc-20160816; b=t6OU8qWJdqFLr4KObm/6e9X/iAdtwAXe/ZQqmGRO8SUo+xWM9P3A6fJR6iLUWyXigK GJjg0lynJKYVwkmJOe7ckErublfTUVSs8tThYzL6vJDr8/JciLOA9anb5cvyvH0oShVs 6DwLTKk3dQP4q12ap2lJ5BVqWxwAHexe7sxViIC2HXWzHxNhGD0U1dalMYJs3Eg7Mw5Y OsyEPdP08fXgC1rrpw3IhCv+JNK+w5aHig9GH38Atd39I6J3herC3ukHQueJf2/bK5sr OiSqL+pvCQSytVnQH0aU3Uh5wuL6Ky/GAZ8R9LGgMj2oneQEe1Bd+aq1w4c4/6FPBIe4 fHwA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:in-reply-to:message-id:date :subject:cc:to:from:arc-authentication-results; bh=skMMx4A6QcCVTp5GkMmLVDA38nq090rkRvxCDQOP4gA=; b=afCHTrT2eWkeQAVmSN7kU4KtLmp0bCCd/QH3xyz8W996fluqSjUuuHoCV5bPH0GHHR DKcsrJyRwdSgJuaJi3+ekykjy2BhAd6/ob2MzxQqOOJ0JglUFVWUXHOks0Xwugm4uwHd xZbQQYpDAItBcdNGXaYmY4RBoZuOdHomqeue7d5gstUrOMH743FYaoRRbM0AkLL8yP5W AOuG8/aXY8KwAzgmbxF71rZ5rscV3gmsV7Eu67toL1GybXmN9DLEKpbHPOUm1TMiSdHZ 1IAXPkhape9oKHzTPXvoK0Qd9rOf1FxqNrZl+ltAi8I9QDAr0PcgCZhUSPI0e7leUWZK VABw== 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 r12-v6si4787732pgv.285.2018.05.29.05.16.58; Tue, 29 May 2018 05:17:12 -0700 (PDT) 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 S933787AbeE2ML7 (ORCPT + 99 others); Tue, 29 May 2018 08:11:59 -0400 Received: from usa-sjc-mx-foss1.foss.arm.com ([217.140.101.70]:38490 "EHLO foss.arm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S933135AbeE2MLt (ORCPT ); Tue, 29 May 2018 08:11:49 -0400 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 C1D1980D; Tue, 29 May 2018 05:11:48 -0700 (PDT) Received: from approximate.cambridge.arm.com (approximate.cambridge.arm.com [10.1.206.75]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 6B6553F53D; Tue, 29 May 2018 05:11:46 -0700 (PDT) From: Marc Zyngier To: linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, kvmarm@lists.cs.columbia.edu Cc: Will Deacon , Catalin Marinas , Thomas Gleixner , Andy Lutomirski , Kees Cook , Greg Kroah-Hartman , Christoffer Dall , Randy Dunlap , Dominik Brodowski , Julien Grall , Mark Rutland Subject: [PATCH v2 07/17] arm64: ssbd: Skip apply_ssbd if not using dynamic mitigation Date: Tue, 29 May 2018 13:11:11 +0100 Message-Id: <20180529121121.24927-8-marc.zyngier@arm.com> X-Mailer: git-send-email 2.14.2 In-Reply-To: <20180529121121.24927-1-marc.zyngier@arm.com> References: <20180529121121.24927-1-marc.zyngier@arm.com> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org In order to avoid checking arm64_ssbd_callback_required on each kernel entry/exit even if no mitigation is required, let's add yet another alternative that by default jumps over the mitigation, and that gets nop'ed out if we're doing dynamic mitigation. Think of it as a poor man's static key... Reviewed-by: Julien Grall Reviewed-by: Mark Rutland Signed-off-by: Marc Zyngier --- arch/arm64/kernel/cpu_errata.c | 14 ++++++++++++++ arch/arm64/kernel/entry.S | 3 +++ 2 files changed, 17 insertions(+) diff --git a/arch/arm64/kernel/cpu_errata.c b/arch/arm64/kernel/cpu_errata.c index a838a3043d4e..2fef634e6953 100644 --- a/arch/arm64/kernel/cpu_errata.c +++ b/arch/arm64/kernel/cpu_errata.c @@ -289,6 +289,20 @@ void __init arm64_update_smccc_conduit(struct alt_instr *alt, *updptr = cpu_to_le32(insn); } +void __init arm64_enable_wa2_handling(struct alt_instr *alt, + __le32 *origptr, __le32 *updptr, + int nr_inst) +{ + BUG_ON(nr_inst != 1); + /* + * Only allow mitigation on EL1 entry/exit and guest + * ARCH_WORKAROUND_2 handling if the SSBD state allows it to + * be flipped. + */ + if (arm64_get_ssbd_state() == ARM64_SSBD_KERNEL) + *updptr = cpu_to_le32(aarch64_insn_gen_nop()); +} + static void arm64_set_ssbd_mitigation(bool state) { switch (psci_ops.conduit) { diff --git a/arch/arm64/kernel/entry.S b/arch/arm64/kernel/entry.S index 29ad672a6abd..e6f6e2339b22 100644 --- a/arch/arm64/kernel/entry.S +++ b/arch/arm64/kernel/entry.S @@ -142,6 +142,9 @@ alternative_else_nop_endif // to save/restore them if required. .macro apply_ssbd, state, targ, tmp1, tmp2 #ifdef CONFIG_ARM64_SSBD +alternative_cb arm64_enable_wa2_handling + b \targ +alternative_cb_end ldr_this_cpu \tmp2, arm64_ssbd_callback_required, \tmp1 cbz \tmp2, \targ mov w0, #ARM_SMCCC_ARCH_WORKAROUND_2 -- 2.14.2