smp: Add task_struct argument to __cpu_up()
authorThomas Gleixner <tglx@linutronix.de>
Fri, 20 Apr 2012 13:05:42 +0000 (13:05 +0000)
committerThomas Gleixner <tglx@linutronix.de>
Thu, 26 Apr 2012 10:06:09 +0000 (12:06 +0200)
Preparatory patch to make the idle thread allocation for secondary
cpus generic.

Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Rusty Russell <rusty@rustcorp.com.au>
Cc: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
Cc: Srivatsa S. Bhat <srivatsa.bhat@linux.vnet.ibm.com>
Cc: Matt Turner <mattst88@gmail.com>
Cc: Russell King <linux@arm.linux.org.uk>
Cc: Mike Frysinger <vapier@gentoo.org>
Cc: Jesper Nilsson <jesper.nilsson@axis.com>
Cc: Richard Kuo <rkuo@codeaurora.org>
Cc: Tony Luck <tony.luck@intel.com>
Cc: Hirokazu Takata <takata@linux-m32r.org>
Cc: Ralf Baechle <ralf@linux-mips.org>
Cc: David Howells <dhowells@redhat.com>
Cc: James E.J. Bottomley <jejb@parisc-linux.org>
Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Cc: Martin Schwidefsky <schwidefsky@de.ibm.com>
Cc: Paul Mundt <lethal@linux-sh.org>
Cc: David S. Miller <davem@davemloft.net>
Cc: Chris Metcalf <cmetcalf@tilera.com>
Cc: Richard Weinberger <richard@nod.at>
Cc: x86@kernel.org
Link: http://lkml.kernel.org/r/20120420124556.964170564@linutronix.de
21 files changed:
arch/alpha/kernel/smp.c
arch/arm/kernel/smp.c
arch/blackfin/mach-common/smp.c
arch/cris/arch-v32/kernel/smp.c
arch/hexagon/kernel/smp.c
arch/ia64/kernel/smpboot.c
arch/m32r/kernel/smpboot.c
arch/mips/kernel/smp.c
arch/mn10300/kernel/smp.c
arch/parisc/kernel/smp.c
arch/powerpc/kernel/smp.c
arch/s390/include/asm/smp.h
arch/s390/kernel/smp.c
arch/sh/kernel/smp.c
arch/sparc/kernel/smp_32.c
arch/sparc/kernel/smp_64.c
arch/tile/kernel/smpboot.c
arch/um/kernel/smp.c
arch/x86/include/asm/smp.h
include/linux/smp.h
kernel/cpu.c

index 50d438db1f6ba3d8fc7131c30d340bb7d293d414..68d39470fb52cad414223f1dbfc78a8444683612 100644 (file)
@@ -487,7 +487,7 @@ smp_prepare_boot_cpu(void)
 }
 
 int __cpuinit
