aboutsummaryrefslogtreecommitdiffstats
path: root/common/recipes-kernel/linux/linux-yocto-4.9.21/0036-x86-process-Correct-and-optimize-TIF_BLOCKSTEP-switc.patch
diff options
context:
space:
mode:
Diffstat (limited to 'common/recipes-kernel/linux/linux-yocto-4.9.21/0036-x86-process-Correct-and-optimize-TIF_BLOCKSTEP-switc.patch')
-rw-r--r--common/recipes-kernel/linux/linux-yocto-4.9.21/0036-x86-process-Correct-and-optimize-TIF_BLOCKSTEP-switc.patch84
1 files changed, 0 insertions, 84 deletions
diff --git a/common/recipes-kernel/linux/linux-yocto-4.9.21/0036-x86-process-Correct-and-optimize-TIF_BLOCKSTEP-switc.patch b/common/recipes-kernel/linux/linux-yocto-4.9.21/0036-x86-process-Correct-and-optimize-TIF_BLOCKSTEP-switc.patch
deleted file mode 100644
index 9fd2ab23..00000000
--- a/common/recipes-kernel/linux/linux-yocto-4.9.21/0036-x86-process-Correct-and-optimize-TIF_BLOCKSTEP-switc.patch
+++ /dev/null
@@ -1,84 +0,0 @@
-From 19f795b97249d2e81ea918644577ab9669704c28 Mon Sep 17 00:00:00 2001
-From: Kyle Huey <me@kylehuey.com>
-Date: Tue, 14 Feb 2017 00:11:03 -0800
-Subject: [PATCH 36/93] x86/process: Correct and optimize TIF_BLOCKSTEP switch
-
-commit b9894a2f5bd18b1691cb6872c9afe32b148d0132 upstream
-
-The debug control MSR is "highly magical" as the blockstep bit can be
-cleared by hardware under not well documented circumstances.
-
-So a task switch relying on the bit set by the previous task (according to
-the previous tasks thread flags) can trip over this and not update the flag
-for the next task.
-
-To fix this its required to handle DEBUGCTLMSR_BTF when either the previous
-or the next or both tasks have the TIF_BLOCKSTEP flag set.
-
-While at it avoid branching within the TIF_BLOCKSTEP case and evaluating
-boot_cpu_data twice in kernels without CONFIG_X86_DEBUGCTLMSR.
-
-x86_64: arch/x86/kernel/process.o
-text data bss dec hex
-3024 8577 16 11617 2d61 Before
-3008 8577 16 11601 2d51 After
-
-i386: No change
-
-[ tglx: Made the shift value explicit, use a local variable to make the
-code readable and massaged changelog]
-
-Originally-by: Thomas Gleixner <tglx@linutronix.de>
-Signed-off-by: Kyle Huey <khuey@kylehuey.com>
-Cc: Peter Zijlstra <peterz@infradead.org>
-Cc: Andy Lutomirski <luto@kernel.org>
-Link: http://lkml.kernel.org/r/20170214081104.9244-3-khuey@kylehuey.com
-Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
-
-Signed-off-by: David Woodhouse <dwmw@amazon.co.uk>
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
----
- arch/x86/include/asm/msr-index.h | 1 +
- arch/x86/kernel/process.c | 12 +++++++-----
- 2 files changed, 8 insertions(+), 5 deletions(-)
-
-diff --git a/arch/x86/include/asm/msr-index.h b/arch/x86/include/asm/msr-index.h
-index 9f014c1..4027c33 100644
---- a/arch/x86/include/asm/msr-index.h
-+++ b/arch/x86/include/asm/msr-index.h
-@@ -141,6 +141,7 @@
-
- /* DEBUGCTLMSR bits (others vary by model): */
- #define DEBUGCTLMSR_LBR (1UL << 0) /* last branch recording */
-+#define DEBUGCTLMSR_BTF_SHIFT 1
- #define DEBUGCTLMSR_BTF (1UL << 1) /* single-step on branches */
- #define DEBUGCTLMSR_TR (1UL << 6)
- #define DEBUGCTLMSR_BTS (1UL << 7)
-diff --git a/arch/x86/kernel/process.c b/arch/x86/kernel/process.c
-index 0e1999e..496eef6 100644
---- a/arch/x86/kernel/process.c
-+++ b/arch/x86/kernel/process.c
-@@ -227,13 +227,15 @@ void __switch_to_xtra(struct task_struct *prev_p, struct task_struct *next_p,
-
- propagate_user_return_notify(prev_p, next_p);
-
-- if ((tifp ^ tifn) & _TIF_BLOCKSTEP) {
-- unsigned long debugctl = get_debugctlmsr();
-+ if ((tifp & _TIF_BLOCKSTEP || tifn & _TIF_BLOCKSTEP) &&
-+ arch_has_block_step()) {
-+ unsigned long debugctl, msk;
-
-+ rdmsrl(MSR_IA32_DEBUGCTLMSR, debugctl);
- debugctl &= ~DEBUGCTLMSR_BTF;
-- if (tifn & _TIF_BLOCKSTEP)
-- debugctl |= DEBUGCTLMSR_BTF;
-- update_debugctlmsr(debugctl);
-+ msk = tifn & _TIF_BLOCKSTEP;
-+ debugctl |= (msk >> TIF_BLOCKSTEP) << DEBUGCTLMSR_BTF_SHIFT;
-+ wrmsrl(MSR_IA32_DEBUGCTLMSR, debugctl);
- }
-
- if ((tifp ^ tifn) & _TIF_NOTSC) {
---
-2.7.4
-