diff options
author | Milton Miller <miltonm@bga.com> | 2008-10-20 11:37:03 -0400 |
---|---|---|
committer | Benjamin Herrenschmidt <benh@kernel.crashing.org> | 2008-10-21 00:19:12 -0400 |
commit | 6a75a6b8e85e92cc774d42a4e113c76c30b5a539 (patch) | |
tree | cd6b0655ba24655fb3bbdf58601099754a9bf232 | |
parent | ed7b2144bcc87b2b097553f15a2f96e18ede21b0 (diff) |
powerpc: Use cpu_thread_in_core in smp_init for of_spin_map
We used to assume that even numbered threads were the primary
threads, ie those that would be listed and started as a cpu from
open firmware. Replace a left over is even (% 2) check with a check
for it being a primary thread and update the comments.
Tested with a debug print on pseries, identical code found for cell.
Signed-off-by: Milton Miller <miltonm@bga.com>
Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
-rw-r--r-- | arch/powerpc/platforms/cell/smp.c | 10 | ||||
-rw-r--r-- | arch/powerpc/platforms/pseries/smp.c | 13 |
2 files changed, 7 insertions, 16 deletions
diff --git a/arch/powerpc/platforms/cell/smp.c b/arch/powerpc/platforms/cell/smp.c index efb3964457b1..c0d86e1f56ea 100644 --- a/arch/powerpc/platforms/cell/smp.c +++ b/arch/powerpc/platforms/cell/smp.c | |||
@@ -54,8 +54,8 @@ | |||
54 | #endif | 54 | #endif |
55 | 55 | ||
56 | /* | 56 | /* |
57 | * The primary thread of each non-boot processor is recorded here before | 57 | * The Primary thread of each non-boot processor was started from the OF client |
58 | * smp init. | 58 | * interface by prom_hold_cpus and is spinning on secondary_hold_spinloop. |
59 | */ | 59 | */ |
60 | static cpumask_t of_spin_map; | 60 | static cpumask_t of_spin_map; |
61 | 61 | ||
@@ -208,11 +208,7 @@ void __init smp_init_cell(void) | |||
208 | /* Mark threads which are still spinning in hold loops. */ | 208 | /* Mark threads which are still spinning in hold loops. */ |
209 | if (cpu_has_feature(CPU_FTR_SMT)) { | 209 | if (cpu_has_feature(CPU_FTR_SMT)) { |
210 | for_each_present_cpu(i) { | 210 | for_each_present_cpu(i) { |
211 | if (i % 2 == 0) | 211 | if (cpu_thread_in_core(i) == 0) |
212 | /* | ||
213 | * Even-numbered logical cpus correspond to | ||
214 | * primary threads. | ||
215 | */ | ||
216 | cpu_set(i, of_spin_map); | 212 | cpu_set(i, of_spin_map); |
217 | } | 213 | } |
218 | } else { | 214 | } else { |
diff --git a/arch/powerpc/platforms/pseries/smp.c b/arch/powerpc/platforms/pseries/smp.c index e00f96baa381..1a231c389ba0 100644 --- a/arch/powerpc/platforms/pseries/smp.c +++ b/arch/powerpc/platforms/pseries/smp.c | |||
@@ -52,8 +52,8 @@ | |||
52 | 52 | ||
53 | 53 | ||
54 | /* | 54 | /* |
55 | * The primary thread of each non-boot processor is recorded here before | 55 | * The Primary thread of each non-boot processor was started from the OF client |
56 | * smp init. | 56 | * interface by prom_hold_cpus and is spinning on secondary_hold_spinloop. |
57 | */ | 57 | */ |
58 | static cpumask_t of_spin_map; | 58 | static cpumask_t of_spin_map; |
59 | 59 | ||
@@ -161,8 +161,7 @@ static void __devinit smp_pSeries_kick_cpu(int nr) | |||
161 | static int smp_pSeries_cpu_bootable(unsigned int nr) | 161 | static int smp_pSeries_cpu_bootable(unsigned int nr) |
162 | { | 162 | { |
163 | /* Special case - we inhibit secondary thread startup | 163 | /* Special case - we inhibit secondary thread startup |
164 | * during boot if the user requests it. Odd-numbered | 164 | * during boot if the user requests it. |
165 | * cpus are assumed to be secondary threads. | ||
166 | */ | 165 | */ |
167 | if (system_state < SYSTEM_RUNNING && | 166 | if (system_state < SYSTEM_RUNNING && |
168 | cpu_has_feature(CPU_FTR_SMT) && | 167 | cpu_has_feature(CPU_FTR_SMT) && |
@@ -199,11 +198,7 @@ static void __init smp_init_pseries(void) | |||
199 | /* Mark threads which are still spinning in hold loops. */ | 198 | /* Mark threads which are still spinning in hold loops. */ |
200 | if (cpu_has_feature(CPU_FTR_SMT)) { | 199 | if (cpu_has_feature(CPU_FTR_SMT)) { |
201 | for_each_present_cpu(i) { | 200 | for_each_present_cpu(i) { |
202 | if (i % 2 == 0) | 201 | if (cpu_thread_in_core(i) == 0) |
203 | /* | ||
204 | * Even-numbered logical cpus correspond to | ||
205 | * primary threads. | ||
206 | */ | ||
207 | cpu_set(i, of_spin_map); | 202 | cpu_set(i, of_spin_map); |
208 | } | 203 | } |
209 | } else { | 204 | } else { |