diff options
Diffstat (limited to 'common/recipes-kernel/linux/linux-yocto-4.9.21/0072-x86-bugs-Unify-x86_spec_ctrl_-set_guest-restore_host.patch')
-rw-r--r-- | common/recipes-kernel/linux/linux-yocto-4.9.21/0072-x86-bugs-Unify-x86_spec_ctrl_-set_guest-restore_host.patch | 145 |
1 files changed, 0 insertions, 145 deletions
diff --git a/common/recipes-kernel/linux/linux-yocto-4.9.21/0072-x86-bugs-Unify-x86_spec_ctrl_-set_guest-restore_host.patch b/common/recipes-kernel/linux/linux-yocto-4.9.21/0072-x86-bugs-Unify-x86_spec_ctrl_-set_guest-restore_host.patch deleted file mode 100644 index e3e0a67d..00000000 --- a/common/recipes-kernel/linux/linux-yocto-4.9.21/0072-x86-bugs-Unify-x86_spec_ctrl_-set_guest-restore_host.patch +++ /dev/null @@ -1,145 +0,0 @@ -From f30cba1d35ebb9a07ebd54253086280080b366a6 Mon Sep 17 00:00:00 2001 -From: Borislav Petkov <bp@suse.de> -Date: Sat, 12 May 2018 00:14:51 +0200 -Subject: [PATCH 72/93] x86/bugs: Unify x86_spec_ctrl_{set_guest,restore_host} - -commit cc69b34989210f067b2c51d5539b5f96ebcc3a01 upstream - -Function bodies are very similar and are going to grow more almost -identical code. Add a bool arg to determine whether SPEC_CTRL is being set -for the guest or restored to the host. - -No functional changes. - -Signed-off-by: Borislav Petkov <bp@suse.de> -Signed-off-by: Thomas Gleixner <tglx@linutronix.de> -Reviewed-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com> -Signed-off-by: David Woodhouse <dwmw@amazon.co.uk> -Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> ---- - arch/x86/include/asm/spec-ctrl.h | 33 +++++++++++++++++++--- - arch/x86/kernel/cpu/bugs.c | 60 ++++++++++------------------------------ - 2 files changed, 44 insertions(+), 49 deletions(-) - -diff --git a/arch/x86/include/asm/spec-ctrl.h b/arch/x86/include/asm/spec-ctrl.h -index 82b6c5a..9cecbe5 100644 ---- a/arch/x86/include/asm/spec-ctrl.h -+++ b/arch/x86/include/asm/spec-ctrl.h -@@ -13,10 +13,35 @@ - * Takes the guest view of SPEC_CTRL MSR as a parameter and also - * the guest's version of VIRT_SPEC_CTRL, if emulated. - */ --extern void x86_spec_ctrl_set_guest(u64 guest_spec_ctrl, -- u64 guest_virt_spec_ctrl); --extern void x86_spec_ctrl_restore_host(u64 guest_spec_ctrl, -- u64 guest_virt_spec_ctrl); -+extern void x86_virt_spec_ctrl(u64 guest_spec_ctrl, u64 guest_virt_spec_ctrl, bool guest); -+ -+/** -+ * x86_spec_ctrl_set_guest - Set speculation control registers for the guest -+ * @guest_spec_ctrl: The guest content of MSR_SPEC_CTRL -+ * @guest_virt_spec_ctrl: The guest controlled bits of MSR_VIRT_SPEC_CTRL -+ * (may get translated to MSR_AMD64_LS_CFG bits) -+ * -+ * Avoids writing to the MSR if the content/bits are the same -+ */ -+static inline -+void x86_spec_ctrl_set_guest(u64 guest_spec_ctrl, u64 guest_virt_spec_ctrl) -+{ -+ x86_virt_spec_ctrl(guest_spec_ctrl, guest_virt_spec_ctrl, true); -+} -+ -+/** -+ * x86_spec_ctrl_restore_host - Restore host speculation control registers -+ * @guest_spec_ctrl: The guest content of MSR_SPEC_CTRL -+ * @guest_virt_spec_ctrl: The guest controlled bits of MSR_VIRT_SPEC_CTRL -+ * (may get translated to MSR_AMD64_LS_CFG bits) -+ * -+ * Avoids writing to the MSR if the content/bits are the same -+ */ -+static inline -+void x86_spec_ctrl_restore_host(u64 guest_spec_ctrl, u64 guest_virt_spec_ctrl) -+{ -+ x86_virt_spec_ctrl(guest_spec_ctrl, guest_virt_spec_ctrl, false); -+} - - /* AMD specific Speculative Store Bypass MSR data */ - extern u64 x86_amd_ls_cfg_base; -diff --git a/arch/x86/kernel/cpu/bugs.c b/arch/x86/kernel/cpu/bugs.c -index eddbdc8..9203150 100644 ---- a/arch/x86/kernel/cpu/bugs.c -+++ b/arch/x86/kernel/cpu/bugs.c -@@ -150,55 +150,25 @@ u64 x86_spec_ctrl_get_default(void) - } - EXPORT_SYMBOL_GPL(x86_spec_ctrl_get_default); - --/** -- * x86_spec_ctrl_set_guest - Set speculation control registers for the guest -- * @guest_spec_ctrl: The guest content of MSR_SPEC_CTRL -- * @guest_virt_spec_ctrl: The guest controlled bits of MSR_VIRT_SPEC_CTRL -- * (may get translated to MSR_AMD64_LS_CFG bits) -- * -- * Avoids writing to the MSR if the content/bits are the same -- */ --void x86_spec_ctrl_set_guest(u64 guest_spec_ctrl, u64 guest_virt_spec_ctrl) -+void -+x86_virt_spec_ctrl(u64 guest_spec_ctrl, u64 guest_virt_spec_ctrl, bool setguest) - { -- u64 host = x86_spec_ctrl_base; -+ struct thread_info *ti = current_thread_info(); -+ u64 msr, host = x86_spec_ctrl_base; - - /* Is MSR_SPEC_CTRL implemented ? */ -- if (!static_cpu_has(X86_FEATURE_MSR_SPEC_CTRL)) -- return; -- -- /* SSBD controlled in MSR_SPEC_CTRL */ -- if (static_cpu_has(X86_FEATURE_SPEC_CTRL_SSBD)) -- host |= ssbd_tif_to_spec_ctrl(current_thread_info()->flags); -- -- if (host != guest_spec_ctrl) -- wrmsrl(MSR_IA32_SPEC_CTRL, guest_spec_ctrl); --} --EXPORT_SYMBOL_GPL(x86_spec_ctrl_set_guest); -- --/** -- * x86_spec_ctrl_restore_host - Restore host speculation control registers -- * @guest_spec_ctrl: The guest content of MSR_SPEC_CTRL -- * @guest_virt_spec_ctrl: The guest controlled bits of MSR_VIRT_SPEC_CTRL -- * (may get translated to MSR_AMD64_LS_CFG bits) -- * -- * Avoids writing to the MSR if the content/bits are the same -- */ --void x86_spec_ctrl_restore_host(u64 guest_spec_ctrl, u64 guest_virt_spec_ctrl) --{ -- u64 host = x86_spec_ctrl_base; -- -- /* Is MSR_SPEC_CTRL implemented ? */ -- if (!static_cpu_has(X86_FEATURE_MSR_SPEC_CTRL)) -- return; -- -- /* SSBD controlled in MSR_SPEC_CTRL */ -- if (static_cpu_has(X86_FEATURE_SPEC_CTRL_SSBD)) -- host |= ssbd_tif_to_spec_ctrl(current_thread_info()->flags); -- -- if (host != guest_spec_ctrl) -- wrmsrl(MSR_IA32_SPEC_CTRL, host); -+ if (static_cpu_has(X86_FEATURE_MSR_SPEC_CTRL)) { -+ /* SSBD controlled in MSR_SPEC_CTRL */ -+ if (static_cpu_has(X86_FEATURE_SPEC_CTRL_SSBD)) -+ host |= ssbd_tif_to_spec_ctrl(ti->flags); -+ -+ if (host != guest_spec_ctrl) { -+ msr = setguest ? guest_spec_ctrl : host; -+ wrmsrl(MSR_IA32_SPEC_CTRL, msr); -+ } -+ } - } --EXPORT_SYMBOL_GPL(x86_spec_ctrl_restore_host); -+EXPORT_SYMBOL_GPL(x86_virt_spec_ctrl); - - static void x86_amd_ssb_disable(void) - { --- -2.7.4 - |