|
@@ -31,6 +31,7 @@
|
|
|
#include <linux/console.h>
|
|
|
#include <linux/spinlock.h>
|
|
|
#include <linux/root_dev.h>
|
|
|
+#include <linux/cpu.h>
|
|
|
|
|
|
#include <asm/system.h>
|
|
|
#include <asm/io.h>
|
|
@@ -389,6 +390,8 @@ console_initcall(set_preferred_console);
|
|
|
extern char *sparc_cpu_type;
|
|
|
extern char *sparc_fpu_type;
|
|
|
|
|
|
+static int ncpus_probed;
|
|
|
+
|
|
|
static int show_cpuinfo(struct seq_file *m, void *__unused)
|
|
|
{
|
|
|
seq_printf(m,
|
|
@@ -411,7 +414,7 @@ static int show_cpuinfo(struct seq_file *m, void *__unused)
|
|
|
romvec->pv_printrev >> 16,
|
|
|
romvec->pv_printrev & 0xffff,
|
|
|
&cputypval,
|
|
|
- num_possible_cpus(),
|
|
|
+ ncpus_probed,
|
|
|
num_online_cpus()
|
|
|
#ifndef CONFIG_SMP
|
|
|
, cpu_data(0).udelay_val/(500000/HZ),
|
|
@@ -471,3 +474,30 @@ void sun_do_break(void)
|
|
|
|
|
|
int serial_console = -1;
|
|
|
int stop_a_enabled = 1;
|
|
|
+
|
|
|
+static int __init topology_init(void)
|
|
|
+{
|
|
|
+ int i, ncpus, err;
|
|
|
+
|
|
|
+ /* 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 = 0;
|
|
|
+ while (!cpu_find_by_instance(ncpus, NULL, NULL))
|
|
|
+ ncpus++;
|
|
|
+ ncpus_probed = ncpus;
|
|
|
+
|
|
|
+ err = 0;
|
|
|
+ for_each_online_cpu(i) {
|
|
|
+ struct cpu *p = kzalloc(sizeof(*p), GFP_KERNEL);
|
|
|
+ if (!p)
|
|
|
+ err = -ENOMEM;
|
|
|
+ else
|
|
|
+ register_cpu(p, i, NULL);
|
|
|
+ }
|
|
|
+
|
|
|
+ return err;
|
|
|
+}
|
|
|
+
|
|
|
+subsys_initcall(topology_init);
|