Commit 2a2e8202 authored by Ard Biesheuvel's avatar Ard Biesheuvel Committed by Helge Deller
Browse files

parisc: move CPU field back into thread_info



In commit 2214c0e7 ("parisc: Move thread_info into task struct")
PA-RISC gained support for THREAD_INFO_IN_TASK while changes were
already underway to keep the CPU field in thread_info rather than move
it into task_struct when THREAD_INFO_IN_TASK is enabled. The result is a
broken build for all PA-RISC configs that enable SMP.

So let's partially revert that commit, and get rid of the ugly hack to
get at the offset of task_struct::cpu without having to include
linux/sched.h, and put the CPU field back where it was before.

Reported-by: default avatarGuenter Roeck <linux@roeck-us.net>
Fixes: bcf9033e ("sched: move CPU field back into thread_info if THREAD_INFO_IN_TASK=y")
Signed-off-by: default avatarArd Biesheuvel <ardb@kernel.org>
Signed-off-by: default avatarHelge Deller <deller@gmx.de>
parent 7e992711
Loading
Loading
Loading
Loading
+2 −17
Original line number Diff line number Diff line
@@ -32,25 +32,10 @@ extern void smp_send_all_nop(void);
extern void arch_send_call_function_single_ipi(int cpu);
extern void arch_send_call_function_ipi_mask(const struct cpumask *mask);

#define raw_smp_processor_id()		(current_thread_info()->cpu)

#endif /* !ASSEMBLY */

/*
 * 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; }
+3 −0
Original line number Diff line number Diff line
@@ -9,6 +9,9 @@
struct thread_info {
	unsigned long flags;		/* thread_info flags (see TIF_*) */
	int preempt_count;		/* 0=premptable, <0=BUG; will also serve as bh-counter */
#ifdef CONFIG_SMP
	unsigned int cpu;
#endif
};

#define INIT_THREAD_INFO(tsk)			\
+0 −5
Original line number Diff line number Diff line
@@ -14,8 +14,6 @@
 *    Copyright (C) 2003 James Bottomley <jejb at parisc-linux.org>
 */

#define GENERATING_ASM_OFFSETS /* asm/smp.h */

#include <linux/types.h>
#include <linux/sched.h>
#include <linux/thread_info.h>
@@ -39,9 +37,6 @@ int main(void)
{
	DEFINE(TASK_TI_FLAGS, offsetof(struct task_struct, thread_info.flags));
	DEFINE(TASK_STACK, offsetof(struct task_struct, stack));
#ifdef CONFIG_SMP
	DEFINE(TASK_CPU, offsetof(struct task_struct, cpu));
#endif
	BLANK();
	DEFINE(TASK_REGS, offsetof(struct task_struct, thread.regs));
	DEFINE(TASK_PT_PSW, offsetof(struct task_struct, thread.regs.gr[ 0]));
+0 −2
Original line number Diff line number Diff line
@@ -339,8 +339,6 @@ int smp_boot_one_cpu(int cpuid, struct task_struct *idle)
	const struct cpuinfo_parisc *p = &per_cpu(cpu_data, cpuid);
	long timeout;

	idle->cpu = cpuid;

	/* Let _start know what logical CPU we're booting
	** (offset into init_tasks[],cpu_data[])
	*/