aboutsummaryrefslogtreecommitdiffstats
path: root/arch/sh
diff options
context:
space:
mode:
authorPaul Mundt <lethal@linux-sh.org>2010-04-26 05:59:47 -0400
committerPaul Mundt <lethal@linux-sh.org>2010-04-26 05:59:47 -0400
commit8db2bc4559639680a94d4492ae4b7ce71298a74f (patch)
tree568526fbfb22eea6e4a94748425fe1ccfd5f0a29 /arch/sh
parent1cfa1e8f2c824b131612c9a70b48433998237331 (diff)
sh: cache secondary CPUs idle loop.
This provides a cache of the secondary CPUs idle loop for the cases where hotplug simply enters a low power state instead of resetting or powering off the core. Signed-off-by: Paul Mundt <lethal@linux-sh.org>
Diffstat (limited to 'arch/sh')
-rw-r--r--arch/sh/include/asm/processor.h4
-rw-r--r--arch/sh/kernel/smp.c13
2 files changed, 13 insertions, 4 deletions
diff --git a/arch/sh/include/asm/processor.h b/arch/sh/include/asm/processor.h
index 26b3f026eec9..0a58cb25a658 100644
--- a/arch/sh/include/asm/processor.h
+++ b/arch/sh/include/asm/processor.h
@@ -85,6 +85,10 @@ struct sh_cpuinfo {
85 struct tlb_info itlb; 85 struct tlb_info itlb;
86 struct tlb_info dtlb; 86 struct tlb_info dtlb;
87 87
88#ifdef CONFIG_SMP
89 struct task_struct *idle;
90#endif
91
88 unsigned long flags; 92 unsigned long flags;
89} __attribute__ ((aligned(L1_CACHE_BYTES))); 93} __attribute__ ((aligned(L1_CACHE_BYTES)));
90 94
diff --git a/arch/sh/kernel/smp.c b/arch/sh/kernel/smp.c
index 3711a76a18e0..21e7f8a9f3e4 100644
--- a/arch/sh/kernel/smp.c
+++ b/arch/sh/kernel/smp.c
@@ -125,10 +125,15 @@ int __cpuinit __cpu_up(unsigned int cpu)
125 struct task_struct *tsk; 125 struct task_struct *tsk;
126 unsigned long timeout; 126 unsigned long timeout;
127 127
128 tsk = fork_idle(cpu); 128 tsk = cpu_data[cpu].idle;
129 if (IS_ERR(tsk)) { 129 if (!tsk) {
130 printk(KERN_ERR "Failed forking idle task for cpu %d\n", cpu); 130 tsk = fork_idle(cpu);
131 return PTR_ERR(tsk); 131 if (IS_ERR(tsk)) {
132 pr_err("Failed forking idle task for cpu %d\n", cpu);
133 return PTR_ERR(tsk);
134 }
135
136 cpu_data[cpu].idle = tsk;
132 } 137 }
133 138
134 per_cpu(cpu_state, cpu) = CPU_UP_PREPARE; 139 per_cpu(cpu_state, cpu) = CPU_UP_PREPARE;