Received: by 2002:ac0:a5b6:0:0:0:0:0 with SMTP id m51-v6csp3321343imm; Tue, 29 May 2018 05:20:46 -0700 (PDT) X-Google-Smtp-Source: ADUXVKIdAQjYMHyt6MBO9TydUN4e2Jeiq2Ow4ELIIXKe5Oh9mTsTDLOoL6KYNrvvhy4ksqYMB5dy X-Received: by 2002:a65:46cb:: with SMTP id n11-v6mr8778439pgr.193.1527596446559; Tue, 29 May 2018 05:20:46 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1527596446; cv=none; d=google.com; s=arc-20160816; b=tomTrzg+Y9PJSPi/HaQ46K3e/+tDH+CrHVhv/j77yLq1GmOmZZo6/qD8/68PBLsrpR R3BMk8w3KzcFoUDgf8cMjctfzyYuPtu67eC8WXvirTtM/47c7cgn5J7hI/ylMcdh+hGo RgMhKV3bzZqpxl5/IKM/w0j25v1dnNC03lCBu5jCWqp/uHnTZ1Fx4D8Ap2+uq+JehwHW ZdaRSBHgzHrAwbLNJlziYWK8TXPzFVVb39EnNk+HMFPmw7ROKzeGr6E8h7RGlvXaiBgl Yu/yQImspULS4OMJyAoCiNoLDzTFIDpJmAfi1ci5ZXseyOSzfGgBp5ze6jFzl4TQCLi0 NDvg== 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=01OiipYElVvVJT1qgL4uiBpd+tjAh+aEW9EESDfZ1Z8=; b=pOgL8EMeyLjA53OQtIA6Tif5axZC8ZbKFy5zCejflnIcsP/PW2ObvSrqAgHcGBsxMh RBl6aJ09TdU1NUQ5qq8+osHe8T18TY4Dy1SgCbGPJ2Sna2Hi74Fbp2CbMSrGdIo0qmkg 26Qy/29O/sSiQj/6KM3K2qN8aliWEntm6qQgJciwIot9jp8iKkU/0YcHvSdvFpL+Zd9f 0iiklECKe+bZloP39Feno2BmLoSDWgVpiM7eom+8x9B+nAjNiuGNoyyW8iMNnTFECqqz tcf0t7TmYgtjfVjZclaX8HBvoC/SNNSBj1UIDYIxxLFQwMFaoqWOsMaXvoIaYvZylRZr oeSg== 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 y17-v6si16222650plp.485.2018.05.29.05.20.32; Tue, 29 May 2018 05:20:46 -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 S933736AbeE2MLv (ORCPT + 99 others); Tue, 29 May 2018 08:11:51 -0400 Received: from foss.arm.com ([217.140.101.70]:38414 "EHLO foss.arm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S933658AbeE2MLi (ORCPT ); Tue, 29 May 2018 08:11:38 -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 52DA215BE; Tue, 29 May 2018 05:11:38 -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 F04033F53D; Tue, 29 May 2018 05:11:35 -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 03/17] arm64: Add per-cpu infrastructure to call ARCH_WORKAROUND_2 Date: Tue, 29 May 2018 13:11:07 +0100 Message-Id: <20180529121121.24927-4-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 a heterogeneous system, we can end up with both affected and unaffected CPUs. Let's check their status before calling into the firmware. Reviewed-by: Julien Grall Reviewed-by: Mark Rutland Signed-off-by: Marc Zyngier --- arch/arm64/kernel/cpu_errata.c | 2 ++ arch/arm64/kernel/entry.S | 11 +++++++---- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/arch/arm64/kernel/cpu_errata.c b/arch/arm64/kernel/cpu_errata.c index d98d8ce29533..d1a7a68dc142 100644 --- a/arch/arm64/kernel/cpu_errata.c +++ b/arch/arm64/kernel/cpu_errata.c @@ -233,6 +233,8 @@ enable_smccc_arch_workaround_1(const struct arm64_cpu_capabilities *entry) #endif /* CONFIG_HARDEN_BRANCH_PREDICTOR */ #ifdef CONFIG_ARM64_SSBD +DEFINE_PER_CPU_READ_MOSTLY(u64, arm64_ssbd_callback_required); + void __init arm64_update_smccc_conduit(struct alt_instr *alt, __le32 *origptr, __le32 *updptr, int nr_inst) diff --git a/arch/arm64/kernel/entry.S b/arch/arm64/kernel/entry.S index f33e6aed3037..29ad672a6abd 100644 --- a/arch/arm64/kernel/entry.S +++ b/arch/arm64/kernel/entry.S @@ -140,8 +140,10 @@ alternative_else_nop_endif // This macro corrupts x0-x3. It is the caller's duty // to save/restore them if required. - .macro apply_ssbd, state + .macro apply_ssbd, state, targ, tmp1, tmp2 #ifdef CONFIG_ARM64_SSBD + ldr_this_cpu \tmp2, arm64_ssbd_callback_required, \tmp1 + cbz \tmp2, \targ mov w0, #ARM_SMCCC_ARCH_WORKAROUND_2 mov w1, #\state alternative_cb arm64_update_smccc_conduit @@ -176,12 +178,13 @@ alternative_cb_end ldr x19, [tsk, #TSK_TI_FLAGS] // since we can unmask debug disable_step_tsk x19, x20 // exceptions when scheduling. - apply_ssbd 1 + apply_ssbd 1, 1f, x22, x23 #ifdef CONFIG_ARM64_SSBD ldp x0, x1, [sp, #16 * 0] ldp x2, x3, [sp, #16 * 1] #endif +1: mov x29, xzr // fp pointed to user-space .else @@ -323,8 +326,8 @@ alternative_if ARM64_WORKAROUND_845719 alternative_else_nop_endif #endif 3: - apply_ssbd 0 - + apply_ssbd 0, 5f, x0, x1 +5: .endif msr elr_el1, x21 // set up the return data -- 2.14.2