|
@@ -671,6 +671,26 @@ static void __cpuinit do_fork_idle(struct work_struct *work)
|
|
|
complete(&c_idle->done);
|
|
|
}
|
|
|
|
|
|
+/* reduce the number of lines printed when booting a large cpu count system */
|
|
|
+static void __cpuinit announce_cpu(int cpu, int apicid)
|
|
|
+{
|
|
|
+ static int current_node = -1;
|
|
|
+ int node = cpu_to_node(cpu);
|
|
|
+
|
|
|
+ if (system_state == SYSTEM_BOOTING) {
|
|
|
+ if (node != current_node) {
|
|
|
+ if (current_node > (-1))
|
|
|
+ pr_cont(" Ok.\n");
|
|
|
+ current_node = node;
|
|
|
+ pr_info("Booting Node %3d, Processors ", node);
|
|
|
+ }
|
|
|
+ pr_cont(" #%d%s", cpu, cpu == (nr_cpu_ids - 1) ? " Ok.\n" : "");
|
|
|
+ return;
|
|
|
+ } else
|
|
|
+ pr_info("Booting Node %d Processor %d APIC 0x%x\n",
|
|
|
+ node, cpu, apicid);
|
|
|
+}
|
|
|
+
|
|
|
/*
|
|
|
* NOTE - on most systems this is a PHYSICAL apic ID, but on multiquad
|
|
|
* (ie clustered apic addressing mode), this is a LOGICAL apic ID.
|
|
@@ -737,9 +757,8 @@ do_rest:
|
|
|
/* start_ip had better be page-aligned! */
|
|
|
start_ip = setup_trampoline();
|
|
|
|
|
|
- /* So we see what's up */
|
|
|
- printk(KERN_INFO "Booting processor %d APIC 0x%x ip 0x%lx\n",
|
|
|
- cpu, apicid, start_ip);
|
|
|
+ /* So we see what's up */
|
|
|
+ announce_cpu(cpu, apicid);
|
|
|
|
|
|
/*
|
|
|
* This grunge runs the startup process for
|
|
@@ -788,21 +807,17 @@ do_rest:
|
|
|
udelay(100);
|
|
|
}
|
|
|
|
|
|
- if (cpumask_test_cpu(cpu, cpu_callin_mask)) {
|
|
|
- /* number CPUs logically, starting from 1 (BSP is 0) */
|
|
|
- pr_debug("OK.\n");
|
|
|
- printk(KERN_INFO "CPU%d: ", cpu);
|
|
|
- print_cpu_info(&cpu_data(cpu));
|
|
|
- pr_debug("CPU has booted.\n");
|
|
|
- } else {
|
|
|
+ if (cpumask_test_cpu(cpu, cpu_callin_mask))
|
|
|
+ pr_debug("CPU%d: has booted.\n", cpu);
|
|
|
+ else {
|
|
|
boot_error = 1;
|
|
|
if (*((volatile unsigned char *)trampoline_base)
|
|
|
== 0xA5)
|
|
|
/* trampoline started but...? */
|
|
|
- printk(KERN_ERR "Stuck ??\n");
|
|
|
+ pr_err("CPU%d: Stuck ??\n", cpu);
|
|
|
else
|
|
|
/* trampoline code not run */
|
|
|
- printk(KERN_ERR "Not responding.\n");
|
|
|
+ pr_err("CPU%d: Not responding.\n", cpu);
|
|
|
if (apic->inquire_remote_apic)
|
|
|
apic->inquire_remote_apic(apicid);
|
|
|
}
|
|
@@ -1293,14 +1308,16 @@ void native_cpu_die(unsigned int cpu)
|
|
|
for (i = 0; i < 10; i++) {
|
|
|
/* They ack this in play_dead by setting CPU_DEAD */
|
|
|
if (per_cpu(cpu_state, cpu) == CPU_DEAD) {
|
|
|
- printk(KERN_INFO "CPU %d is now offline\n", cpu);
|
|
|
+ if (system_state == SYSTEM_RUNNING)
|
|
|
+ pr_info("CPU %u is now offline\n", cpu);
|
|
|
+
|
|
|
if (1 == num_online_cpus())
|
|
|
alternatives_smp_switch(0);
|
|
|
return;
|
|
|
}
|
|
|
msleep(100);
|
|
|
}
|
|
|
- printk(KERN_ERR "CPU %u didn't die...\n", cpu);
|
|
|
+ pr_err("CPU %u didn't die...\n", cpu);
|
|
|
}
|
|
|
|
|
|
void play_dead_common(void)
|