Skip to content

Commit

Permalink
powerpc: Use cpu_thread_in_core in smp_init for of_spin_map
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Milton Miller authored and Benjamin Herrenschmidt committed Oct 21, 2008
1 parent ed7b214 commit 6a75a6b
Show file tree
Hide file tree
Showing 2 changed files with 7 additions and 16 deletions.
10 changes: 3 additions & 7 deletions arch/powerpc/platforms/cell/smp.c
Original file line number Diff line number Diff line change
Expand Up @@ -54,8 +54,8 @@
#endif

/*
* The primary thread of each non-boot processor is recorded here before
* smp init.
* The Primary thread of each non-boot processor was started from the OF client
* interface by prom_hold_cpus and is spinning on secondary_hold_spinloop.
*/
static cpumask_t of_spin_map;

Expand Down Expand Up @@ -208,11 +208,7 @@ void __init smp_init_cell(void)
/* Mark threads which are still spinning in hold loops. */
if (cpu_has_feature(CPU_FTR_SMT)) {
for_each_present_cpu(i) {
if (i % 2 == 0)
/*
* Even-numbered logical cpus correspond to
* primary threads.
*/
if (cpu_thread_in_core(i) == 0)
cpu_set(i, of_spin_map);
}
} else {
Expand Down
13 changes: 4 additions & 9 deletions arch/powerpc/platforms/pseries/smp.c
Original file line number Diff line number Diff line change
Expand Up @@ -52,8 +52,8 @@


/*
* The primary thread of each non-boot processor is recorded here before
* smp init.
* The Primary thread of each non-boot processor was started from the OF client
* interface by prom_hold_cpus and is spinning on secondary_hold_spinloop.
*/
static cpumask_t of_spin_map;

Expand Down Expand Up @@ -161,8 +161,7 @@ static void __devinit smp_pSeries_kick_cpu(int nr)
static int smp_pSeries_cpu_bootable(unsigned int nr)
{
/* Special case - we inhibit secondary thread startup
* during boot if the user requests it. Odd-numbered
* cpus are assumed to be secondary threads.
* during boot if the user requests it.
*/
if (system_state < SYSTEM_RUNNING &&
cpu_has_feature(CPU_FTR_SMT) &&
Expand Down Expand Up @@ -199,11 +198,7 @@ static void __init smp_init_pseries(void)
/* Mark threads which are still spinning in hold loops. */
if (cpu_has_feature(CPU_FTR_SMT)) {
for_each_present_cpu(i) {
if (i % 2 == 0)
/*
* Even-numbered logical cpus correspond to
* primary threads.
*/
if (cpu_thread_in_core(i) == 0)
cpu_set(i, of_spin_map);
}
} else {
Expand Down

0 comments on commit 6a75a6b

Please sign in to comment.