Commit 4d45cbac authored by David S. Miller's avatar David S. Miller

[SPARC64]: Restore 2.4.x /proc/cpuinfo behavior for "ncpus probed" field.

Noticed by Tom 'spot' Callaway.

Even on uniprocessor we always reported the number of physical
cpus in the system via /proc/cpuinfo.  But when this got changed
to use num_possible_cpus() it always reads as "1" on uniprocessor.
This change was unintentional.

So scan the firmware device tree and count the number of cpu
nodes, and report that, as we always did.
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 388f7ef7
...@@ -587,6 +587,8 @@ extern void mmu_info(struct seq_file *); ...@@ -587,6 +587,8 @@ extern void mmu_info(struct seq_file *);
unsigned int dcache_parity_tl1_occurred; unsigned int dcache_parity_tl1_occurred;
unsigned int icache_parity_tl1_occurred; unsigned int icache_parity_tl1_occurred;
static int ncpus_probed;
static int show_cpuinfo(struct seq_file *m, void *__unused) static int show_cpuinfo(struct seq_file *m, void *__unused)
{ {
seq_printf(m, seq_printf(m,
...@@ -595,8 +597,8 @@ static int show_cpuinfo(struct seq_file *m, void *__unused) ...@@ -595,8 +597,8 @@ static int show_cpuinfo(struct seq_file *m, void *__unused)
"promlib\t\t: Version 3 Revision %d\n" "promlib\t\t: Version 3 Revision %d\n"
"prom\t\t: %d.%d.%d\n" "prom\t\t: %d.%d.%d\n"
"type\t\t: sun4u\n" "type\t\t: sun4u\n"
"ncpus probed\t: %ld\n" "ncpus probed\t: %d\n"
"ncpus active\t: %ld\n" "ncpus active\t: %d\n"
"D$ parity tl1\t: %u\n" "D$ parity tl1\t: %u\n"
"I$ parity tl1\t: %u\n" "I$ parity tl1\t: %u\n"
#ifndef CONFIG_SMP #ifndef CONFIG_SMP
...@@ -610,8 +612,8 @@ static int show_cpuinfo(struct seq_file *m, void *__unused) ...@@ -610,8 +612,8 @@ static int show_cpuinfo(struct seq_file *m, void *__unused)
prom_prev >> 16, prom_prev >> 16,
(prom_prev >> 8) & 0xff, (prom_prev >> 8) & 0xff,
prom_prev & 0xff, prom_prev & 0xff,
(long)num_possible_cpus(), ncpus_probed,
(long)num_online_cpus(), num_online_cpus(),
dcache_parity_tl1_occurred, dcache_parity_tl1_occurred,
icache_parity_tl1_occurred icache_parity_tl1_occurred
#ifndef CONFIG_SMP #ifndef CONFIG_SMP
...@@ -677,6 +679,15 @@ static int __init topology_init(void) ...@@ -677,6 +679,15 @@ static int __init topology_init(void)
int i, err; int i, err;
err = -ENOMEM; err = -ENOMEM;
/* Count the number of physically present processors in
* the machine, even on uniprocessor, so that /proc/cpuinfo
* output is consistent with 2.4.x
*/
ncpus_probed = 0;
while (!cpu_find_by_instance(ncpus_probed, NULL, NULL))
ncpus_probed++;
for (i = 0; i < NR_CPUS; i++) { for (i = 0; i < NR_CPUS; i++) {
if (cpu_possible(i)) { if (cpu_possible(i)) {
struct cpu *p = kmalloc(sizeof(*p), GFP_KERNEL); struct cpu *p = kmalloc(sizeof(*p), GFP_KERNEL);
......
...@@ -39,7 +39,6 @@ ...@@ -39,7 +39,6 @@
#include <asm/starfire.h> #include <asm/starfire.h>
#include <asm/tlb.h> #include <asm/tlb.h>
extern int linux_num_cpus;
extern void calibrate_delay(void); extern void calibrate_delay(void);
/* Please don't make this stuff initdata!!! --DaveM */ /* Please don't make this stuff initdata!!! --DaveM */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment