diff options
Diffstat (limited to 'arch/x86/kernel/smpboot.c')
-rw-r--r-- | arch/x86/kernel/smpboot.c | 45 |
1 files changed, 31 insertions, 14 deletions
diff --git a/arch/x86/kernel/smpboot.c b/arch/x86/kernel/smpboot.c index 29e6744f51e3..678d0b8c26f3 100644 --- a/arch/x86/kernel/smpboot.c +++ b/arch/x86/kernel/smpboot.c | |||
@@ -671,6 +671,26 @@ static void __cpuinit do_fork_idle(struct work_struct *work) | |||
671 | complete(&c_idle->done); | 671 | complete(&c_idle->done); |
672 | } | 672 | } |
673 | 673 | ||
674 | /* reduce the number of lines printed when booting a large cpu count system */ | ||
675 | static void __cpuinit announce_cpu(int cpu, int apicid) | ||
676 | { | ||
677 | static int current_node = -1; | ||
678 | int node = cpu_to_node(cpu); | ||
679 | |||
680 | if (system_state == SYSTEM_BOOTING) { | ||
681 | if (node != current_node) { | ||
682 | if (current_node > (-1)) | ||
683 | pr_cont(" Ok.\n"); | ||
684 | current_node = node; | ||
685 | pr_info("Booting Node %3d, Processors ", node); | ||
686 | } | ||
687 | pr_cont(" #%d%s", cpu, cpu == (nr_cpu_ids - 1) ? " Ok.\n" : ""); | ||
688 | return; | ||
689 | } else | ||
690 | pr_info("Booting Node %d Processor %d APIC 0x%x\n", | ||
691 | node, cpu, apicid); | ||
692 | } | ||
693 | |||
674 | /* | 694 | /* |
675 | * NOTE - on most systems this is a PHYSICAL apic ID, but on multiquad | 695 | * NOTE - on most systems this is a PHYSICAL apic ID, but on multiquad |
676 | * (ie clustered apic addressing mode), this is a LOGICAL apic ID. | 696 | * (ie clustered apic addressing mode), this is a LOGICAL apic ID. |
@@ -737,9 +757,8 @@ do_rest: | |||
737 | /* start_ip had better be page-aligned! */ | 757 | /* start_ip had better be page-aligned! */ |
738 | start_ip = setup_trampoline(); | 758 | start_ip = setup_trampoline(); |
739 | 759 | ||
740 | /* So we see what's up */ | 760 | /* So we see what's up */ |
741 | printk(KERN_INFO "Booting processor %d APIC 0x%x ip 0x%lx\n", | 761 | announce_cpu(cpu, apicid); |
742 | cpu, apicid, start_ip); | ||
743 | 762 | ||
744 | /* | 763 | /* |
745 | * This grunge runs the startup process for | 764 | * This grunge runs the startup process for |
@@ -788,21 +807,17 @@ do_rest: | |||
788 | udelay(100); | 807 | udelay(100); |
789 | } | 808 | } |
790 | 809 | ||
791 | if (cpumask_test_cpu(cpu, cpu_callin_mask)) { | 810 | if (cpumask_test_cpu(cpu, cpu_callin_mask)) |
792 | /* number CPUs logically, starting from 1 (BSP is 0) */ | 811 | pr_debug("CPU%d: has booted.\n", cpu); |
793 | pr_debug("OK.\n"); | 812 | else { |
794 | printk(KERN_INFO "CPU%d: ", cpu); | ||
795 | print_cpu_info(&cpu_data(cpu)); | ||
796 | pr_debug("CPU has booted.\n"); | ||
797 | } else { | ||
798 | boot_error = 1; | 813 | boot_error = 1; |
799 | if (*((volatile unsigned char *)trampoline_base) | 814 | if (*((volatile unsigned char *)trampoline_base) |
800 | == 0xA5) | 815 | == 0xA5) |
801 | /* trampoline started but...? */ | 816 | /* trampoline started but...? */ |
802 | printk(KERN_ERR "Stuck ??\n"); | 817 | pr_err("CPU%d: Stuck ??\n", cpu); |
803 | else | 818 | else |
804 | /* trampoline code not run */ | 819 | /* trampoline code not run */ |
805 | printk(KERN_ERR "Not responding.\n"); | 820 | pr_err("CPU%d: Not responding.\n", cpu); |
806 | if (apic->inquire_remote_apic) | 821 | if (apic->inquire_remote_apic) |
807 | apic->inquire_remote_apic(apicid); | 822 | apic->inquire_remote_apic(apicid); |
808 | } | 823 | } |
@@ -1293,14 +1308,16 @@ void native_cpu_die(unsigned int cpu) | |||
1293 | for (i = 0; i < 10; i++) { | 1308 | for (i = 0; i < 10; i++) { |
1294 | /* They ack this in play_dead by setting CPU_DEAD */ | 1309 | /* They ack this in play_dead by setting CPU_DEAD */ |
1295 | if (per_cpu(cpu_state, cpu) == CPU_DEAD) { | 1310 | if (per_cpu(cpu_state, cpu) == CPU_DEAD) { |
1296 | printk(KERN_INFO "CPU %d is now offline\n", cpu); | 1311 | if (system_state == SYSTEM_RUNNING) |
1312 | pr_info("CPU %u is now offline\n", cpu); | ||
1313 | |||
1297 | if (1 == num_online_cpus()) | 1314 | if (1 == num_online_cpus()) |
1298 | alternatives_smp_switch(0); | 1315 | alternatives_smp_switch(0); |
1299 | return; | 1316 | return; |
1300 | } | 1317 | } |
1301 | msleep(100); | 1318 | msleep(100); |
1302 | } | 1319 | } |
1303 | printk(KERN_ERR "CPU %u didn't die...\n", cpu); | 1320 | pr_err("CPU %u didn't die...\n", cpu); |
1304 | } | 1321 | } |
1305 | 1322 | ||
1306 | void play_dead_common(void) | 1323 | void play_dead_common(void) |