summaryrefslogtreecommitdiff
path: root/include/linux
diff options
context:
space:
mode:
authorMark Rutland <mark.rutland@arm.com>2016-10-19 19:28:13 +0100
committerZubin Mithra <zsm@google.com>2017-08-09 15:23:22 +0100
commitf2b8210f0a7c3f717b82880a1160aaa9255ceecf (patch)
tree1a915fffaa7ef528cb1dfb4e8f8b95724a70c7bf /include/linux
parent264c551c4c77c9645a1c5a03735a71ed37348bc4 (diff)
UPSTREAM: thread_info: include <current.h> for THREAD_INFO_IN_TASK
When CONFIG_THREAD_INFO_IN_TASK is selected, the current_thread_info() macro relies on current having been defined prior to its use. However, not all users of current_thread_info() include <asm/current.h>, and thus current is not guaranteed to be defined. When CONFIG_THREAD_INFO_IN_TASK is not selected, it's possible that get_current() / current are based upon current_thread_info(), and <asm/current.h> includes <asm/thread_info.h>. Thus always including <asm/current.h> would result in circular dependences on some platforms. To ensure both cases work, this patch includes <asm/current.h>, but only when CONFIG_THREAD_INFO_IN_TASK is selected. Signed-off-by: Mark Rutland <mark.rutland@arm.com> Acked-by: Heiko Carstens <heiko.carstens@de.ibm.com> Reviewed-by: Andy Lutomirski <luto@kernel.org> Cc: Andrew Morton <akpm@linux-foundation.org> Cc: Kees Cook <keescook@chromium.org> Signed-off-by: Catalin Marinas <catalin.marinas@arm.com> Bug: 38331309 Change-Id: Ia981a829798d60a54d4e3eb679d8e24b01228357 (cherry picked from commit dc3d2a679cd8631b8a570fc8ca5f4712d7d25698) Signed-off-by: Zubin Mithra <zsm@google.com>
Diffstat (limited to 'include/linux')
-rw-r--r--include/linux/thread_info.h17
1 files changed, 6 insertions, 11 deletions
diff --git a/include/linux/thread_info.h b/include/linux/thread_info.h
index e8369b0d71e1..8933ecc2bc9f 100644
--- a/include/linux/thread_info.h
+++ b/include/linux/thread_info.h
@@ -12,17 +12,12 @@
#include <linux/restart_block.h>
#ifdef CONFIG_THREAD_INFO_IN_TASK
-struct thread_info {
- u32 flags; /* low level flags */
-};
-
-#define INIT_THREAD_INFO(tsk) \
-{ \
- .flags = 0, \
-}
-#endif
-
-#ifdef CONFIG_THREAD_INFO_IN_TASK
+/*
+ * For CONFIG_THREAD_INFO_IN_TASK kernels we need <asm/current.h> for the
+ * definition of current, but for !CONFIG_THREAD_INFO_IN_TASK kernels,
+ * including <asm/current.h> can cause a circular dependency on some platforms.
+ */
+#include <asm/current.h>
#define current_thread_info() ((struct thread_info *)current)
#endif