Received: by 2002:ad5:474a:0:0:0:0:0 with SMTP id i10csp8120018imu; Tue, 4 Dec 2018 03:20:43 -0800 (PST) X-Google-Smtp-Source: AFSGD/UJRKyvqk4TPuMAOhOLqCQ6XfDrjAFAuAvXvvkJnwdXa33e6s4488tKP2EvwNgD8jHCYA4v X-Received: by 2002:a62:ca9c:: with SMTP id y28mr19524500pfk.236.1543922443213; Tue, 04 Dec 2018 03:20:43 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1543922443; cv=none; d=google.com; s=arc-20160816; b=mushsDyARTPfCiHlqrdP1Yy4YXHaYb6D74FvSsO2YNpoQb96pT+U/WA1rpzyulMQPI XIBxsAf7VYW6UDAWkYQq4eEO4K3CakF1DgDtQluO8Pb+gkR39tpvTdqGwi0fET7ssef8 ov41Am2tHRN+OXX/vitpUcTQWGawqReMHRQ644U5NnUCw0FBzbke+b+CjKfko39dPGVQ FtgiLhFIeMzR6fPvh0DsvFcVw9I149GgLhsl1d0U3JOTNrkk1tcnljzV9uV74L3pWAUH I4uSNKqA1VvPBBjBvpYjOnZVC3hdQX8tELYXgVZPwiDyXBU/cnkQBawGr+RfXfGXF6xj PF0w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=6NTmUMscGtxTf3qKRpiFu92GR/mHNn5bilMcL73nvFs=; b=GHRRzYCUaubyXAJ+hWuc9LQ+zE7dtCDZguIrKzCGs5aPf82P5Yh6s+SleXPHZ4BiSb 5xre8XxdT9KM5DbgwsvW3QVhE4U3X3WaiirSfAlxefe4rWc+A4oeFZlICV/qlzA7YrU+ I9ff132HzL8F4/rCxWfivUmDcUxNqUJmZPpnAEyLfG7kxULFtIblGK7yDNVgvbJ4GgVS JbTSZfpeR4BXEEw0c5TKyruIMnMKpc7hYe9ShUCFJSm/b3s9EH134U9YjkXGiHaZiD2K wz+OXOwXX0dJPcPjzLVppNX6I72vXim22+XDEKB+Jb7pQ1iAiCBfOsGClgdbiT3LqySb 4utg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=YIkpDqdt; 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 q4si17703723pfq.56.2018.12.04.03.20.27; Tue, 04 Dec 2018 03:20:43 -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; dkim=pass header.i=@kernel.org header.s=default header.b=YIkpDqdt; 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 S1727619AbeLDLSq (ORCPT + 99 others); Tue, 4 Dec 2018 06:18:46 -0500 Received: from mail.kernel.org ([198.145.29.99]:51812 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728018AbeLDLEj (ORCPT ); Tue, 4 Dec 2018 06:04:39 -0500 Received: from localhost (5356596B.cm-6-7b.dynamic.ziggo.nl [83.86.89.107]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id D7A26214E0; Tue, 4 Dec 2018 11:04:36 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1543921477; bh=yfI85WmNX2+8gyKqBqOH7tYDANxTqbYGZWieQ7dVslY=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=YIkpDqdtc+9wVH+uyVVOz7B4bj8Q/YJZ3E7ja+V7TYVoWGSP2NRfpM1d2jlA5aMog X4QsVqKI2/PGuHd7id93MXH8fsm3o7LTjqPj4//kwqSNQ6pTpfRAkVraFew0hjiVOf xrS23BbZK5DlqzTyrw6J9rcAVMxh3ypgGN89jbKA= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Tim Chen , Thomas Gleixner , Ingo Molnar , Peter Zijlstra , Andy Lutomirski , Linus Torvalds , Jiri Kosina , Tom Lendacky , Josh Poimboeuf , Andrea Arcangeli , David Woodhouse , Andi Kleen , Dave Hansen , Casey Schaufler , Asit Mallick , Arjan van de Ven , Jon Masters , Waiman Long , Dave Stewart , Kees Cook Subject: [PATCH 4.14 086/146] x86/speculation: Reorganize speculation control MSRs update Date: Tue, 4 Dec 2018 11:49:32 +0100 Message-Id: <20181204103730.287801947@linuxfoundation.org> X-Mailer: git-send-email 2.19.2 In-Reply-To: <20181204103726.750894136@linuxfoundation.org> References: <20181204103726.750894136@linuxfoundation.org> User-Agent: quilt/0.65 X-stable: review X-Patchwork-Hint: ignore MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 4.14-stable review patch. If anyone has any objections, please let me know. ------------------ From: Tim Chen tim.c.chen@linux.intel.com commit 01daf56875ee0cd50ed496a09b20eb369b45dfa5 upstream The logic to detect whether there's a change in the previous and next task's flag relevant to update speculation control MSRs is spread out across multiple functions. Consolidate all checks needed for updating speculation control MSRs into the new __speculation_ctrl_update() helper function. This makes it easy to pick the right speculation control MSR and the bits in MSR_IA32_SPEC_CTRL that need updating based on TIF flags changes. Originally-by: Thomas Lendacky Signed-off-by: Tim Chen Signed-off-by: Thomas Gleixner Reviewed-by: Ingo Molnar Cc: Peter Zijlstra Cc: Andy Lutomirski Cc: Linus Torvalds Cc: Jiri Kosina Cc: Tom Lendacky Cc: Josh Poimboeuf Cc: Andrea Arcangeli Cc: David Woodhouse Cc: Andi Kleen Cc: Dave Hansen Cc: Casey Schaufler Cc: Asit Mallick Cc: Arjan van de Ven Cc: Jon Masters Cc: Waiman Long Cc: Greg KH Cc: Dave Stewart Cc: Kees Cook Cc: stable@vger.kernel.org Link: https://lkml.kernel.org/r/20181125185004.151077005@linutronix.de Signed-off-by: Greg Kroah-Hartman --- arch/x86/kernel/process.c | 42 +++++++++++++++++++++++++++--------------- 1 file changed, 27 insertions(+), 15 deletions(-) --- a/arch/x86/kernel/process.c +++ b/arch/x86/kernel/process.c @@ -398,27 +398,40 @@ static __always_inline void amd_set_ssb_ wrmsrl(MSR_AMD64_VIRT_SPEC_CTRL, ssbd_tif_to_spec_ctrl(tifn)); } -static __always_inline void spec_ctrl_update_msr(unsigned long tifn) +/* + * Update the MSRs managing speculation control, during context switch. + * + * tifp: Previous task's thread flags + * tifn: Next task's thread flags + */ +static __always_inline void __speculation_ctrl_update(unsigned long tifp, + unsigned long tifn) { - u64 msr = x86_spec_ctrl_base | ssbd_tif_to_spec_ctrl(tifn); + u64 msr = x86_spec_ctrl_base; + bool updmsr = false; - wrmsrl(MSR_IA32_SPEC_CTRL, msr); -} + /* If TIF_SSBD is different, select the proper mitigation method */ + if ((tifp ^ tifn) & _TIF_SSBD) { + if (static_cpu_has(X86_FEATURE_VIRT_SSBD)) { + amd_set_ssb_virt_state(tifn); + } else if (static_cpu_has(X86_FEATURE_LS_CFG_SSBD)) { + amd_set_core_ssb_state(tifn); + } else if (static_cpu_has(X86_FEATURE_SPEC_CTRL_SSBD) || + static_cpu_has(X86_FEATURE_AMD_SSBD)) { + msr |= ssbd_tif_to_spec_ctrl(tifn); + updmsr = true; + } + } -static __always_inline void __speculation_ctrl_update(unsigned long tifn) -{ - if (static_cpu_has(X86_FEATURE_VIRT_SSBD)) - amd_set_ssb_virt_state(tifn); - else if (static_cpu_has(X86_FEATURE_LS_CFG_SSBD)) - amd_set_core_ssb_state(tifn); - else - spec_ctrl_update_msr(tifn); + if (updmsr) + wrmsrl(MSR_IA32_SPEC_CTRL, msr); } void speculation_ctrl_update(unsigned long tif) { + /* Forced update. Make sure all relevant TIF flags are different */ preempt_disable(); - __speculation_ctrl_update(tif); + __speculation_ctrl_update(~tif, tif); preempt_enable(); } @@ -454,8 +467,7 @@ void __switch_to_xtra(struct task_struct if ((tifp ^ tifn) & _TIF_NOCPUID) set_cpuid_faulting(!!(tifn & _TIF_NOCPUID)); - if ((tifp ^ tifn) & _TIF_SSBD) - __speculation_ctrl_update(tifn); + __speculation_ctrl_update(tifp, tifn); } /*