]> git.karo-electronics.de Git - karo-tx-linux.git/blob - arch/x86/kernel/smpboot.c
Merge branch 'for-arm' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/signal...
[karo-tx-linux.git] / arch / x86 / kernel / smpboot.c
1 /*
2  *      x86 SMP booting functions
3  *
4  *      (c) 1995 Alan Cox, Building #3 <alan@lxorguk.ukuu.org.uk>
5  *      (c) 1998, 1999, 2000, 2009 Ingo Molnar <mingo@redhat.com>
6  *      Copyright 2001 Andi Kleen, SuSE Labs.
7  *
8  *      Much of the core SMP work is based on previous work by Thomas Radke, to
9  *      whom a great many thanks are extended.
10  *
11  *      Thanks to Intel for making available several different Pentium,
12  *      Pentium Pro and Pentium-II/Xeon MP machines.
13  *      Original development of Linux SMP code supported by Caldera.
14  *
15  *      This code is released under the GNU General Public License version 2 or
16  *      later.
17  *
18  *      Fixes
19  *              Felix Koop      :       NR_CPUS used properly
20  *              Jose Renau      :       Handle single CPU case.
21  *              Alan Cox        :       By repeated request 8) - Total BogoMIPS report.
22  *              Greg Wright     :       Fix for kernel stacks panic.
23  *              Erich Boleyn    :       MP v1.4 and additional changes.
24  *      Matthias Sattler        :       Changes for 2.1 kernel map.
25  *      Michel Lespinasse       :       Changes for 2.1 kernel map.
26  *      Michael Chastain        :       Change trampoline.S to gnu as.
27  *              Alan Cox        :       Dumb bug: 'B' step PPro's are fine
28  *              Ingo Molnar     :       Added APIC timers, based on code
29  *                                      from Jose Renau
30  *              Ingo Molnar     :       various cleanups and rewrites
31  *              Tigran Aivazian :       fixed "0.00 in /proc/uptime on SMP" bug.
32  *      Maciej W. Rozycki       :       Bits for genuine 82489DX APICs
33  *      Andi Kleen              :       Changed for SMP boot into long mode.
34  *              Martin J. Bligh :       Added support for multi-quad systems
35  *              Dave Jones      :       Report invalid combinations of Athlon CPUs.
36  *              Rusty Russell   :       Hacked into shape for new "hotplug" boot process.
37  *      Andi Kleen              :       Converted to new state machine.
38  *      Ashok Raj               :       CPU hotplug support
39  *      Glauber Costa           :       i386 and x86_64 integration
40  */
41
42 #include <linux/init.h>
43 #include <linux/smp.h>
44 #include <linux/module.h>
45 #include <linux/sched.h>
46 #include <linux/percpu.h>
47 #include <linux/bootmem.h>
48 #include <linux/err.h>
49 #include <linux/nmi.h>
50 #include <linux/tboot.h>
51 #include <linux/stackprotector.h>
52 #include <linux/gfp.h>
53 #include <linux/cpuidle.h>
54
55 #include <asm/acpi.h>
56 #include <asm/desc.h>
57 #include <asm/nmi.h>
58 #include <asm/irq.h>
59 #include <asm/idle.h>
60 #include <asm/trampoline.h>
61 #include <asm/cpu.h>
62 #include <asm/numa.h>
63 #include <asm/pgtable.h>
64 #include <asm/tlbflush.h>
65 #include <asm/mtrr.h>
66 #include <asm/mwait.h>
67 #include <asm/apic.h>
68 #include <asm/io_apic.h>
69 #include <asm/setup.h>
70 #include <asm/uv/uv.h>
71 #include <linux/mc146818rtc.h>
72
73 #include <asm/smpboot_hooks.h>
74 #include <asm/i8259.h>
75
76 /* State of each CPU */
77 DEFINE_PER_CPU(int, cpu_state) = { 0 };
78
79 #ifdef CONFIG_HOTPLUG_CPU
80 /*
81  * We need this for trampoline_base protection from concurrent accesses when
82  * off- and onlining cores wildly.
83  */
84 static DEFINE_MUTEX(x86_cpu_hotplug_driver_mutex);
85
86 void cpu_hotplug_driver_lock(void)
87 {
88         mutex_lock(&x86_cpu_hotplug_driver_mutex);
89 }
90
91 void cpu_hotplug_driver_unlock(void)
92 {
93         mutex_unlock(&x86_cpu_hotplug_driver_mutex);
94 }
95
96 ssize_t arch_cpu_probe(const char *buf, size_t count) { return -1; }
97 ssize_t arch_cpu_release(const char *buf, size_t count) { return -1; }
98 #endif
99
100 /* Number of siblings per CPU package */
101 int smp_num_siblings = 1;
102 EXPORT_SYMBOL(smp_num_siblings);
103
104 /* Last level cache ID of each logical CPU */
105 DEFINE_PER_CPU(u16, cpu_llc_id) = BAD_APICID;
106
107 /* representing HT siblings of each logical CPU */
108 DEFINE_PER_CPU(cpumask_var_t, cpu_sibling_map);
109 EXPORT_PER_CPU_SYMBOL(cpu_sibling_map);
110
111 /* representing HT and core siblings of each logical CPU */
112 DEFINE_PER_CPU(cpumask_var_t, cpu_core_map);
113 EXPORT_PER_CPU_SYMBOL(cpu_core_map);
114
115 DEFINE_PER_CPU(cpumask_var_t, cpu_llc_shared_map);
116
117 /* Per CPU bogomips and other parameters */
118 DEFINE_PER_CPU_SHARED_ALIGNED(struct cpuinfo_x86, cpu_info);
119 EXPORT_PER_CPU_SYMBOL(cpu_info);
120
121 atomic_t init_deasserted;
122
123 /*
124  * Report back to the Boot Processor.
125  * Running on AP.
126  */
127 static void __cpuinit smp_callin(void)
128 {
129         int cpuid, phys_id;
130         unsigned long timeout;
131
132         /*
133          * If waken up by an INIT in an 82489DX configuration
134          * we may get here before an INIT-deassert IPI reaches
135          * our local APIC.  We have to wait for the IPI or we'll
136          * lock up on an APIC access.
137          */
138         if (apic->wait_for_init_deassert)
139                 apic->wait_for_init_deassert(&init_deasserted);
140
141         /*
142          * (This works even if the APIC is not enabled.)
143          */
144         phys_id = read_apic_id();
145         cpuid = smp_processor_id();
146         if (cpumask_test_cpu(cpuid, cpu_callin_mask)) {
147                 panic("%s: phys CPU#%d, CPU#%d already present??\n", __func__,
148                                         phys_id, cpuid);
149         }
150         pr_debug("CPU#%d (phys ID: %d) waiting for CALLOUT\n", cpuid, phys_id);
151
152         /*
153          * STARTUP IPIs are fragile beasts as they might sometimes
154          * trigger some glue motherboard logic. Complete APIC bus
155          * silence for 1 second, this overestimates the time the
156          * boot CPU is spending to send the up to 2 STARTUP IPIs
157          * by a factor of two. This should be enough.
158          */
159
160         /*
161          * Waiting 2s total for startup (udelay is not yet working)
162          */
163         timeout = jiffies + 2*HZ;
164         while (time_before(jiffies, timeout)) {
165                 /*
166                  * Has the boot CPU finished it's STARTUP sequence?
167                  */
168                 if (cpumask_test_cpu(cpuid, cpu_callout_mask))
169                         break;
170                 cpu_relax();
171         }
172
173         if (!time_before(jiffies, timeout)) {
174                 panic("%s: CPU%d started up but did not get a callout!\n",
175                       __func__, cpuid);
176         }
177
178         /*
179          * the boot CPU has finished the init stage and is spinning
180          * on callin_map until we finish. We are free to set up this
181          * CPU, first the APIC. (this is probably redundant on most
182          * boards)
183          */
184
185         pr_debug("CALLIN, before setup_local_APIC().\n");
186         if (apic->smp_callin_clear_local_apic)
187                 apic->smp_callin_clear_local_apic();
188         setup_local_APIC();
189         end_local_APIC_setup();
190
191         /*
192          * Need to setup vector mappings before we enable interrupts.
193          */
194         setup_vector_irq(smp_processor_id());
195
196         /*
197          * Save our processor parameters. Note: this information
198          * is needed for clock calibration.
199          */
200         smp_store_cpu_info(cpuid);
201
202         /*
203          * Get our bogomips.
204          * Update loops_per_jiffy in cpu_data. Previous call to
205          * smp_store_cpu_info() stored a value that is close but not as
206          * accurate as the value just calculated.
207          */
208         calibrate_delay();
209         cpu_data(cpuid).loops_per_jiffy = loops_per_jiffy;
210         pr_debug("Stack at about %p\n", &cpuid);
211
212         /*
213          * This must be done before setting cpu_online_mask
214          * or calling notify_cpu_starting.
215          */
216         set_cpu_sibling_map(raw_smp_processor_id());
217         wmb();
218
219         notify_cpu_starting(cpuid);
220
221         /*
222          * Allow the master to continue.
223          */
224         cpumask_set_cpu(cpuid, cpu_callin_mask);
225 }
226
227 /*
228  * Activate a secondary processor.
229  */
230 notrace static void __cpuinit start_secondary(void *unused)
231 {
232         /*
233          * Don't put *anything* before cpu_init(), SMP booting is too
234          * fragile that we want to limit the things done here to the
235          * most necessary things.
236          */
237         cpu_init();
238         x86_cpuinit.early_percpu_clock_init();
239         preempt_disable();
240         smp_callin();
241
242 #ifdef CONFIG_X86_32
243         /* switch away from the initial page table */
244         load_cr3(swapper_pg_dir);
245         __flush_tlb_all();
246 #endif
247
248         /* otherwise gcc will move up smp_processor_id before the cpu_init */
249         barrier();
250         /*
251          * Check TSC synchronization with the BP:
252          */
253         check_tsc_sync_target();
254
255         /*
256          * We need to hold call_lock, so there is no inconsistency
257          * between the time smp_call_function() determines number of
258          * IPI recipients, and the time when the determination is made
259          * for which cpus receive the IPI. Holding this
260          * lock helps us to not include this cpu in a currently in progress
261          * smp_call_function().
262          *
263          * We need to hold vector_lock so there the set of online cpus
264          * does not change while we are assigning vectors to cpus.  Holding
265          * this lock ensures we don't half assign or remove an irq from a cpu.
266          */
267         ipi_call_lock();
268         lock_vector_lock();
269         set_cpu_online(smp_processor_id(), true);
270         unlock_vector_lock();
271         ipi_call_unlock();
272         per_cpu(cpu_state, smp_processor_id()) = CPU_ONLINE;
273         x86_platform.nmi_init();
274
275         /* enable local interrupts */
276         local_irq_enable();
277
278         /* to prevent fake stack check failure in clock setup */
279         boot_init_stack_canary();
280
281         x86_cpuinit.setup_percpu_clockev();
282
283         wmb();
284         cpu_idle();
285 }
286
287 /*
288  * The bootstrap kernel entry code has set these up. Save them for
289  * a given CPU
290  */
291
292 void __cpuinit smp_store_cpu_info(int id)
293 {
294         struct cpuinfo_x86 *c = &cpu_data(id);
295
296         *c = boot_cpu_data;
297         c->cpu_index = id;
298         if (id != 0)
299                 identify_secondary_cpu(c);
300 }
301
302 static void __cpuinit link_thread_siblings(int cpu1, int cpu2)
303 {
304         cpumask_set_cpu(cpu1, cpu_sibling_mask(cpu2));
305         cpumask_set_cpu(cpu2, cpu_sibling_mask(cpu1));
306         cpumask_set_cpu(cpu1, cpu_core_mask(cpu2));
307         cpumask_set_cpu(cpu2, cpu_core_mask(cpu1));
308         cpumask_set_cpu(cpu1, cpu_llc_shared_mask(cpu2));
309         cpumask_set_cpu(cpu2, cpu_llc_shared_mask(cpu1));
310 }
311
312
313 void __cpuinit set_cpu_sibling_map(int cpu)
314 {
315         int i;
316         struct cpuinfo_x86 *c = &cpu_data(cpu);
317
318         cpumask_set_cpu(cpu, cpu_sibling_setup_mask);
319
320         if (smp_num_siblings > 1) {
321                 for_each_cpu(i, cpu_sibling_setup_mask) {
322                         struct cpuinfo_x86 *o = &cpu_data(i);
323
324                         if (cpu_has(c, X86_FEATURE_TOPOEXT)) {
325                                 if (c->phys_proc_id == o->phys_proc_id &&
326                                     per_cpu(cpu_llc_id, cpu) == per_cpu(cpu_llc_id, i) &&
327                                     c->compute_unit_id == o->compute_unit_id)
328                                         link_thread_siblings(cpu, i);
329                         } else if (c->phys_proc_id == o->phys_proc_id &&
330                                    c->cpu_core_id == o->cpu_core_id) {
331                                 link_thread_siblings(cpu, i);
332                         }
333                 }
334         } else {
335                 cpumask_set_cpu(cpu, cpu_sibling_mask(cpu));
336         }
337
338         cpumask_set_cpu(cpu, cpu_llc_shared_mask(cpu));
339
340         if (__this_cpu_read(cpu_info.x86_max_cores) == 1) {
341                 cpumask_copy(cpu_core_mask(cpu), cpu_sibling_mask(cpu));
342                 c->booted_cores = 1;
343                 return;
344         }
345
346         for_each_cpu(i, cpu_sibling_setup_mask) {
347                 if (per_cpu(cpu_llc_id, cpu) != BAD_APICID &&
348                     per_cpu(cpu_llc_id, cpu) == per_cpu(cpu_llc_id, i)) {
349                         cpumask_set_cpu(i, cpu_llc_shared_mask(cpu));
350                         cpumask_set_cpu(cpu, cpu_llc_shared_mask(i));
351                 }
352                 if (c->phys_proc_id == cpu_data(i).phys_proc_id) {
353                         cpumask_set_cpu(i, cpu_core_mask(cpu));
354                         cpumask_set_cpu(cpu, cpu_core_mask(i));
355                         /*
356                          *  Does this new cpu bringup a new core?
357                          */
358                         if (cpumask_weight(cpu_sibling_mask(cpu)) == 1) {
359                                 /*
360                                  * for each core in package, increment
361                                  * the booted_cores for this new cpu
362                                  */
363                                 if (cpumask_first(cpu_sibling_mask(i)) == i)
364                                         c->booted_cores++;
365                                 /*
366                                  * increment the core count for all
367                                  * the other cpus in this package
368                                  */
369                                 if (i != cpu)
370                                         cpu_data(i).booted_cores++;
371                         } else if (i != cpu && !c->booted_cores)
372                                 c->booted_cores = cpu_data(i).booted_cores;
373                 }
374         }
375 }
376
377 /* maps the cpu to the sched domain representing multi-core */
378 const struct cpumask *cpu_coregroup_mask(int cpu)
379 {
380         struct cpuinfo_x86 *c = &cpu_data(cpu);
381         /*
382          * For perf, we return last level cache shared map.
383          * And for power savings, we return cpu_core_map
384          */
385         if ((sched_mc_power_savings || sched_smt_power_savings) &&
386             !(cpu_has(c, X86_FEATURE_AMD_DCM)))
387                 return cpu_core_mask(cpu);
388         else
389                 return cpu_llc_shared_mask(cpu);
390 }
391
392 static void impress_friends(void)
393 {
394         int cpu;
395         unsigned long bogosum = 0;
396         /*
397          * Allow the user to impress friends.
398          */
399         pr_debug("Before bogomips.\n");
400         for_each_possible_cpu(cpu)
401                 if (cpumask_test_cpu(cpu, cpu_callout_mask))
402                         bogosum += cpu_data(cpu).loops_per_jiffy;
403         printk(KERN_INFO
404                 "Total of %d processors activated (%lu.%02lu BogoMIPS).\n",
405                 num_online_cpus(),
406                 bogosum/(500000/HZ),
407                 (bogosum/(5000/HZ))%100);
408
409         pr_debug("Before bogocount - setting activated=1.\n");
410 }
411
412 void __inquire_remote_apic(int apicid)
413 {
414         unsigned i, regs[] = { APIC_ID >> 4, APIC_LVR >> 4, APIC_SPIV >> 4 };
415         const char * const names[] = { "ID", "VERSION", "SPIV" };
416         int timeout;
417         u32 status;
418
419         printk(KERN_INFO "Inquiring remote APIC 0x%x...\n", apicid);
420
421         for (i = 0; i < ARRAY_SIZE(regs); i++) {
422                 printk(KERN_INFO "... APIC 0x%x %s: ", apicid, names[i]);
423
424                 /*
425                  * Wait for idle.
426                  */
427                 status = safe_apic_wait_icr_idle();
428                 if (status)
429                         printk(KERN_CONT
430                                "a previous APIC delivery may have failed\n");
431
432                 apic_icr_write(APIC_DM_REMRD | regs[i], apicid);
433
434                 timeout = 0;
435                 do {
436                         udelay(100);
437                         status = apic_read(APIC_ICR) & APIC_ICR_RR_MASK;
438                 } while (status == APIC_ICR_RR_INPROG && timeout++ < 1000);
439
440                 switch (status) {
441                 case APIC_ICR_RR_VALID:
442                         status = apic_read(APIC_RRR);
443                         printk(KERN_CONT "%08x\n", status);
444                         break;
445                 default:
446                         printk(KERN_CONT "failed\n");
447                 }
448         }
449 }
450
451 /*
452  * Poke the other CPU in the eye via NMI to wake it up. Remember that the normal
453  * INIT, INIT, STARTUP sequence will reset the chip hard for us, and this
454  * won't ... remember to clear down the APIC, etc later.
455  */
456 int __cpuinit
457 wakeup_secondary_cpu_via_nmi(int logical_apicid, unsigned long start_eip)
458 {
459         unsigned long send_status, accept_status = 0;
460         int maxlvt;
461
462         /* Target chip */
463         /* Boot on the stack */
464         /* Kick the second */
465         apic_icr_write(APIC_DM_NMI | apic->dest_logical, logical_apicid);
466
467         pr_debug("Waiting for send to finish...\n");
468         send_status = safe_apic_wait_icr_idle();
469
470         /*
471          * Give the other CPU some time to accept the IPI.
472          */
473         udelay(200);
474         if (APIC_INTEGRATED(apic_version[boot_cpu_physical_apicid])) {
475                 maxlvt = lapic_get_maxlvt();
476                 if (maxlvt > 3)                 /* Due to the Pentium erratum 3AP.  */
477                         apic_write(APIC_ESR, 0);
478                 accept_status = (apic_read(APIC_ESR) & 0xEF);
479         }
480         pr_debug("NMI sent.\n");
481
482         if (send_status)
483                 printk(KERN_ERR "APIC never delivered???\n");
484         if (accept_status)
485                 printk(KERN_ERR "APIC delivery error (%lx).\n", accept_status);
486
487         return (send_status | accept_status);
488 }
489
490 static int __cpuinit
491 wakeup_secondary_cpu_via_init(int phys_apicid, unsigned long start_eip)
492 {
493         unsigned long send_status, accept_status = 0;
494         int maxlvt, num_starts, j;
495
496         maxlvt = lapic_get_maxlvt();
497
498         /*
499          * Be paranoid about clearing APIC errors.
500          */
501         if (APIC_INTEGRATED(apic_version[phys_apicid])) {
502                 if (maxlvt > 3)         /* Due to the Pentium erratum 3AP.  */
503                         apic_write(APIC_ESR, 0);
504                 apic_read(APIC_ESR);
505         }
506
507         pr_debug("Asserting INIT.\n");
508
509         /*
510          * Turn INIT on target chip
511          */
512         /*
513          * Send IPI
514          */
515         apic_icr_write(APIC_INT_LEVELTRIG | APIC_INT_ASSERT | APIC_DM_INIT,
516                        phys_apicid);
517
518         pr_debug("Waiting for send to finish...\n");
519         send_status = safe_apic_wait_icr_idle();
520
521         mdelay(10);
522
523         pr_debug("Deasserting INIT.\n");
524
525         /* Target chip */
526         /* Send IPI */
527         apic_icr_write(APIC_INT_LEVELTRIG | APIC_DM_INIT, phys_apicid);
528
529         pr_debug("Waiting for send to finish...\n");
530         send_status = safe_apic_wait_icr_idle();
531
532         mb();
533         atomic_set(&init_deasserted, 1);
534
535         /*
536          * Should we send STARTUP IPIs ?
537          *
538          * Determine this based on the APIC version.
539          * If we don't have an integrated APIC, don't send the STARTUP IPIs.
540          */
541         if (APIC_INTEGRATED(apic_version[phys_apicid]))
542                 num_starts = 2;
543         else
544                 num_starts = 0;
545
546         /*
547          * Paravirt / VMI wants a startup IPI hook here to set up the
548          * target processor state.
549          */
550         startup_ipi_hook(phys_apicid, (unsigned long) start_secondary,
551                          stack_start);
552
553         /*
554          * Run STARTUP IPI loop.
555          */
556         pr_debug("#startup loops: %d.\n", num_starts);
557
558         for (j = 1; j <= num_starts; j++) {
559                 pr_debug("Sending STARTUP #%d.\n", j);
560                 if (maxlvt > 3)         /* Due to the Pentium erratum 3AP.  */
561                         apic_write(APIC_ESR, 0);
562                 apic_read(APIC_ESR);
563                 pr_debug("After apic_write.\n");
564
565                 /*
566                  * STARTUP IPI
567                  */
568
569                 /* Target chip */
570                 /* Boot on the stack */
571                 /* Kick the second */
572                 apic_icr_write(APIC_DM_STARTUP | (start_eip >> 12),
573                                phys_apicid);
574
575                 /*
576                  * Give the other CPU some time to accept the IPI.
577                  */
578                 udelay(300);
579
580                 pr_debug("Startup point 1.\n");
581
582                 pr_debug("Waiting for send to finish...\n");
583                 send_status = safe_apic_wait_icr_idle();
584
585                 /*
586                  * Give the other CPU some time to accept the IPI.
587                  */
588                 udelay(200);
589                 if (maxlvt > 3)         /* Due to the Pentium erratum 3AP.  */
590                         apic_write(APIC_ESR, 0);
591                 accept_status = (apic_read(APIC_ESR) & 0xEF);
592                 if (send_status || accept_status)
593                         break;
594         }
595         pr_debug("After Startup.\n");
596
597         if (send_status)
598                 printk(KERN_ERR "APIC never delivered???\n");
599         if (accept_status)
600                 printk(KERN_ERR "APIC delivery error (%lx).\n", accept_status);
601
602         return (send_status | accept_status);
603 }
604
605 /* reduce the number of lines printed when booting a large cpu count system */
606 static void __cpuinit announce_cpu(int cpu, int apicid)
607 {
608         static int current_node = -1;
609         int node = early_cpu_to_node(cpu);
610
611         if (system_state == SYSTEM_BOOTING) {
612                 if (node != current_node) {
613                         if (current_node > (-1))
614                                 pr_cont(" Ok.\n");
615                         current_node = node;
616                         pr_info("Booting Node %3d, Processors ", node);
617                 }
618                 pr_cont(" #%d%s", cpu, cpu == (nr_cpu_ids - 1) ? " Ok.\n" : "");
619                 return;
620         } else
621                 pr_info("Booting Node %d Processor %d APIC 0x%x\n",
622                         node, cpu, apicid);
623 }
624
625 /*
626  * NOTE - on most systems this is a PHYSICAL apic ID, but on multiquad
627  * (ie clustered apic addressing mode), this is a LOGICAL apic ID.
628  * Returns zero if CPU booted OK, else error code from
629  * ->wakeup_secondary_cpu.
630  */
631 static int __cpuinit do_boot_cpu(int apicid, int cpu, struct task_struct *idle)
632 {
633         unsigned long boot_error = 0;
634         unsigned long start_ip;
635         int timeout;
636
637         alternatives_smp_switch(1);
638
639         idle->thread.sp = (unsigned long) (((struct pt_regs *)
640                           (THREAD_SIZE +  task_stack_page(idle))) - 1);
641         per_cpu(current_task, cpu) = idle;
642
643 #ifdef CONFIG_X86_32
644         /* Stack for startup_32 can be just as for start_secondary onwards */
645         irq_ctx_init(cpu);
646 #else
647         clear_tsk_thread_flag(idle, TIF_FORK);
648         initial_gs = per_cpu_offset(cpu);
649         per_cpu(kernel_stack, cpu) =
650                 (unsigned long)task_stack_page(idle) -
651                 KERNEL_STACK_OFFSET + THREAD_SIZE;
652 #endif
653         early_gdt_descr.address = (unsigned long)get_cpu_gdt_table(cpu);
654         initial_code = (unsigned long)start_secondary;
655         stack_start  = idle->thread.sp;
656
657         /* start_ip had better be page-aligned! */
658         start_ip = trampoline_address();
659
660         /* So we see what's up */
661         announce_cpu(cpu, apicid);
662
663         /*
664          * This grunge runs the startup process for
665          * the targeted processor.
666          */
667
668         atomic_set(&init_deasserted, 0);
669
670         if (get_uv_system_type() != UV_NON_UNIQUE_APIC) {
671
672                 pr_debug("Setting warm reset code and vector.\n");
673
674                 smpboot_setup_warm_reset_vector(start_ip);
675                 /*
676                  * Be paranoid about clearing APIC errors.
677                 */
678                 if (APIC_INTEGRATED(apic_version[boot_cpu_physical_apicid])) {
679                         apic_write(APIC_ESR, 0);
680                         apic_read(APIC_ESR);
681                 }
682         }
683
684         /*
685          * Kick the secondary CPU. Use the method in the APIC driver
686          * if it's defined - or use an INIT boot APIC message otherwise:
687          */
688         if (apic->wakeup_secondary_cpu)
689                 boot_error = apic->wakeup_secondary_cpu(apicid, start_ip);
690         else
691                 boot_error = wakeup_secondary_cpu_via_init(apicid, start_ip);
692
693         if (!boot_error) {
694                 /*
695                  * allow APs to start initializing.
696                  */
697                 pr_debug("Before Callout %d.\n", cpu);
698                 cpumask_set_cpu(cpu, cpu_callout_mask);
699                 pr_debug("After Callout %d.\n", cpu);
700
701                 /*
702                  * Wait 5s total for a response
703                  */
704                 for (timeout = 0; timeout < 50000; timeout++) {
705                         if (cpumask_test_cpu(cpu, cpu_callin_mask))
706                                 break;  /* It has booted */
707                         udelay(100);
708                         /*
709                          * Allow other tasks to run while we wait for the
710                          * AP to come online. This also gives a chance
711                          * for the MTRR work(triggered by the AP coming online)
712                          * to be completed in the stop machine context.
713                          */
714                         schedule();
715                 }
716
717                 if (cpumask_test_cpu(cpu, cpu_callin_mask)) {
718                         print_cpu_msr(&cpu_data(cpu));
719                         pr_debug("CPU%d: has booted.\n", cpu);
720                 } else {
721                         boot_error = 1;
722                         if (*(volatile u32 *)TRAMPOLINE_SYM(trampoline_status)
723                             == 0xA5A5A5A5)
724                                 /* trampoline started but...? */
725                                 pr_err("CPU%d: Stuck ??\n", cpu);
726                         else
727                                 /* trampoline code not run */
728                                 pr_err("CPU%d: Not responding.\n", cpu);
729                         if (apic->inquire_remote_apic)
730                                 apic->inquire_remote_apic(apicid);
731                 }
732         }
733
734         if (boot_error) {
735                 /* Try to put things back the way they were before ... */
736                 numa_remove_cpu(cpu); /* was set by numa_add_cpu */
737
738                 /* was set by do_boot_cpu() */
739                 cpumask_clear_cpu(cpu, cpu_callout_mask);
740
741                 /* was set by cpu_init() */
742                 cpumask_clear_cpu(cpu, cpu_initialized_mask);
743
744                 set_cpu_present(cpu, false);
745                 per_cpu(x86_cpu_to_apicid, cpu) = BAD_APICID;
746         }
747
748         /* mark "stuck" area as not stuck */
749         *(volatile u32 *)TRAMPOLINE_SYM(trampoline_status) = 0;
750
751         if (get_uv_system_type() != UV_NON_UNIQUE_APIC) {
752                 /*
753                  * Cleanup possible dangling ends...
754                  */
755                 smpboot_restore_warm_reset_vector();
756         }
757         return boot_error;
758 }
759
760 int __cpuinit native_cpu_up(unsigned int cpu, struct task_struct *tidle)
761 {
762         int apicid = apic->cpu_present_to_apicid(cpu);
763         unsigned long flags;
764         int err;
765
766         WARN_ON(irqs_disabled());
767
768         pr_debug("++++++++++++++++++++=_---CPU UP  %u\n", cpu);
769
770         if (apicid == BAD_APICID || apicid == boot_cpu_physical_apicid ||
771             !physid_isset(apicid, phys_cpu_present_map) ||
772             !apic->apic_id_valid(apicid)) {
773                 printk(KERN_ERR "%s: bad cpu %d\n", __func__, cpu);
774                 return -EINVAL;
775         }
776
777         /*
778          * Already booted CPU?
779          */
780         if (cpumask_test_cpu(cpu, cpu_callin_mask)) {
781                 pr_debug("do_boot_cpu %d Already started\n", cpu);
782                 return -ENOSYS;
783         }
784
785         /*
786          * Save current MTRR state in case it was changed since early boot
787          * (e.g. by the ACPI SMI) to initialize new CPUs with MTRRs in sync:
788          */
789         mtrr_save_state();
790
791         per_cpu(cpu_state, cpu) = CPU_UP_PREPARE;
792
793         err = do_boot_cpu(apicid, cpu, tidle);
794         if (err) {
795                 pr_debug("do_boot_cpu failed %d\n", err);
796                 return -EIO;
797         }
798
799         /*
800          * Check TSC synchronization with the AP (keep irqs disabled
801          * while doing so):
802          */
803         local_irq_save(flags);
804         check_tsc_sync_source(cpu);
805         local_irq_restore(flags);
806
807         while (!cpu_online(cpu)) {
808                 cpu_relax();
809                 touch_nmi_watchdog();
810         }
811
812         return 0;
813 }
814
815 /**
816  * arch_disable_smp_support() - disables SMP support for x86 at runtime
817  */
818 void arch_disable_smp_support(void)
819 {
820         disable_ioapic_support();
821 }
822
823 /*
824  * Fall back to non SMP mode after errors.
825  *
826  * RED-PEN audit/test this more. I bet there is more state messed up here.
827  */
828 static __init void disable_smp(void)
829 {
830         init_cpu_present(cpumask_of(0));
831         init_cpu_possible(cpumask_of(0));
832         smpboot_clear_io_apic_irqs();
833
834         if (smp_found_config)
835                 physid_set_mask_of_physid(boot_cpu_physical_apicid, &phys_cpu_present_map);
836         else
837                 physid_set_mask_of_physid(0, &phys_cpu_present_map);
838         cpumask_set_cpu(0, cpu_sibling_mask(0));
839         cpumask_set_cpu(0, cpu_core_mask(0));
840 }
841
842 /*
843  * Various sanity checks.
844  */
845 static int __init smp_sanity_check(unsigned max_cpus)
846 {
847         preempt_disable();
848
849 #if !defined(CONFIG_X86_BIGSMP) && defined(CONFIG_X86_32)
850         if (def_to_bigsmp && nr_cpu_ids > 8) {
851                 unsigned int cpu;
852                 unsigned nr;
853
854                 printk(KERN_WARNING
855                        "More than 8 CPUs detected - skipping them.\n"
856                        "Use CONFIG_X86_BIGSMP.\n");
857
858                 nr = 0;
859                 for_each_present_cpu(cpu) {
860                         if (nr >= 8)
861                                 set_cpu_present(cpu, false);
862                         nr++;
863                 }
864
865                 nr = 0;
866                 for_each_possible_cpu(cpu) {
867                         if (nr >= 8)
868                                 set_cpu_possible(cpu, false);
869                         nr++;
870                 }
871
872                 nr_cpu_ids = 8;
873         }
874 #endif
875
876         if (!physid_isset(hard_smp_processor_id(), phys_cpu_present_map)) {
877                 printk(KERN_WARNING
878                         "weird, boot CPU (#%d) not listed by the BIOS.\n",
879                         hard_smp_processor_id());
880
881                 physid_set(hard_smp_processor_id(), phys_cpu_present_map);
882         }
883
884         /*
885          * If we couldn't find an SMP configuration at boot time,
886          * get out of here now!
887          */
888         if (!smp_found_config && !acpi_lapic) {
889                 preempt_enable();
890                 printk(KERN_NOTICE "SMP motherboard not detected.\n");
891                 disable_smp();
892                 if (APIC_init_uniprocessor())
893                         printk(KERN_NOTICE "Local APIC not detected."
894                                            " Using dummy APIC emulation.\n");
895                 return -1;
896         }
897
898         /*
899          * Should not be necessary because the MP table should list the boot
900          * CPU too, but we do it for the sake of robustness anyway.
901          */
902         if (!apic->check_phys_apicid_present(boot_cpu_physical_apicid)) {
903                 printk(KERN_NOTICE
904                         "weird, boot CPU (#%d) not listed by the BIOS.\n",
905                         boot_cpu_physical_apicid);
906                 physid_set(hard_smp_processor_id(), phys_cpu_present_map);
907         }
908         preempt_enable();
909
910         /*
911          * If we couldn't find a local APIC, then get out of here now!
912          */
913         if (APIC_INTEGRATED(apic_version[boot_cpu_physical_apicid]) &&
914             !cpu_has_apic) {
915                 if (!disable_apic) {
916                         pr_err("BIOS bug, local APIC #%d not detected!...\n",
917                                 boot_cpu_physical_apicid);
918                         pr_err("... forcing use of dummy APIC emulation."
919                                 "(tell your hw vendor)\n");
920                 }
921                 smpboot_clear_io_apic();
922                 disable_ioapic_support();
923                 return -1;
924         }
925
926         verify_local_APIC();
927
928         /*
929          * If SMP should be disabled, then really disable it!
930          */
931         if (!max_cpus) {
932                 printk(KERN_INFO "SMP mode deactivated.\n");
933                 smpboot_clear_io_apic();
934
935                 connect_bsp_APIC();
936                 setup_local_APIC();
937                 bsp_end_local_APIC_setup();
938                 return -1;
939         }
940
941         return 0;
942 }
943
944 static void __init smp_cpu_index_default(void)
945 {
946         int i;
947         struct cpuinfo_x86 *c;
948
949         for_each_possible_cpu(i) {
950                 c = &cpu_data(i);
951                 /* mark all to hotplug */
952                 c->cpu_index = nr_cpu_ids;
953         }
954 }
955
956 /*
957  * Prepare for SMP bootup.  The MP table or ACPI has been read
958  * earlier.  Just do some sanity checking here and enable APIC mode.
959  */
960 void __init native_smp_prepare_cpus(unsigned int max_cpus)
961 {
962         unsigned int i;
963
964         preempt_disable();
965         smp_cpu_index_default();
966
967         /*
968          * Setup boot CPU information
969          */
970         smp_store_cpu_info(0); /* Final full version of the data */
971         cpumask_copy(cpu_callin_mask, cpumask_of(0));
972         mb();
973
974         current_thread_info()->cpu = 0;  /* needed? */
975         for_each_possible_cpu(i) {
976                 zalloc_cpumask_var(&per_cpu(cpu_sibling_map, i), GFP_KERNEL);
977                 zalloc_cpumask_var(&per_cpu(cpu_core_map, i), GFP_KERNEL);
978                 zalloc_cpumask_var(&per_cpu(cpu_llc_shared_map, i), GFP_KERNEL);
979         }
980         set_cpu_sibling_map(0);
981
982
983         if (smp_sanity_check(max_cpus) < 0) {
984                 printk(KERN_INFO "SMP disabled\n");
985                 disable_smp();
986                 goto out;
987         }
988
989         default_setup_apic_routing();
990
991         preempt_disable();
992         if (read_apic_id() != boot_cpu_physical_apicid) {
993                 panic("Boot APIC ID in local APIC unexpected (%d vs %d)",
994                      read_apic_id(), boot_cpu_physical_apicid);
995                 /* Or can we switch back to PIC here? */
996         }
997         preempt_enable();
998
999         connect_bsp_APIC();
1000
1001         /*
1002          * Switch from PIC to APIC mode.
1003          */
1004         setup_local_APIC();
1005
1006         /*
1007          * Enable IO APIC before setting up error vector
1008          */
1009         if (!skip_ioapic_setup && nr_ioapics)
1010                 enable_IO_APIC();
1011
1012         bsp_end_local_APIC_setup();
1013
1014         if (apic->setup_portio_remap)
1015                 apic->setup_portio_remap();
1016
1017         smpboot_setup_io_apic();
1018         /*
1019          * Set up local APIC timer on boot CPU.
1020          */
1021
1022         printk(KERN_INFO "CPU%d: ", 0);
1023         print_cpu_info(&cpu_data(0));
1024         x86_init.timers.setup_percpu_clockev();
1025
1026         if (is_uv_system())
1027                 uv_system_init();
1028
1029         set_mtrr_aps_delayed_init();
1030 out:
1031         preempt_enable();
1032 }
1033
1034 void arch_disable_nonboot_cpus_begin(void)
1035 {
1036         /*
1037          * Avoid the smp alternatives switch during the disable_nonboot_cpus().
1038          * In the suspend path, we will be back in the SMP mode shortly anyways.
1039          */
1040         skip_smp_alternatives = true;
1041 }
1042
1043 void arch_disable_nonboot_cpus_end(void)
1044 {
1045         skip_smp_alternatives = false;
1046 }
1047
1048 void arch_enable_nonboot_cpus_begin(void)
1049 {
1050         set_mtrr_aps_delayed_init();
1051 }
1052
1053 void arch_enable_nonboot_cpus_end(void)
1054 {
1055         mtrr_aps_init();
1056 }
1057
1058 /*
1059  * Early setup to make printk work.
1060  */
1061 void __init native_smp_prepare_boot_cpu(void)
1062 {
1063         int me = smp_processor_id();
1064         switch_to_new_gdt(me);
1065         /* already set me in cpu_online_mask in boot_cpu_init() */
1066         cpumask_set_cpu(me, cpu_callout_mask);
1067         per_cpu(cpu_state, me) = CPU_ONLINE;
1068 }
1069
1070 void __init native_smp_cpus_done(unsigned int max_cpus)
1071 {
1072         pr_debug("Boot done.\n");
1073
1074         nmi_selftest();
1075         impress_friends();
1076 #ifdef CONFIG_X86_IO_APIC
1077         setup_ioapic_dest();
1078 #endif
1079         mtrr_aps_init();
1080 }
1081
1082 static int __initdata setup_possible_cpus = -1;
1083 static int __init _setup_possible_cpus(char *str)
1084 {
1085         get_option(&str, &setup_possible_cpus);
1086         return 0;
1087 }
1088 early_param("possible_cpus", _setup_possible_cpus);
1089
1090
1091 /*
1092  * cpu_possible_mask should be static, it cannot change as cpu's
1093  * are onlined, or offlined. The reason is per-cpu data-structures
1094  * are allocated by some modules at init time, and dont expect to
1095  * do this dynamically on cpu arrival/departure.
1096  * cpu_present_mask on the other hand can change dynamically.
1097  * In case when cpu_hotplug is not compiled, then we resort to current
1098  * behaviour, which is cpu_possible == cpu_present.
1099  * - Ashok Raj
1100  *
1101  * Three ways to find out the number of additional hotplug CPUs:
1102  * - If the BIOS specified disabled CPUs in ACPI/mptables use that.
1103  * - The user can overwrite it with possible_cpus=NUM
1104  * - Otherwise don't reserve additional CPUs.
1105  * We do this because additional CPUs waste a lot of memory.
1106  * -AK
1107  */
1108 __init void prefill_possible_map(void)
1109 {
1110         int i, possible;
1111
1112         /* no processor from mptable or madt */
1113         if (!num_processors)
1114                 num_processors = 1;
1115
1116         i = setup_max_cpus ?: 1;
1117         if (setup_possible_cpus == -1) {
1118                 possible = num_processors;
1119 #ifdef CONFIG_HOTPLUG_CPU
1120                 if (setup_max_cpus)
1121                         possible += disabled_cpus;
1122 #else
1123                 if (possible > i)
1124                         possible = i;
1125 #endif
1126         } else
1127                 possible = setup_possible_cpus;
1128
1129         total_cpus = max_t(int, possible, num_processors + disabled_cpus);
1130
1131         /* nr_cpu_ids could be reduced via nr_cpus= */
1132         if (possible > nr_cpu_ids) {
1133                 printk(KERN_WARNING
1134                         "%d Processors exceeds NR_CPUS limit of %d\n",
1135                         possible, nr_cpu_ids);
1136                 possible = nr_cpu_ids;
1137         }
1138
1139 #ifdef CONFIG_HOTPLUG_CPU
1140         if (!setup_max_cpus)
1141 #endif
1142         if (possible > i) {
1143                 printk(KERN_WARNING
1144                         "%d Processors exceeds max_cpus limit of %u\n",
1145                         possible, setup_max_cpus);
1146                 possible = i;
1147         }
1148
1149         printk(KERN_INFO "SMP: Allowing %d CPUs, %d hotplug CPUs\n",
1150                 possible, max_t(int, possible - num_processors, 0));
1151
1152         for (i = 0; i < possible; i++)
1153                 set_cpu_possible(i, true);
1154         for (; i < NR_CPUS; i++)
1155                 set_cpu_possible(i, false);
1156
1157         nr_cpu_ids = possible;
1158 }
1159
1160 #ifdef CONFIG_HOTPLUG_CPU
1161
1162 static void remove_siblinginfo(int cpu)
1163 {
1164         int sibling;
1165         struct cpuinfo_x86 *c = &cpu_data(cpu);
1166
1167         for_each_cpu(sibling, cpu_core_mask(cpu)) {
1168                 cpumask_clear_cpu(cpu, cpu_core_mask(sibling));
1169                 /*/
1170                  * last thread sibling in this cpu core going down
1171                  */
1172                 if (cpumask_weight(cpu_sibling_mask(cpu)) == 1)
1173                         cpu_data(sibling).booted_cores--;
1174         }
1175
1176         for_each_cpu(sibling, cpu_sibling_mask(cpu))
1177                 cpumask_clear_cpu(cpu, cpu_sibling_mask(sibling));
1178         cpumask_clear(cpu_sibling_mask(cpu));
1179         cpumask_clear(cpu_core_mask(cpu));
1180         c->phys_proc_id = 0;
1181         c->cpu_core_id = 0;
1182         cpumask_clear_cpu(cpu, cpu_sibling_setup_mask);
1183 }
1184
1185 static void __ref remove_cpu_from_maps(int cpu)
1186 {
1187         set_cpu_online(cpu, false);
1188         cpumask_clear_cpu(cpu, cpu_callout_mask);
1189         cpumask_clear_cpu(cpu, cpu_callin_mask);
1190         /* was set by cpu_init() */
1191         cpumask_clear_cpu(cpu, cpu_initialized_mask);
1192         numa_remove_cpu(cpu);
1193 }
1194
1195 void cpu_disable_common(void)
1196 {
1197         int cpu = smp_processor_id();
1198
1199         remove_siblinginfo(cpu);
1200
1201         /* It's now safe to remove this processor from the online map */
1202         lock_vector_lock();
1203         remove_cpu_from_maps(cpu);
1204         unlock_vector_lock();
1205         fixup_irqs();
1206 }
1207
1208 int native_cpu_disable(void)
1209 {
1210         int cpu = smp_processor_id();
1211
1212         /*
1213          * Perhaps use cpufreq to drop frequency, but that could go
1214          * into generic code.
1215          *
1216          * We won't take down the boot processor on i386 due to some
1217          * interrupts only being able to be serviced by the BSP.
1218          * Especially so if we're not using an IOAPIC   -zwane
1219          */
1220         if (cpu == 0)
1221                 return -EBUSY;
1222
1223         clear_local_APIC();
1224
1225         cpu_disable_common();
1226         return 0;
1227 }
1228
1229 void native_cpu_die(unsigned int cpu)
1230 {
1231         /* We don't do anything here: idle task is faking death itself. */
1232         unsigned int i;
1233
1234         for (i = 0; i < 10; i++) {
1235                 /* They ack this in play_dead by setting CPU_DEAD */
1236                 if (per_cpu(cpu_state, cpu) == CPU_DEAD) {
1237                         if (system_state == SYSTEM_RUNNING)
1238                                 pr_info("CPU %u is now offline\n", cpu);
1239
1240                         if (1 == num_online_cpus())
1241                                 alternatives_smp_switch(0);
1242                         return;
1243                 }
1244                 msleep(100);
1245         }
1246         pr_err("CPU %u didn't die...\n", cpu);
1247 }
1248
1249 void play_dead_common(void)
1250 {
1251         idle_task_exit();
1252         reset_lazy_tlbstate();
1253         amd_e400_remove_cpu(raw_smp_processor_id());
1254
1255         mb();
1256         /* Ack it */
1257         __this_cpu_write(cpu_state, CPU_DEAD);
1258
1259         /*
1260          * With physical CPU hotplug, we should halt the cpu
1261          */
1262         local_irq_disable();
1263 }
1264
1265 /*
1266  * We need to flush the caches before going to sleep, lest we have
1267  * dirty data in our caches when we come back up.
1268  */
1269 static inline void mwait_play_dead(void)
1270 {
1271         unsigned int eax, ebx, ecx, edx;
1272         unsigned int highest_cstate = 0;
1273         unsigned int highest_subcstate = 0;
1274         int i;
1275         void *mwait_ptr;
1276         struct cpuinfo_x86 *c = __this_cpu_ptr(&cpu_info);
1277
1278         if (!(this_cpu_has(X86_FEATURE_MWAIT) && mwait_usable(c)))
1279                 return;
1280         if (!this_cpu_has(X86_FEATURE_CLFLSH))
1281                 return;
1282         if (__this_cpu_read(cpu_info.cpuid_level) < CPUID_MWAIT_LEAF)
1283                 return;
1284
1285         eax = CPUID_MWAIT_LEAF;
1286         ecx = 0;
1287         native_cpuid(&eax, &ebx, &ecx, &edx);
1288
1289         /*
1290          * eax will be 0 if EDX enumeration is not valid.
1291          * Initialized below to cstate, sub_cstate value when EDX is valid.
1292          */
1293         if (!(ecx & CPUID5_ECX_EXTENSIONS_SUPPORTED)) {
1294                 eax = 0;
1295         } else {
1296                 edx >>= MWAIT_SUBSTATE_SIZE;
1297                 for (i = 0; i < 7 && edx; i++, edx >>= MWAIT_SUBSTATE_SIZE) {
1298                         if (edx & MWAIT_SUBSTATE_MASK) {
1299                                 highest_cstate = i;
1300                                 highest_subcstate = edx & MWAIT_SUBSTATE_MASK;
1301                         }
1302                 }
1303                 eax = (highest_cstate << MWAIT_SUBSTATE_SIZE) |
1304                         (highest_subcstate - 1);
1305         }
1306
1307         /*
1308          * This should be a memory location in a cache line which is
1309          * unlikely to be touched by other processors.  The actual
1310          * content is immaterial as it is not actually modified in any way.
1311          */
1312         mwait_ptr = &current_thread_info()->flags;
1313
1314         wbinvd();
1315
1316         while (1) {
1317                 /*
1318                  * The CLFLUSH is a workaround for erratum AAI65 for
1319                  * the Xeon 7400 series.  It's not clear it is actually
1320                  * needed, but it should be harmless in either case.
1321                  * The WBINVD is insufficient due to the spurious-wakeup
1322                  * case where we return around the loop.
1323                  */
1324                 clflush(mwait_ptr);
1325                 __monitor(mwait_ptr, 0, 0);
1326                 mb();
1327                 __mwait(eax, 0);
1328         }
1329 }
1330
1331 static inline void hlt_play_dead(void)
1332 {
1333         if (__this_cpu_read(cpu_info.x86) >= 4)
1334                 wbinvd();
1335
1336         while (1) {
1337                 native_halt();
1338         }
1339 }
1340
1341 void native_play_dead(void)
1342 {
1343         play_dead_common();
1344         tboot_shutdown(TB_SHUTDOWN_WFS);
1345
1346         mwait_play_dead();      /* Only returns on failure */
1347         if (cpuidle_play_dead())
1348                 hlt_play_dead();
1349 }
1350
1351 #else /* ... !CONFIG_HOTPLUG_CPU */
1352 int native_cpu_disable(void)
1353 {
1354         return -ENOSYS;
1355 }
1356
1357 void native_cpu_die(unsigned int cpu)
1358 {
1359         /* We said "no" in __cpu_disable */
1360         BUG();
1361 }
1362
1363 void native_play_dead(void)
1364 {
1365         BUG();
1366 }
1367
1368 #endif