aboutsummaryrefslogtreecommitdiffstats
path: root/arch/parisc/include/asm/smp.h
diff options
context:
space:
mode:
authorHelge Deller <deller@gmx.de>2021-10-15 10:41:03 +0200
committerHelge Deller <deller@gmx.de>2021-11-01 07:35:59 +0100
commit2214c0e77259b420402e279e9ab4277ef320d371 (patch)
tree2533ae4177d0ac79d41446b273e90243d30bd3e5 /arch/parisc/include/asm/smp.h
parentparisc: add support for TOC (transfer of control) (diff)
downloadlinux-dev-2214c0e77259b420402e279e9ab4277ef320d371.tar.xz
linux-dev-2214c0e77259b420402e279e9ab4277ef320d371.zip
parisc: Move thread_info into task struct
This implements the CONFIG_THREAD_INFO_IN_TASK option. With this change: - before thread_info was part of the stack and located at the beginning of the stack - now the thread_info struct is moved and located inside the task_struct structure - the stack is allocated and handled like the major other platforms - drop the cpu field of thread_info and use instead the one in task_struct Signed-off-by: Helge Deller <deller@gmx.de> Signed-off-by: Sven Schnelle <svens@stackframe.org>
Diffstat (limited to 'arch/parisc/include/asm/smp.h')
-rw-r--r--arch/parisc/include/asm/smp.h19
1 files changed, 17 insertions, 2 deletions
diff --git a/arch/parisc/include/asm/smp.h b/arch/parisc/include/asm/smp.h
index b9a18db4b05a..16d41127500e 100644
--- a/arch/parisc/include/asm/smp.h
+++ b/arch/parisc/include/asm/smp.h
@@ -34,8 +34,23 @@ extern void arch_send_call_function_ipi_mask(const struct cpumask *mask);
#endif /* !ASSEMBLY */
-#define raw_smp_processor_id() (current_thread_info()->cpu)
-
+/*
+ * This is particularly ugly: it appears we can't actually get the definition
+ * of task_struct here, but we need access to the CPU this task is running on.
+ * Instead of using task_struct we're using TASK_CPU which is extracted from
+ * asm-offsets.h by kbuild to get the current processor ID.
+ *
+ * This also needs to be safeguarded when building asm-offsets.s because at
+ * that time TASK_CPU is not defined yet. It could have been guarded by
+ * TASK_CPU itself, but we want the build to fail if TASK_CPU is missing
+ * when building something else than asm-offsets.s
+ */
+#ifdef GENERATING_ASM_OFFSETS
+#define raw_smp_processor_id() (0)
+#else
+#include <asm/asm-offsets.h>
+#define raw_smp_processor_id() (*(unsigned int *)((void *)current + TASK_CPU))
+#endif
#else /* CONFIG_SMP */
static inline void smp_send_all_nop(void) { return; }