-__cpu_up(unsigned int cpu)
+__cpu_up(unsigned int cpu, struct task_struct *tidle)
 {
        smp_boot_one_cpu(cpu);
 
index addbbe8028c29c8789fd730fa784b056065787e5..f0e2cbbd837d779e5aa336f83648fb3171ef2803 100644 (file)
@@ -60,7 +60,7 @@ enum ipi_msg_type {
 
 static DECLARE_COMPLETION(cpu_running);
 
-int __cpuinit __cpu_up(unsigned int cpu)
+int __cpuinit __cpu_up(unsigned int cpu, struct task_struct *tidle)
 {
        struct cpuinfo_arm *ci = &per_cpu(cpu_data, cpu);
        struct task_struct *idle = ci->idle;
index ac8f8a43158c5b85b5524d15bd3a74b8d5de0507..d0cddd95b0dd5b1520f191dfa7b84f8f9ddff670 100644 (file)
@@ -340,7 +340,7 @@ void smp_send_stop(void)
        return;
 }
 
-int __cpuinit __cpu_up(unsigned int cpu)
+int __cpuinit __cpu_up(unsigned int cpu, struct task_struct *tidle)
 {
        int ret;
        struct blackfin_cpudata *ci = &per_cpu(cpu_data, cpu);
index 0b99df72d2a460992978256eacf8b48c6f56d180..125ee2d7bc875a3e0c8e9e090f9119123e9d477d 100644 (file)
@@ -207,7 +207,7 @@ int setup_profiling_timer(unsigned int multiplier)
  */
 unsigned long cache_decay_ticks = 1;
 
-int __cpuinit __cpu_up(unsigned int cpu)
+int __cpuinit __cpu_up(unsigned int cpu, struct task_struct *tidle)
 {
        smp_boot_one_cpu(cpu);
        return cpu_online(cpu) ? 0 : -ENOSYS;
index 1298141874a3b4890d1dfab3c82529b49ecd5a78..93e77e2b17a8c6091dadf6a6c8eaaf4ac3abcb7c 100644 (file)
@@ -196,7 +196,7 @@ void __cpuinit start_secondary(void)
  * maintains control until "cpu_online(cpu)" is set.
  */
 
-int __cpuinit __cpu_up(unsigned int cpu)
+int __cpuinit __cpu_up(unsigned int cpu, struct task_struct *tidle)
 {
        struct task_struct *idle;
        struct thread_info *thread;
index 796f6a5b966a742d46a4f63417939e0a737a0732..03e4ef3893c93dd7a242f02f9d732ebf0144bcf8 100644 (file)
@@ -793,7 +793,7 @@ set_cpu_sibling_map(int cpu)
 }
 
 int __cpuinit
-__cpu_up (unsigned int cpu)
+__cpu_up(unsigned int cpu, struct task_struct *tidle)
 {
        int ret;
        int sapicid;
index 31541c9b7eb62b053004fe50c8fbeb8bed57589d..a2cfc0abb05ce4de59521727c147ee6b0b23965a 100644 (file)
@@ -343,7 +343,7 @@ static void __init do_boot_cpu(int phys_id)
        }
 }
 
-int __cpuinit __cpu_up(unsigned int cpu_id)
+int __cpuinit __cpu_up(unsigned int cpu_id, struct task_struct *tidle)
 {
        int timeout;
 
index ba9376bf52a1e80bdaaef76201b50d973c932d0c..41079b256092c89335d4e171f7b73ac1fe8db51e 100644 (file)
@@ -209,7 +209,7 @@ static void __cpuinit do_fork_idle(struct work_struct *work)
        complete(&c_idle->done);
 }
 
-int __cpuinit __cpu_up(unsigned int cpu)
+int __cpuinit __cpu_up(unsigned int cpu, struct task_struct *tidle)
 {
        struct task_struct *idle;
 
index 910dddf65e44c4c732bdc36a17f8bd21703943ce..c6b40dad0d0b28d427f498b3ca44f9eca29f24e7 100644 (file)
@@ -921,7 +921,7 @@ void initialize_secondary(void)
  * __cpu_up - Set smp_commenced_mask for the nominated CPU
  * @cpu: The target CPU.
  */
-int __devinit __cpu_up(unsigned int cpu)
+int __devinit __cpu_up(unsigned int cpu, struct task_struct *tidle)
 {
        int timeout;
 
index 0bb1d63907f88a4ac915c2398b9a154744d91265..eae8cd808f072852f2615bac76129b190998ef8f 100644 (file)
@@ -449,7 +449,7 @@ void smp_cpus_done(unsigned int cpu_max)
 }
 
 
-int __cpuinit __cpu_up(unsigned int cpu)
+int __cpuinit __cpu_up(unsigned int cpu, struct task_struct *tidle)
 {
        if (cpu != 0 && cpu < parisc_max_cpus)
                smp_boot_one_cpu(cpu);
index d9f94410fd7fa7147794d562892024bbc360c760..d38030fb34713d1d4074a79dd43b80312104e167 100644 (file)
@@ -482,7 +482,7 @@ static int __cpuinit create_idle(unsigned int cpu)
        return 0;
 }
 
-int __cpuinit __cpu_up(unsigned int cpu)
+int __cpuinit __cpu_up(unsigned int cpu, struct task_struct *tidle)
 {
        int rc, c;
 
index c77c6de6f6c0d9dbb4da4b39dcfc5583f3b01b02..0b6f586c1383d616954ba35e6953d3ef688705d7 100644 (file)
@@ -16,7 +16,7 @@
 extern struct mutex smp_cpu_state_mutex;
 extern struct save_area *zfcpdump_save_areas[NR_CPUS + 1];
 
-extern int __cpu_up(unsigned int cpu);
+extern int __cpu_up(unsigned int cpu, struct task_struct *tidle);
 
 extern void arch_send_call_function_single_ipi(int cpu);
 extern void arch_send_call_function_ipi_mask(const struct cpumask *mask);
index 1f77227669e84145385706f39faaf205524e144d..fc827aa8f9ca0520c71a97cd81680dab0199a5bd 100644 (file)
@@ -738,7 +738,7 @@ static void __cpuinit smp_fork_idle(struct work_struct *work)
 }
 
 /* Upping and downing of CPUs */
-int __cpuinit __cpu_up(unsigned int cpu)
+int __cpuinit __cpu_up(unsigned int cpu, struct task_struct *tidle)
 {
        struct create_idle c_idle;
        struct pcpu *pcpu;
index eaebdf6a5c77506f5b80bb2af9f9693d17894838..ebb76e2a748ba4a74198c1231b9ad425da550913 100644 (file)
@@ -220,7 +220,7 @@ extern struct {
        void *thread_info;
 } stack_start;
 
-int __cpuinit __cpu_up(unsigned int cpu)
+int __cpuinit __cpu_up(unsigned int cpu, struct task_struct *tidle)
 {
        struct task_struct *tsk;
        unsigned long timeout;
index f671e7fd6ddc964b3cccf7db8e615c58f8ca10ca..1f397ae1102809101191021d9516b48734b41510 100644 (file)
@@ -411,7 +411,7 @@ void __init smp_prepare_boot_cpu(void)
        set_cpu_possible(cpuid, true);
 }
 
-int __cpuinit __cpu_up(unsigned int cpu)
+int __cpuinit __cpu_up(unsigned int cpu, struct task_struct *tidle)
 {
        extern int __cpuinit smp4m_boot_one_cpu(int);
        extern int __cpuinit smp4d_boot_one_cpu(int);
index 3b1bd7c501640575a8fc5f5c493e3ba63b58ea1a..2f9948c4107c772c3866cb5beab8fcddd829738b 100644 (file)
@@ -1227,7 +1227,7 @@ void __devinit smp_fill_in_sib_core_maps(void)
        }
 }
 
-int __cpuinit __cpu_up(unsigned int cpu)
+int __cpuinit __cpu_up(unsigned int cpu, struct task_struct *tidle)
 {
        int ret = smp_boot_one_cpu(cpu);
 
index 172aef7d3159b254e428ccede2a86dca05115716..84873fbe8f2769b0bfa22faaed187ae0919c523d 100644 (file)
@@ -222,7 +222,7 @@ void __cpuinit online_secondary(void)
        cpu_idle();
 }
 
-int __cpuinit __cpu_up(unsigned int cpu)
+int __cpuinit __cpu_up(unsigned int cpu, struct task_struct *tidle)
 {
        /* Wait 5s total for all CPUs for them to come online */
        static int timeout;
index 6f588e160fb0ec1bf4e035b282d8dd10f300e8f8..a02b7e9e6b94c0052d502876f3a47095f9793b94 100644 (file)
@@ -140,7 +140,7 @@ void smp_prepare_boot_cpu(void)
        set_cpu_online(smp_processor_id(), true);
 }
 
-int __cpu_up(unsigned int cpu)
+int __cpu_up(unsigned int cpu, struct task_struct *tidle)
 {
        cpu_set(cpu, smp_commenced_mask);
        while (!cpu_online(cpu))
index 0434c400287cffa9c8d80075c5a31defa4097629..4eb3a74bc4b0de8c9bd834de8b2f3c3e6c1403cb 100644 (file)
@@ -62,6 +62,8 @@ DECLARE_EARLY_PER_CPU(int, x86_cpu_to_logical_apicid);
 /* Static state in head.S used to set up a CPU */
 extern unsigned long stack_start; /* Initial stack pointer address */
 
+struct task_struct;
+
 struct smp_ops {
        void (*smp_prepare_boot_cpu)(void);
        void (*smp_prepare_cpus)(unsigned max_cpus);
@@ -113,7 +115,7 @@ static inline void smp_cpus_done(unsigned int max_cpus)
        smp_ops.smp_cpus_done(max_cpus);
 }
 
-static inline int __cpu_up(unsigned int cpu)
+static inline int __cpu_up(unsigned int cpu, struct task_struct *tidle)
 {
        return smp_ops.cpu_up(cpu);
 }
index 10530d92c04b05bd56ab269974094ecfd2efbaab..24360de6c968ae0127df8a21a2cc6b46c1e20cee 100644 (file)
@@ -61,7 +61,7 @@ extern void smp_prepare_cpus(unsigned int max_cpus);
 /*
  * Bring a CPU up
  */
-extern int __cpu_up(unsigned int cpunum);
+extern int __cpu_up(unsigned int cpunum, struct task_struct *tidle);
 
 /*
  * Final polishing of CPUs
index 2060c6e570276e0cd8b5972b9387b9153cf8d195..e711aef0fb3c35d0dcbad4803256fec37e91e29a 100644 (file)
@@ -309,7 +309,7 @@ static int __cpuinit _cpu_up(unsigned int cpu, int tasks_frozen)
        }
 
        /* Arch-specific enabling code. */
-       ret = __cpu_up(cpu);
+       ret = __cpu_up(cpu, NULL);
        if (ret != 0)
                goto out_notify;
        BUG_ON(!cpu_online(cpu));