aboutsummaryrefslogtreecommitdiffstats
path: root/common/recipes-kernel/linux/linux-yocto-4.9.21/x86-asm-Move-status-from-thread_struct-to-thread_inf-linux-yocto.patch
diff options
context:
space:
mode:
Diffstat (limited to 'common/recipes-kernel/linux/linux-yocto-4.9.21/x86-asm-Move-status-from-thread_struct-to-thread_inf-linux-yocto.patch')
-rw-r--r--common/recipes-kernel/linux/linux-yocto-4.9.21/x86-asm-Move-status-from-thread_struct-to-thread_inf-linux-yocto.patch187
1 files changed, 0 insertions, 187 deletions
diff --git a/common/recipes-kernel/linux/linux-yocto-4.9.21/x86-asm-Move-status-from-thread_struct-to-thread_inf-linux-yocto.patch b/common/recipes-kernel/linux/linux-yocto-4.9.21/x86-asm-Move-status-from-thread_struct-to-thread_inf-linux-yocto.patch
deleted file mode 100644
index 28daae3a..00000000
--- a/common/recipes-kernel/linux/linux-yocto-4.9.21/x86-asm-Move-status-from-thread_struct-to-thread_inf-linux-yocto.patch
+++ /dev/null
@@ -1,187 +0,0 @@
-From be756593e543b901edc0e7489949f08c8d2737bf Mon Sep 17 00:00:00 2001
-From: Andy Lutomirski <luto@kernel.org>
-Date: Sun, 28 Jan 2018 10:38:50 -0800
-Subject: [PATCH 23/42] x86/asm: Move 'status' from thread_struct to
- thread_info
-
-(cherry picked from commit 37a8f7c38339b22b69876d6f5a0ab851565284e3)
-
-The TS_COMPAT bit is very hot and is accessed from code paths that mostly
-also touch thread_info::flags. Move it into struct thread_info to improve
-cache locality.
-
-The only reason it was in thread_struct is that there was a brief period
-during which arch-specific fields were not allowed in struct thread_info.
-
-Linus suggested further changing:
-
- ti->status &= ~(TS_COMPAT|TS_I386_REGS_POKED);
-
-to:
-
- if (unlikely(ti->status & (TS_COMPAT|TS_I386_REGS_POKED)))
- ti->status &= ~(TS_COMPAT|TS_I386_REGS_POKED);
-
-on the theory that frequently dirtying the cacheline even in pure 64-bit
-code that never needs to modify status hurts performance. That could be a
-reasonable followup patch, but I suspect it matters less on top of this
-patch.
-
-Suggested-by: Linus Torvalds <torvalds@linux-foundation.org>
-Signed-off-by: Andy Lutomirski <luto@kernel.org>
-Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
-Reviewed-by: Ingo Molnar <mingo@kernel.org>
-Acked-by: Linus Torvalds <torvalds@linux-foundation.org>
-Cc: Borislav Petkov <bp@alien8.de>
-Cc: Kernel Hardening <kernel-hardening@lists.openwall.com>
-Link: https://lkml.kernel.org/r/03148bcc1b217100e6e8ecf6a5468c45cf4304b6.1517164461.git.luto@kernel.org
-Signed-off-by: David Woodhouse <dwmw@amazon.co.uk>
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
----
- arch/x86/entry/common.c | 4 ++--
- arch/x86/include/asm/processor.h | 2 --
- arch/x86/include/asm/syscall.h | 6 +++---
- arch/x86/include/asm/thread_info.h | 3 ++-
- arch/x86/kernel/process_64.c | 4 ++--
- arch/x86/kernel/ptrace.c | 2 +-
- arch/x86/kernel/signal.c | 2 +-
- 7 files changed, 11 insertions(+), 12 deletions(-)
-
-diff --git a/arch/x86/entry/common.c b/arch/x86/entry/common.c
-index bdd9cc5..bd1d102 100644
---- a/arch/x86/entry/common.c
-+++ b/arch/x86/entry/common.c
-@@ -201,7 +201,7 @@ __visible inline void prepare_exit_to_usermode(struct pt_regs *regs)
- * special case only applies after poking regs and before the
- * very next return to user mode.
- */
-- current->thread.status &= ~(TS_COMPAT|TS_I386_REGS_POKED);
-+ ti->status &= ~(TS_COMPAT|TS_I386_REGS_POKED);
- #endif
-
- user_enter_irqoff();
-@@ -299,7 +299,7 @@ static __always_inline void do_syscall_32_irqs_on(struct pt_regs *regs)
- unsigned int nr = (unsigned int)regs->orig_ax;
-
- #ifdef CONFIG_IA32_EMULATION
-- current->thread.status |= TS_COMPAT;
-+ ti->status |= TS_COMPAT;
- #endif
-
- if (READ_ONCE(ti->flags) & _TIF_WORK_SYSCALL_ENTRY) {
-diff --git a/arch/x86/include/asm/processor.h b/arch/x86/include/asm/processor.h
-index e40b19c..a781668 100644
---- a/arch/x86/include/asm/processor.h
-+++ b/arch/x86/include/asm/processor.h
-@@ -391,8 +391,6 @@ struct thread_struct {
- unsigned short gsindex;
- #endif
-
-- u32 status; /* thread synchronous flags */
--
- #ifdef CONFIG_X86_64
- unsigned long fsbase;
- unsigned long gsbase;
-diff --git a/arch/x86/include/asm/syscall.h b/arch/x86/include/asm/syscall.h
-index e3c95e8..03eedc2 100644
---- a/arch/x86/include/asm/syscall.h
-+++ b/arch/x86/include/asm/syscall.h
-@@ -60,7 +60,7 @@ static inline long syscall_get_error(struct task_struct *task,
- * TS_COMPAT is set for 32-bit syscall entries and then
- * remains set until we return to user mode.
- */
-- if (task->thread.status & (TS_COMPAT|TS_I386_REGS_POKED))
-+ if (task->thread_info.status & (TS_COMPAT|TS_I386_REGS_POKED))
- /*
- * Sign-extend the value so (int)-EFOO becomes (long)-EFOO
- * and will match correctly in comparisons.
-@@ -116,7 +116,7 @@ static inline void syscall_get_arguments(struct task_struct *task,
- unsigned long *args)
- {
- # ifdef CONFIG_IA32_EMULATION
-- if (task->thread.status & TS_COMPAT)
-+ if (task->thread_info.status & TS_COMPAT)
- switch (i) {
- case 0:
- if (!n--) break;
-@@ -177,7 +177,7 @@ static inline void syscall_set_arguments(struct task_struct *task,
- const unsigned long *args)
- {
- # ifdef CONFIG_IA32_EMULATION
-- if (task->thread.status & TS_COMPAT)
-+ if (task->thread_info.status & TS_COMPAT)
- switch (i) {
- case 0:
- if (!n--) break;
-diff --git a/arch/x86/include/asm/thread_info.h b/arch/x86/include/asm/thread_info.h
-index bdf9c4c..89978b9 100644
---- a/arch/x86/include/asm/thread_info.h
-+++ b/arch/x86/include/asm/thread_info.h
-@@ -54,6 +54,7 @@ struct task_struct;
-
- struct thread_info {
- unsigned long flags; /* low level flags */
-+ u32 status; /* thread synchronous flags */
- };
-
- #define INIT_THREAD_INFO(tsk) \
-@@ -213,7 +214,7 @@ static inline int arch_within_stack_frames(const void * const stack,
- #define in_ia32_syscall() true
- #else
- #define in_ia32_syscall() (IS_ENABLED(CONFIG_IA32_EMULATION) && \
-- current->thread.status & TS_COMPAT)
-+ current_thread_info()->status & TS_COMPAT)
- #endif
-
- /*
-diff --git a/arch/x86/kernel/process_64.c b/arch/x86/kernel/process_64.c
-index b3760b3..dca15e1 100644
---- a/arch/x86/kernel/process_64.c
-+++ b/arch/x86/kernel/process_64.c
-@@ -512,7 +512,7 @@ void set_personality_ia32(bool x32)
- current->personality &= ~READ_IMPLIES_EXEC;
- /* in_compat_syscall() uses the presence of the x32
- syscall bit flag to determine compat status */
-- current->thread.status &= ~TS_COMPAT;
-+ current_thread_info()->status &= ~TS_COMPAT;
- } else {
- set_thread_flag(TIF_IA32);
- clear_thread_flag(TIF_X32);
-@@ -520,7 +520,7 @@ void set_personality_ia32(bool x32)
- current->mm->context.ia32_compat = TIF_IA32;
- current->personality |= force_personality32;
- /* Prepare the first "return" to user space */
-- current->thread.status |= TS_COMPAT;
-+ current_thread_info()->status |= TS_COMPAT;
- }
- }
- EXPORT_SYMBOL_GPL(set_personality_ia32);
-diff --git a/arch/x86/kernel/ptrace.c b/arch/x86/kernel/ptrace.c
-index 0e63c02..e497d37 100644
---- a/arch/x86/kernel/ptrace.c
-+++ b/arch/x86/kernel/ptrace.c
-@@ -934,7 +934,7 @@ static int putreg32(struct task_struct *child, unsigned regno, u32 value)
- */
- regs->orig_ax = value;
- if (syscall_get_nr(child, regs) >= 0)
-- child->thread.status |= TS_I386_REGS_POKED;
-+ child->thread_info.status |= TS_I386_REGS_POKED;
- break;
-
- case offsetof(struct user32, regs.eflags):
-diff --git a/arch/x86/kernel/signal.c b/arch/x86/kernel/signal.c
-index 763af1d..b1a5d25 100644
---- a/arch/x86/kernel/signal.c
-+++ b/arch/x86/kernel/signal.c
-@@ -785,7 +785,7 @@ static inline unsigned long get_nr_restart_syscall(const struct pt_regs *regs)
- * than the tracee.
- */
- #ifdef CONFIG_IA32_EMULATION
-- if (current->thread.status & (TS_COMPAT|TS_I386_REGS_POKED))
-+ if (current_thread_info()->status & (TS_COMPAT|TS_I386_REGS_POKED))
- return __NR_ia32_restart_syscall;
- #endif
- #ifdef CONFIG_X86_X32_ABI
---
-2.7.4
-