summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPaul Gortmaker <paul.gortmaker@windriver.com>2016-12-25 12:30:13 -0500
committerPaul Gortmaker <paul.gortmaker@windriver.com>2016-12-25 12:37:55 -0500
commit89970dc5aed91bca6c41e9aa43cad7645cf37ddc (patch)
tree33a1c0633cc3759ffaf944c26566e8eecf1b0d3a
parentaf0b01563495be2071e245f0cf7eeb9cbbf824b1 (diff)
download4.9-rt-patches-89970dc5aed91bca6c41e9aa43cad7645cf37ddc.tar.gz
x86: temp backport; make thread_info arch specific again
With the advantage of hindsight, we know this upstream pseudo revert commit is pending, and can just add it in early and save mucking about with the x86 preempt lazy patches.
-rw-r--r--patches/sched-core-x86-Make-struct-thread_info-arch-specific.patch91
-rw-r--r--patches/series1
2 files changed, 92 insertions, 0 deletions
diff --git a/patches/sched-core-x86-Make-struct-thread_info-arch-specific.patch b/patches/sched-core-x86-Make-struct-thread_info-arch-specific.patch
new file mode 100644
index 00000000000000..ebfa5cc91637f2
--- /dev/null
+++ b/patches/sched-core-x86-Make-struct-thread_info-arch-specific.patch
@@ -0,0 +1,91 @@
+From c8061485a0d7569a865a3cc3c63347b0f42b3765 Mon Sep 17 00:00:00 2001
+From: Heiko Carstens <heiko.carstens@de.ibm.com>
+Date: Wed, 19 Oct 2016 19:28:11 +0100
+Subject: [PATCH] sched/core, x86: Make struct thread_info arch specific again
+
+commit c8061485a0d7569a865a3cc3c63347b0f42b3765 upstream.
+
+The following commit:
+
+ c65eacbe290b ("sched/core: Allow putting thread_info into task_struct")
+
+... made 'struct thread_info' a generic struct with only a
+single ::flags member, if CONFIG_THREAD_INFO_IN_TASK_STRUCT=y is
+selected.
+
+This change however seems to be quite x86 centric, since at least the
+generic preemption code (asm-generic/preempt.h) assumes that struct
+thread_info also has a preempt_count member, which apparently was not
+true for x86.
+
+We could add a bit more #ifdefs to solve this problem too, but it seems
+to be much simpler to make struct thread_info arch specific
+again. This also makes the conversion to THREAD_INFO_IN_TASK_STRUCT a
+bit easier for architectures that have a couple of arch specific stuff
+in their thread_info definition.
+
+The arch specific stuff _could_ be moved to thread_struct. However
+keeping them in thread_info makes it easier: accessing thread_info
+members is simple, since it is at the beginning of the task_struct,
+while the thread_struct is at the end. At least on s390 the offsets
+needed to access members of the thread_struct (with task_struct as
+base) are too large for various asm instructions. This is not a
+problem when keeping these members within thread_info.
+
+Signed-off-by: Heiko Carstens <heiko.carstens@de.ibm.com>
+Signed-off-by: Mark Rutland <mark.rutland@arm.com>
+Acked-by: Thomas Gleixner <tglx@linutronix.de>
+Cc: Andrew Morton <akpm@linux-foundation.org>
+Cc: Andy Lutomirski <luto@kernel.org>
+Cc: Linus Torvalds <torvalds@linux-foundation.org>
+Cc: Peter Zijlstra <peterz@infradead.org>
+Cc: keescook@chromium.org
+Cc: linux-arch@vger.kernel.org
+Link: http://lkml.kernel.org/r/1476901693-8492-2-git-send-email-mark.rutland@arm.com
+Signed-off-by: Ingo Molnar <mingo@kernel.org>
+
+diff --git a/arch/x86/include/asm/thread_info.h b/arch/x86/include/asm/thread_info.h
+index 2aaca53c0974..ad6f5eb07a95 100644
+--- a/arch/x86/include/asm/thread_info.h
++++ b/arch/x86/include/asm/thread_info.h
+@@ -52,6 +52,15 @@ struct task_struct;
+ #include <asm/cpufeature.h>
+ #include <linux/atomic.h>
+
++struct thread_info {
++ unsigned long flags; /* low level flags */
++};
++
++#define INIT_THREAD_INFO(tsk) \
++{ \
++ .flags = 0, \
++}
++
+ #define init_stack (init_thread_union.stack)
+
+ #else /* !__ASSEMBLY__ */
+diff --git a/include/linux/thread_info.h b/include/linux/thread_info.h
+index 45f004e9cc59..2873baf5372a 100644
+--- a/include/linux/thread_info.h
++++ b/include/linux/thread_info.h
+@@ -14,17 +14,6 @@ struct timespec;
+ struct compat_timespec;
+
+ #ifdef CONFIG_THREAD_INFO_IN_TASK
+-struct thread_info {
+- unsigned long flags; /* low level flags */
+-};
+-
+-#define INIT_THREAD_INFO(tsk) \
+-{ \
+- .flags = 0, \
+-}
+-#endif
+-
+-#ifdef CONFIG_THREAD_INFO_IN_TASK
+ #define current_thread_info() ((struct thread_info *)current)
+ #endif
+
+--
+2.10.1
+
diff --git a/patches/series b/patches/series
index 295380d3439339..ef7f2e4776a065 100644
--- a/patches/series
+++ b/patches/series
@@ -547,6 +547,7 @@ rcu-enable-rcu_normal_after_boot-by-default-for-RT.patch
# PREEMPT LAZY
preempt-lazy-support.patch
ftrace-Fix-trace-header-alignment.patch
+sched-core-x86-Make-struct-thread_info-arch-specific.patch
x86-preempt-lazy.patch
arm-preempt-lazy-support.patch
powerpc-preempt-lazy-support.patch