LKML Archive on lore.kernel.org help / color / mirror / Atom feed
From: Tim Chen <tim.c.chen@linux.intel.com> To: Jiri Kosina <jikos@kernel.org>, Thomas Gleixner <tglx@linutronix.de> Cc: Tim Chen <tim.c.chen@linux.intel.com>, Tom Lendacky <thomas.lendacky@amd.com>, Ingo Molnar <mingo@redhat.com>, Peter Zijlstra <peterz@infradead.org>, Josh Poimboeuf <jpoimboe@redhat.com>, Andrea Arcangeli <aarcange@redhat.com>, David Woodhouse <dwmw@amazon.co.uk>, Andi Kleen <ak@linux.intel.com>, Dave Hansen <dave.hansen@intel.com>, Casey Schaufler <casey.schaufler@intel.com>, Asit Mallick <asit.k.mallick@intel.com>, Arjan van de Ven <arjan@linux.intel.com>, Jon Masters <jcm@redhat.com>, linux-kernel@vger.kernel.org, x86@kernel.org Subject: [Patch v3 09/13] x86/speculation: Reorganize SPEC_CTRL MSR update Date: Wed, 17 Oct 2018 10:59:37 -0700 [thread overview] Message-ID: <23d8ffaac99be49aa163eb16dd131399141fc432.1539798901.git.tim.c.chen@linux.intel.com> (raw) In-Reply-To: <cover.1539798901.git.tim.c.chen@linux.intel.com> In-Reply-To: <cover.1539798901.git.tim.c.chen@linux.intel.com> Reorganize the spculation control MSR update code. Currently it is limited to only dynamic update of the Speculative Store Bypass Disable bit. This patch consolidates the logic to check for AMD CPUs that may or may not use this MSR to control SSBD. This prepares us to add logic to update other bits in the SPEC_CTRL MSR cleanly. Originally-by: Thomas Lendacky <Thomas.Lendacky@amd.com> Signed-off-by: Tim Chen <tim.c.chen@linux.intel.com> --- arch/x86/kernel/process.c | 39 +++++++++++++++++++++++++++++---------- 1 file changed, 29 insertions(+), 10 deletions(-) diff --git a/arch/x86/kernel/process.c b/arch/x86/kernel/process.c index 8aa4960..789f1bada 100644 --- a/arch/x86/kernel/process.c +++ b/arch/x86/kernel/process.c @@ -397,25 +397,45 @@ static __always_inline void amd_set_ssb_virt_state(unsigned long tifn) static __always_inline void spec_ctrl_update_msr(unsigned long tifn) { - u64 msr = x86_spec_ctrl_base | ssbd_tif_to_spec_ctrl(tifn); + u64 msr = x86_spec_ctrl_base; + + /* + * If X86_FEATURE_SSBD is not set, the SSBD + * bit is not to be touched. + */ + if (static_cpu_has(X86_FEATURE_SSBD)) + msr |= ssbd_tif_to_spec_ctrl(tifn); wrmsrl(MSR_IA32_SPEC_CTRL, msr); } -static __always_inline void __speculation_ctrl_update(unsigned long tifn) +static __always_inline void __speculation_ctrl_update(unsigned long tifp, + 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 + bool updmsr = false; + + /* Check for AMD cpu to see if it uses SPEC_CTRL MSR for SSBD */ + 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_SSBD)) + updmsr = true; + } + + if (updmsr) spec_ctrl_update_msr(tifn); } void speculation_ctrl_update(unsigned long tif) { + /* + * On this path we're forcing the update, so use ~tif as the + * previous flags. + */ preempt_disable(); - __speculation_ctrl_update(tif); + __speculation_ctrl_update(~tif, tif); preempt_enable(); } @@ -451,8 +471,7 @@ void __switch_to_xtra(struct task_struct *prev_p, struct task_struct *next_p, 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); } /* -- 2.9.4
next prev parent reply other threads:[~2018-10-17 18:33 UTC|newest] Thread overview: 47+ messages / expand[flat|nested] mbox.gz Atom feed top 2018-10-17 17:59 [Patch v3 00/13] Provide process property based options to enable Spectre v2 userspace-userspace protection Tim Chen 2018-10-17 17:59 ` [Patch v3 01/13] x86/speculation: Clean up spectre_v2_parse_cmdline Tim Chen 2018-10-18 12:43 ` Thomas Gleixner 2018-10-17 17:59 ` [Patch v3 02/13] x86/speculation: Remove unnecessary ret variable in cpu_show_common Tim Chen 2018-10-18 12:46 ` Thomas Gleixner 2018-10-17 17:59 ` [Patch v3 03/13] x86/speculation: Add static key for Enhanced IBRS Tim Chen 2018-10-18 12:50 ` Thomas Gleixner 2018-10-26 16:58 ` Waiman Long 2018-10-26 18:15 ` Tim Chen 2018-10-28 9:32 ` Thomas Gleixner 2018-10-17 17:59 ` [Patch v3 04/13] x86/speculation: Disable STIBP when enhanced IBRS is in use Tim Chen 2018-10-18 12:58 ` Thomas Gleixner 2018-10-26 17:00 ` Waiman Long 2018-10-26 18:18 ` Tim Chen 2018-10-26 18:29 ` Tim Chen 2018-10-17 17:59 ` [Patch v3 05/13] x86/smt: Create cpu_smt_enabled static key for SMT specific code Tim Chen 2018-10-18 13:03 ` Thomas Gleixner 2018-10-19 7:51 ` Peter Zijlstra 2018-10-17 17:59 ` [Patch v3 06/13] mm: Pass task instead of task->mm as argument to set_dumpable Tim Chen 2018-10-18 13:22 ` Thomas Gleixner 2018-10-19 20:02 ` Peter Zijlstra 2018-10-17 17:59 ` [Patch v3 07/13] x86/process Add arch_set_dumpable Tim Chen 2018-10-18 13:28 ` Thomas Gleixner 2018-10-18 18:46 ` Tim Chen 2018-10-19 19:12 ` Thomas Gleixner 2018-10-19 20:16 ` Thomas Gleixner 2018-10-22 23:55 ` Tim Chen 2018-10-17 17:59 ` [Patch v3 08/13] x86/speculation: Rename SSBD update functions Tim Chen 2018-10-18 13:37 ` Thomas Gleixner 2018-10-17 17:59 ` Tim Chen [this message] 2018-10-18 13:47 ` [Patch v3 09/13] x86/speculation: Reorganize SPEC_CTRL MSR update Thomas Gleixner 2018-10-26 17:21 ` Waiman Long 2018-10-26 18:25 ` Tim Chen 2018-10-17 17:59 ` [Patch v3 10/13] x86/speculation: Add per thread STIBP flag Tim Chen 2018-10-18 13:53 ` Thomas Gleixner 2018-10-17 17:59 ` [Patch v3 11/13] x86/speculation: Add Spectre v2 lite app to app protection mode Tim Chen 2018-10-18 15:12 ` Thomas Gleixner 2018-10-17 17:59 ` [Patch v3 12/13] x86/speculation: Protect non-dumpable processes against Spectre v2 attack Tim Chen 2018-10-18 15:17 ` Thomas Gleixner 2018-10-26 17:46 ` Waiman Long 2018-10-26 18:10 ` Tim Chen 2018-10-17 17:59 ` [Patch v3 13/13] x86/speculation: Create PRCTL interface to restrict indirect branch speculation Tim Chen 2018-10-17 19:12 ` Randy Dunlap 2018-10-18 15:31 ` Thomas Gleixner 2018-10-19 7:57 ` [Patch v3 00/13] Provide process property based options to enable Spectre v2 userspace-userspace protection Peter Zijlstra 2018-10-19 16:43 ` Tim Chen 2018-10-19 18:38 ` Peter Zijlstra
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=23d8ffaac99be49aa163eb16dd131399141fc432.1539798901.git.tim.c.chen@linux.intel.com \ --to=tim.c.chen@linux.intel.com \ --cc=aarcange@redhat.com \ --cc=ak@linux.intel.com \ --cc=arjan@linux.intel.com \ --cc=asit.k.mallick@intel.com \ --cc=casey.schaufler@intel.com \ --cc=dave.hansen@intel.com \ --cc=dwmw@amazon.co.uk \ --cc=jcm@redhat.com \ --cc=jikos@kernel.org \ --cc=jpoimboe@redhat.com \ --cc=linux-kernel@vger.kernel.org \ --cc=mingo@redhat.com \ --cc=peterz@infradead.org \ --cc=tglx@linutronix.de \ --cc=thomas.lendacky@amd.com \ --cc=x86@kernel.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).