diff options
author | Nathan Lynch <ntl@pobox.com> | 2008-07-27 01:24:50 -0400 |
---|---|---|
committer | Benjamin Herrenschmidt <benh@kernel.crashing.org> | 2008-07-28 02:30:48 -0400 |
commit | 7d2f6075f992d33c7be829c3638b8cb72b782b19 (patch) | |
tree | a2f2c3e900c15e898b87c21975e4770092b4de1e /arch/powerpc/kernel/prom_init.c | |
parent | ff8dc7698c904f2a911e89b3d54e7c4a74f5575d (diff) |
powerpc: kill useless SMT code in prom_hold_cpus
This piece of code is broken for >2 threads, and possibly in some
other subtle ways (such as comparing a value obtained from an
"ibm,ppc-interrupt-server#s" property to a value obtained from a
"reg" property) and doesn't seem to have any useful purpose in the
first place other than a dubious warning in case NR_CPUS is too
small, which probably isn't the right place to do so.
Signed-off-by: Nathan Lynch <ntl@pobox.com>
Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Diffstat (limited to 'arch/powerpc/kernel/prom_init.c')
-rw-r--r-- | arch/powerpc/kernel/prom_init.c | 39 |
1 files changed, 3 insertions, 36 deletions
diff --git a/arch/powerpc/kernel/prom_init.c b/arch/powerpc/kernel/prom_init.c index c4ab2195b9cb..b72849ac7db3 100644 --- a/arch/powerpc/kernel/prom_init.c +++ b/arch/powerpc/kernel/prom_init.c | |||
@@ -205,8 +205,6 @@ static int __initdata mem_reserve_cnt; | |||
205 | static cell_t __initdata regbuf[1024]; | 205 | static cell_t __initdata regbuf[1024]; |
206 | 206 | ||
207 | 207 | ||
208 | #define MAX_CPU_THREADS 2 | ||
209 | |||
210 | /* | 208 | /* |
211 | * Error results ... some OF calls will return "-1" on error, some | 209 | * Error results ... some OF calls will return "-1" on error, some |
212 | * will return 0, some will return either. To simplify, here are | 210 | * will return 0, some will return either. To simplify, here are |
@@ -1339,10 +1337,6 @@ static void __init prom_hold_cpus(void) | |||
1339 | unsigned int reg; | 1337 | unsigned int reg; |
1340 | phandle node; | 1338 | phandle node; |
1341 | char type[64]; | 1339 | char type[64]; |
1342 | int cpuid = 0; | ||
1343 | unsigned int interrupt_server[MAX_CPU_THREADS]; | ||
1344 | unsigned int cpu_threads, hw_cpu_num; | ||
1345 | int propsize; | ||
1346 | struct prom_t *_prom = &RELOC(prom); | 1340 | struct prom_t *_prom = &RELOC(prom); |
1347 | unsigned long *spinloop | 1341 | unsigned long *spinloop |
1348 | = (void *) LOW_ADDR(__secondary_hold_spinloop); | 1342 | = (void *) LOW_ADDR(__secondary_hold_spinloop); |
@@ -1386,7 +1380,6 @@ static void __init prom_hold_cpus(void) | |||
1386 | reg = -1; | 1380 | reg = -1; |
1387 | prom_getprop(node, "reg", ®, sizeof(reg)); | 1381 | prom_getprop(node, "reg", ®, sizeof(reg)); |
1388 | 1382 | ||
1389 | prom_debug("\ncpuid = 0x%x\n", cpuid); | ||
1390 | prom_debug("cpu hw idx = 0x%x\n", reg); | 1383 | prom_debug("cpu hw idx = 0x%x\n", reg); |
1391 | 1384 | ||
1392 | /* Init the acknowledge var which will be reset by | 1385 | /* Init the acknowledge var which will be reset by |
@@ -1395,28 +1388,9 @@ static void __init prom_hold_cpus(void) | |||
1395 | */ | 1388 | */ |
1396 | *acknowledge = (unsigned long)-1; | 1389 | *acknowledge = (unsigned long)-1; |
1397 | 1390 | ||
1398 | propsize = prom_getprop(node, "ibm,ppc-interrupt-server#s", | 1391 | if (reg != _prom->cpu) { |
1399 | &interrupt_server, | ||
1400 | sizeof(interrupt_server)); | ||
1401 | if (propsize < 0) { | ||
1402 | /* no property. old hardware has no SMT */ | ||
1403 | cpu_threads = 1; | ||
1404 | interrupt_server[0] = reg; /* fake it with phys id */ | ||
1405 | } else { | ||
1406 | /* We have a threaded processor */ | ||
1407 | cpu_threads = propsize / sizeof(u32); | ||
1408 | if (cpu_threads > MAX_CPU_THREADS) { | ||
1409 | prom_printf("SMT: too many threads!\n" | ||
1410 | "SMT: found %x, max is %x\n", | ||
1411 | cpu_threads, MAX_CPU_THREADS); | ||
1412 | cpu_threads = 1; /* ToDo: panic? */ | ||
1413 | } | ||
1414 | } | ||
1415 | |||
1416 | hw_cpu_num = interrupt_server[0]; | ||
1417 | if (hw_cpu_num != _prom->cpu) { | ||
1418 | /* Primary Thread of non-boot cpu */ | 1392 | /* Primary Thread of non-boot cpu */ |
1419 | prom_printf("%x : starting cpu hw idx %x... ", cpuid, reg); | 1393 | prom_printf("starting cpu hw idx %x... ", reg); |
1420 | call_prom("start-cpu", 3, 0, node, | 1394 | call_prom("start-cpu", 3, 0, node, |
1421 | secondary_hold, reg); | 1395 | secondary_hold, reg); |
1422 | 1396 | ||
@@ -1431,17 +1405,10 @@ static void __init prom_hold_cpus(void) | |||
1431 | } | 1405 | } |
1432 | #ifdef CONFIG_SMP | 1406 | #ifdef CONFIG_SMP |
1433 | else | 1407 | else |
1434 | prom_printf("%x : boot cpu %x\n", cpuid, reg); | 1408 | prom_printf("boot cpu hw idx %x\n", reg); |
1435 | #endif /* CONFIG_SMP */ | 1409 | #endif /* CONFIG_SMP */ |
1436 | |||
1437 | /* Reserve cpu #s for secondary threads. They start later. */ | ||
1438 | cpuid += cpu_threads; | ||
1439 | } | 1410 | } |
1440 | 1411 | ||
1441 | if (cpuid > NR_CPUS) | ||
1442 | prom_printf("WARNING: maximum CPUs (" __stringify(NR_CPUS) | ||
1443 | ") exceeded: ignoring extras\n"); | ||
1444 | |||
1445 | prom_debug("prom_hold_cpus: end...\n"); | 1412 | prom_debug("prom_hold_cpus: end...\n"); |
1446 | } | 1413 | } |
1447 | 1414 | ||