[PATCH] x86_64: CPU hotplug sibling map cleanup
[safe/jmp/linux-2.6] / arch / x86_64 / kernel / smpboot.c
1 /*
2  *      x86 SMP booting functions
3  *
4  *      (c) 1995 Alan Cox, Building #3 <alan@redhat.com>
5  *      (c) 1998, 1999, 2000 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
16  *
17  *      Fixes
18  *              Felix Koop      :       NR_CPUS used properly
19  *              Jose Renau      :       Handle single CPU case.
20  *              Alan Cox        :       By repeated request 8) - Total BogoMIP report.
21  *              Greg Wright     :       Fix for kernel stacks panic.
22  *              Erich Boleyn    :       MP v1.4 and additional changes.
23  *      Matthias Sattler        :       Changes for 2.1 kernel map.
24  *      Michel Lespinasse       :       Changes for 2.1 kernel map.
25  *      Michael Chastain        :       Change trampoline.S to gnu as.
26  *              Alan Cox        :       Dumb bug: 'B' step PPro's are fine
27  *              Ingo Molnar     :       Added APIC timers, based on code
28  *                                      from Jose Renau
29  *              Ingo Molnar     :       various cleanups and rewrites
30  *              Tigran Aivazian :       fixed "0.00 in /proc/uptime on SMP" bug.
31  *      Maciej W. Rozycki       :       Bits for genuine 82489DX APICs
32  *      Andi Kleen              :       Changed for SMP boot into long mode.
33  *              Rusty Russell   :       Hacked into shape for new "hotplug" boot process.
34  *      Andi Kleen              :       Converted to new state machine.
35  *                                      Various cleanups.
36  *                                      Probably mostly hotplug CPU ready now.
37  *      Ashok Raj                       : CPU hotplug support
38  */
39
40
41 #include <linux/config.h>
42 #include <linux/init.h>
43
44 #include <linux/mm.h>
45 #include <linux/kernel_stat.h>
46 #include <linux/smp_lock.h>
47 #include <linux/irq.h>
48 #include <linux/bootmem.h>
49 #include <linux/thread_info.h>
50 #include <linux/module.h>
51
52 #include <linux/delay.h>
53 #include <linux/mc146818rtc.h>
54 #include <asm/mtrr.h>
55 #include <asm/pgalloc.h>
56 #include <asm/desc.h>
57 #include <asm/kdebug.h>
58 #include <asm/tlbflush.h>
59 #include <asm/proto.h>
60 #include <asm/nmi.h>
61
62 /* Number of siblings per CPU package */
63 int smp_num_siblings = 1;
64 /* Package ID of each logical CPU */
65 u8 phys_proc_id[NR_CPUS] = { [0 ... NR_CPUS-1] = BAD_APICID };
66 u8 cpu_core_id[NR_CPUS] = { [0 ... NR_CPUS-1] = BAD_APICID };
67 EXPORT_SYMBOL(phys_proc_id);
68 EXPORT_SYMBOL(cpu_core_id);
69
70 /* Bitmask of currently online CPUs */
71 cpumask_t cpu_online_map;
72
73 EXPORT_SYMBOL(cpu_online_map);
74
75 /*
76  * Private maps to synchronize booting between AP and BP.
77  * Probably not needed anymore, but it makes for easier debugging. -AK
78  */
79 cpumask_t cpu_callin_map;
80 cpumask_t cpu_callout_map;
81
82 cpumask_t cpu_possible_map;
83 EXPORT_SYMBOL(cpu_possible_map);
84
85 /* Per CPU bogomips and other parameters */
86 struct cpuinfo_x86 cpu_data[NR_CPUS] __cacheline_aligned;
87
88 /* Set when the idlers are all forked */
89 int smp_threads_ready;
90
91 cpumask_t cpu_sibling_map[NR_CPUS] __cacheline_aligned;
92 cpumask_t cpu_core_map[NR_CPUS] __cacheline_aligned;
93 EXPORT_SYMBOL(cpu_core_map);
94
95 /*
96  * Trampoline 80x86 program as an array.
97  */
98
99 extern unsigned char trampoline_data[];
100 extern unsigned char trampoline_end[];
101
102 /* State of each CPU */
103 DEFINE_PER_CPU(int, cpu_state) = { 0 };
104
105 /*
106  * Store all idle threads, this can be reused instead of creating
107  * a new thread. Also avoids complicated thread destroy functionality
108  * for idle threads.
109  */
110 struct task_struct *idle_thread_array[NR_CPUS] __cpuinitdata ;
111
112 #define get_idle_for_cpu(x)     (idle_thread_array[(x)])
113 #define set_idle_for_cpu(x,p)   (idle_thread_array[(x)] = (p))
114
115 /*
116  * cpu_possible_map should be static, it cannot change as cpu's
117  * are onlined, or offlined. The reason is per-cpu data-structures
118  * are allocated by some modules at init time, and dont expect to
119  * do this dynamically on cpu arrival/departure.
120  * cpu_present_map on the other hand can change dynamically.
121  * In case when cpu_hotplug is not compiled, then we resort to current
122  * behaviour, which is cpu_possible == cpu_present.
123  * If cpu-hotplug is supported, then we need to preallocate for all
124  * those NR_CPUS, hence cpu_possible_map represents entire NR_CPUS range.
125  * - Ashok Raj
126  */
127 #ifdef CONFIG_HOTPLUG_CPU
128 #define fixup_cpu_possible_map(x)       cpu_set((x), cpu_possible_map)
129 #else
130 #define fixup_cpu_possible_map(x)
131 #endif
132
133 /*
134  * Currently trivial. Write the real->protected mode
135  * bootstrap into the page concerned. The caller
136  * has made sure it's suitably aligned.
137  */
138
139 static unsigned long __cpuinit setup_trampoline(void)
140 {
141         void *tramp = __va(SMP_TRAMPOLINE_BASE); 
142         memcpy(tramp, trampoline_data, trampoline_end - trampoline_data);
143         return virt_to_phys(tramp);
144 }
145
146 /*
147  * The bootstrap kernel entry code has set these up. Save them for
148  * a given CPU
149  */
150
151 static void __cpuinit smp_store_cpu_info(int id)
152 {
153         struct cpuinfo_x86 *c = cpu_data + id;
154
155         *c = boot_cpu_data;
156         identify_cpu(c);
157         print_cpu_info(c);
158 }
159
160 /*
161  * New Funky TSC sync algorithm borrowed from IA64.
162  * Main advantage is that it doesn't reset the TSCs fully and
163  * in general looks more robust and it works better than my earlier
164  * attempts. I believe it was written by David Mosberger. Some minor
165  * adjustments for x86-64 by me -AK
166  *
167  * Original comment reproduced below.
168  *
169  * Synchronize TSC of the current (slave) CPU with the TSC of the
170  * MASTER CPU (normally the time-keeper CPU).  We use a closed loop to
171  * eliminate the possibility of unaccounted-for errors (such as
172  * getting a machine check in the middle of a calibration step).  The
173  * basic idea is for the slave to ask the master what itc value it has
174  * and to read its own itc before and after the master responds.  Each
175  * iteration gives us three timestamps:
176  *
177  *      slave           master
178  *
179  *      t0 ---\
180  *             ---\
181  *                 --->
182  *                      tm
183  *                 /---
184  *             /---
185  *      t1 <---
186  *
187  *
188  * The goal is to adjust the slave's TSC such that tm falls exactly
189  * half-way between t0 and t1.  If we achieve this, the clocks are
190  * synchronized provided the interconnect between the slave and the
191  * master is symmetric.  Even if the interconnect were asymmetric, we
192  * would still know that the synchronization error is smaller than the
193  * roundtrip latency (t0 - t1).
194  *
195  * When the interconnect is quiet and symmetric, this lets us
196  * synchronize the TSC to within one or two cycles.  However, we can
197  * only *guarantee* that the synchronization is accurate to within a
198  * round-trip time, which is typically in the range of several hundred
199  * cycles (e.g., ~500 cycles).  In practice, this means that the TSCs
200  * are usually almost perfectly synchronized, but we shouldn't assume
201  * that the accuracy is much better than half a micro second or so.
202  *
203  * [there are other errors like the latency of RDTSC and of the
204  * WRMSR. These can also account to hundreds of cycles. So it's
205  * probably worse. It claims 153 cycles error on a dual Opteron,
206  * but I suspect the numbers are actually somewhat worse -AK]
207  */
208
209 #define MASTER  0
210 #define SLAVE   (SMP_CACHE_BYTES/8)
211
212 /* Intentionally don't use cpu_relax() while TSC synchronization
213    because we don't want to go into funky power save modi or cause
214    hypervisors to schedule us away.  Going to sleep would likely affect
215    latency and low latency is the primary objective here. -AK */
216 #define no_cpu_relax() barrier()
217
218 static __cpuinitdata DEFINE_SPINLOCK(tsc_sync_lock);
219 static volatile __cpuinitdata unsigned long go[SLAVE + 1];
220 static int notscsync __cpuinitdata;
221
222 #undef DEBUG_TSC_SYNC
223
224 #define NUM_ROUNDS      64      /* magic value */
225 #define NUM_ITERS       5       /* likewise */
226
227 /* Callback on boot CPU */
228 static __cpuinit void sync_master(void *arg)
229 {
230         unsigned long flags, i;
231
232         if (smp_processor_id() != boot_cpu_id)
233                 return;
234
235         go[MASTER] = 0;
236
237         local_irq_save(flags);
238         {
239                 for (i = 0; i < NUM_ROUNDS*NUM_ITERS; ++i) {
240                         while (!go[MASTER])
241                                 no_cpu_relax();
242                         go[MASTER] = 0;
243                         rdtscll(go[SLAVE]);
244                 }
245         }
246         local_irq_restore(flags);
247 }
248
249 /*
250  * Return the number of cycles by which our tsc differs from the tsc
251  * on the master (time-keeper) CPU.  A positive number indicates our
252  * tsc is ahead of the master, negative that it is behind.
253  */
254 static inline long
255 get_delta(long *rt, long *master)
256 {
257         unsigned long best_t0 = 0, best_t1 = ~0UL, best_tm = 0;
258         unsigned long tcenter, t0, t1, tm;
259         int i;
260
261         for (i = 0; i < NUM_ITERS; ++i) {
262                 rdtscll(t0);
263                 go[MASTER] = 1;
264                 while (!(tm = go[SLAVE]))
265                         no_cpu_relax();
266                 go[SLAVE] = 0;
267                 rdtscll(t1);
268
269                 if (t1 - t0 < best_t1 - best_t0)
270                         best_t0 = t0, best_t1 = t1, best_tm = tm;
271         }
272
273         *rt = best_t1 - best_t0;
274         *master = best_tm - best_t0;
275
276         /* average best_t0 and best_t1 without overflow: */
277         tcenter = (best_t0/2 + best_t1/2);
278         if (best_t0 % 2 + best_t1 % 2 == 2)
279                 ++tcenter;
280         return tcenter - best_tm;
281 }
282
283 static __cpuinit void sync_tsc(void)
284 {
285         int i, done = 0;
286         long delta, adj, adjust_latency = 0;
287         unsigned long flags, rt, master_time_stamp, bound;
288 #if DEBUG_TSC_SYNC
289         static struct syncdebug {
290                 long rt;        /* roundtrip time */
291                 long master;    /* master's timestamp */
292                 long diff;      /* difference between midpoint and master's timestamp */
293                 long lat;       /* estimate of tsc adjustment latency */
294         } t[NUM_ROUNDS] __cpuinitdata;
295 #endif
296
297         go[MASTER] = 1;
298
299         smp_call_function(sync_master, NULL, 1, 0);
300
301         while (go[MASTER])      /* wait for master to be ready */
302                 no_cpu_relax();
303
304         spin_lock_irqsave(&tsc_sync_lock, flags);
305         {
306                 for (i = 0; i < NUM_ROUNDS; ++i) {
307                         delta = get_delta(&rt, &master_time_stamp);
308                         if (delta == 0) {
309                                 done = 1;       /* let's lock on to this... */
310                                 bound = rt;
311                         }
312
313                         if (!done) {
314                                 unsigned long t;
315                                 if (i > 0) {
316                                         adjust_latency += -delta;
317                                         adj = -delta + adjust_latency/4;
318                                 } else
319                                         adj = -delta;
320
321                                 rdtscll(t);
322                                 wrmsrl(MSR_IA32_TSC, t + adj);
323                         }
324 #if DEBUG_TSC_SYNC
325                         t[i].rt = rt;
326                         t[i].master = master_time_stamp;
327                         t[i].diff = delta;
328                         t[i].lat = adjust_latency/4;
329 #endif
330                 }
331         }
332         spin_unlock_irqrestore(&tsc_sync_lock, flags);
333
334 #if DEBUG_TSC_SYNC
335         for (i = 0; i < NUM_ROUNDS; ++i)
336                 printk("rt=%5ld master=%5ld diff=%5ld adjlat=%5ld\n",
337                        t[i].rt, t[i].master, t[i].diff, t[i].lat);
338 #endif
339
340         printk(KERN_INFO
341                "CPU %d: synchronized TSC with CPU %u (last diff %ld cycles, "
342                "maxerr %lu cycles)\n",
343                smp_processor_id(), boot_cpu_id, delta, rt);
344 }
345
346 static void __cpuinit tsc_sync_wait(void)
347 {
348         if (notscsync || !cpu_has_tsc)
349                 return;
350         printk(KERN_INFO "CPU %d: Syncing TSC to CPU %u.\n", smp_processor_id(),
351                         boot_cpu_id);
352         sync_tsc();
353 }
354
355 static __init int notscsync_setup(char *s)
356 {
357         notscsync = 1;
358         return 0;
359 }
360 __setup("notscsync", notscsync_setup);
361
362 static atomic_t init_deasserted __cpuinitdata;
363
364 /*
365  * Report back to the Boot Processor.
366  * Running on AP.
367  */
368 void __cpuinit smp_callin(void)
369 {
370         int cpuid, phys_id;
371         unsigned long timeout;
372
373         /*
374          * If waken up by an INIT in an 82489DX configuration
375          * we may get here before an INIT-deassert IPI reaches
376          * our local APIC.  We have to wait for the IPI or we'll
377          * lock up on an APIC access.
378          */
379         while (!atomic_read(&init_deasserted))
380                 cpu_relax();
381
382         /*
383          * (This works even if the APIC is not enabled.)
384          */
385         phys_id = GET_APIC_ID(apic_read(APIC_ID));
386         cpuid = smp_processor_id();
387         if (cpu_isset(cpuid, cpu_callin_map)) {
388                 panic("smp_callin: phys CPU#%d, CPU#%d already present??\n",
389                                         phys_id, cpuid);
390         }
391         Dprintk("CPU#%d (phys ID: %d) waiting for CALLOUT\n", cpuid, phys_id);
392
393         /*
394          * STARTUP IPIs are fragile beasts as they might sometimes
395          * trigger some glue motherboard logic. Complete APIC bus
396          * silence for 1 second, this overestimates the time the
397          * boot CPU is spending to send the up to 2 STARTUP IPIs
398          * by a factor of two. This should be enough.
399          */
400
401         /*
402          * Waiting 2s total for startup (udelay is not yet working)
403          */
404         timeout = jiffies + 2*HZ;
405         while (time_before(jiffies, timeout)) {
406                 /*
407                  * Has the boot CPU finished it's STARTUP sequence?
408                  */
409                 if (cpu_isset(cpuid, cpu_callout_map))
410                         break;
411                 cpu_relax();
412         }
413
414         if (!time_before(jiffies, timeout)) {
415                 panic("smp_callin: CPU%d started up but did not get a callout!\n",
416                         cpuid);
417         }
418
419         /*
420          * the boot CPU has finished the init stage and is spinning
421          * on callin_map until we finish. We are free to set up this
422          * CPU, first the APIC. (this is probably redundant on most
423          * boards)
424          */
425
426         Dprintk("CALLIN, before setup_local_APIC().\n");
427         setup_local_APIC();
428
429         /*
430          * Get our bogomips.
431          */
432         calibrate_delay();
433         Dprintk("Stack at about %p\n",&cpuid);
434
435         disable_APIC_timer();
436
437         /*
438          * Save our processor parameters
439          */
440         smp_store_cpu_info(cpuid);
441
442         /*
443          * Allow the master to continue.
444          */
445         cpu_set(cpuid, cpu_callin_map);
446 }
447
448 static inline void set_cpu_sibling_map(int cpu)
449 {
450         int i;
451
452         if (smp_num_siblings > 1) {
453                 for_each_cpu(i) {
454                         if (cpu_core_id[cpu] == cpu_core_id[i]) {
455                                 cpu_set(i, cpu_sibling_map[cpu]);
456                                 cpu_set(cpu, cpu_sibling_map[i]);
457                         }
458                 }
459         } else {
460                 cpu_set(cpu, cpu_sibling_map[cpu]);
461         }
462
463         if (current_cpu_data.x86_num_cores > 1) {
464                 for_each_cpu(i) {
465                         if (phys_proc_id[cpu] == phys_proc_id[i]) {
466                                 cpu_set(i, cpu_core_map[cpu]);
467                                 cpu_set(cpu, cpu_core_map[i]);
468                         }
469                 }
470         } else {
471                 cpu_core_map[cpu] = cpu_sibling_map[cpu];
472         }
473 }
474
475 /*
476  * Setup code on secondary processor (after comming out of the trampoline)
477  */
478 void __cpuinit start_secondary(void)
479 {
480         /*
481          * Dont put anything before smp_callin(), SMP
482          * booting is too fragile that we want to limit the
483          * things done here to the most necessary things.
484          */
485         cpu_init();
486         smp_callin();
487
488         /* otherwise gcc will move up the smp_processor_id before the cpu_init */
489         barrier();
490
491         Dprintk("cpu %d: setting up apic clock\n", smp_processor_id());         
492         setup_secondary_APIC_clock();
493
494         Dprintk("cpu %d: enabling apic timer\n", smp_processor_id());
495
496         if (nmi_watchdog == NMI_IO_APIC) {
497                 disable_8259A_irq(0);
498                 enable_NMI_through_LVT0(NULL);
499                 enable_8259A_irq(0);
500         }
501
502         enable_APIC_timer();
503
504         /*
505          * The sibling maps must be set before turing the online map on for
506          * this cpu
507          */
508         set_cpu_sibling_map(smp_processor_id());
509
510         /*
511          * Allow the master to continue.
512          */
513         cpu_set(smp_processor_id(), cpu_online_map);
514         mb();
515
516         /* Wait for TSC sync to not schedule things before.
517            We still process interrupts, which could see an inconsistent
518            time in that window unfortunately. */
519         tsc_sync_wait();
520
521         cpu_idle();
522 }
523
524 extern volatile unsigned long init_rsp;
525 extern void (*initial_code)(void);
526
527 #if APIC_DEBUG
528 static void inquire_remote_apic(int apicid)
529 {
530         unsigned i, regs[] = { APIC_ID >> 4, APIC_LVR >> 4, APIC_SPIV >> 4 };
531         char *names[] = { "ID", "VERSION", "SPIV" };
532         int timeout, status;
533
534         printk(KERN_INFO "Inquiring remote APIC #%d...\n", apicid);
535
536         for (i = 0; i < sizeof(regs) / sizeof(*regs); i++) {
537                 printk("... APIC #%d %s: ", apicid, names[i]);
538
539                 /*
540                  * Wait for idle.
541                  */
542                 apic_wait_icr_idle();
543
544                 apic_write_around(APIC_ICR2, SET_APIC_DEST_FIELD(apicid));
545                 apic_write_around(APIC_ICR, APIC_DM_REMRD | regs[i]);
546
547                 timeout = 0;
548                 do {
549                         udelay(100);
550                         status = apic_read(APIC_ICR) & APIC_ICR_RR_MASK;
551                 } while (status == APIC_ICR_RR_INPROG && timeout++ < 1000);
552
553                 switch (status) {
554                 case APIC_ICR_RR_VALID:
555                         status = apic_read(APIC_RRR);
556                         printk("%08x\n", status);
557                         break;
558                 default:
559                         printk("failed\n");
560                 }
561         }
562 }
563 #endif
564
565 /*
566  * Kick the secondary to wake up.
567  */
568 static int __cpuinit wakeup_secondary_via_INIT(int phys_apicid, unsigned int start_rip)
569 {
570         unsigned long send_status = 0, accept_status = 0;
571         int maxlvt, timeout, num_starts, j;
572
573         Dprintk("Asserting INIT.\n");
574
575         /*
576          * Turn INIT on target chip
577          */
578         apic_write_around(APIC_ICR2, SET_APIC_DEST_FIELD(phys_apicid));
579
580         /*
581          * Send IPI
582          */
583         apic_write_around(APIC_ICR, APIC_INT_LEVELTRIG | APIC_INT_ASSERT
584                                 | APIC_DM_INIT);
585
586         Dprintk("Waiting for send to finish...\n");
587         timeout = 0;
588         do {
589                 Dprintk("+");
590                 udelay(100);
591                 send_status = apic_read(APIC_ICR) & APIC_ICR_BUSY;
592         } while (send_status && (timeout++ < 1000));
593
594         mdelay(10);
595
596         Dprintk("Deasserting INIT.\n");
597
598         /* Target chip */
599         apic_write_around(APIC_ICR2, SET_APIC_DEST_FIELD(phys_apicid));
600
601         /* Send IPI */
602         apic_write_around(APIC_ICR, APIC_INT_LEVELTRIG | APIC_DM_INIT);
603
604         Dprintk("Waiting for send to finish...\n");
605         timeout = 0;
606         do {
607                 Dprintk("+");
608                 udelay(100);
609                 send_status = apic_read(APIC_ICR) & APIC_ICR_BUSY;
610         } while (send_status && (timeout++ < 1000));
611
612         atomic_set(&init_deasserted, 1);
613
614         /*
615          * Should we send STARTUP IPIs ?
616          *
617          * Determine this based on the APIC version.
618          * If we don't have an integrated APIC, don't send the STARTUP IPIs.
619          */
620         if (APIC_INTEGRATED(apic_version[phys_apicid]))
621                 num_starts = 2;
622         else
623                 num_starts = 0;
624
625         /*
626          * Run STARTUP IPI loop.
627          */
628         Dprintk("#startup loops: %d.\n", num_starts);
629
630         maxlvt = get_maxlvt();
631
632         for (j = 1; j <= num_starts; j++) {
633                 Dprintk("Sending STARTUP #%d.\n",j);
634                 apic_read_around(APIC_SPIV);
635                 apic_write(APIC_ESR, 0);
636                 apic_read(APIC_ESR);
637                 Dprintk("After apic_write.\n");
638
639                 /*
640                  * STARTUP IPI
641                  */
642
643                 /* Target chip */
644                 apic_write_around(APIC_ICR2, SET_APIC_DEST_FIELD(phys_apicid));
645
646                 /* Boot on the stack */
647                 /* Kick the second */
648                 apic_write_around(APIC_ICR, APIC_DM_STARTUP
649                                         | (start_rip >> 12));
650
651                 /*
652                  * Give the other CPU some time to accept the IPI.
653                  */
654                 udelay(300);
655
656                 Dprintk("Startup point 1.\n");
657
658                 Dprintk("Waiting for send to finish...\n");
659                 timeout = 0;
660                 do {
661                         Dprintk("+");
662                         udelay(100);
663                         send_status = apic_read(APIC_ICR) & APIC_ICR_BUSY;
664                 } while (send_status && (timeout++ < 1000));
665
666                 /*
667                  * Give the other CPU some time to accept the IPI.
668                  */
669                 udelay(200);
670                 /*
671                  * Due to the Pentium erratum 3AP.
672                  */
673                 if (maxlvt > 3) {
674                         apic_read_around(APIC_SPIV);
675                         apic_write(APIC_ESR, 0);
676                 }
677                 accept_status = (apic_read(APIC_ESR) & 0xEF);
678                 if (send_status || accept_status)
679                         break;
680         }
681         Dprintk("After Startup.\n");
682
683         if (send_status)
684                 printk(KERN_ERR "APIC never delivered???\n");
685         if (accept_status)
686                 printk(KERN_ERR "APIC delivery error (%lx).\n", accept_status);
687
688         return (send_status | accept_status);
689 }
690
691 struct create_idle {
692         struct task_struct *idle;
693         struct completion done;
694         int cpu;
695 };
696
697 void do_fork_idle(void *_c_idle)
698 {
699         struct create_idle *c_idle = _c_idle;
700
701         c_idle->idle = fork_idle(c_idle->cpu);
702         complete(&c_idle->done);
703 }
704
705 /*
706  * Boot one CPU.
707  */
708 static int __cpuinit do_boot_cpu(int cpu, int apicid)
709 {
710         unsigned long boot_error;
711         int timeout;
712         unsigned long start_rip;
713         struct create_idle c_idle = {
714                 .cpu = cpu,
715                 .done = COMPLETION_INITIALIZER(c_idle.done),
716         };
717         DECLARE_WORK(work, do_fork_idle, &c_idle);
718
719         c_idle.idle = get_idle_for_cpu(cpu);
720
721         if (c_idle.idle) {
722                 c_idle.idle->thread.rsp = (unsigned long) (((struct pt_regs *)
723                         (THREAD_SIZE + (unsigned long) c_idle.idle->thread_info)) - 1);
724                 init_idle(c_idle.idle, cpu);
725                 goto do_rest;
726         }
727
728         /*
729          * During cold boot process, keventd thread is not spun up yet.
730          * When we do cpu hot-add, we create idle threads on the fly, we should
731          * not acquire any attributes from the calling context. Hence the clean
732          * way to create kernel_threads() is to do that from keventd().
733          * We do the current_is_keventd() due to the fact that ACPI notifier
734          * was also queuing to keventd() and when the caller is already running
735          * in context of keventd(), we would end up with locking up the keventd
736          * thread.
737          */
738         if (!keventd_up() || current_is_keventd())
739                 work.func(work.data);
740         else {
741                 schedule_work(&work);
742                 wait_for_completion(&c_idle.done);
743         }
744
745         if (IS_ERR(c_idle.idle)) {
746                 printk("failed fork for CPU %d\n", cpu);
747                 return PTR_ERR(c_idle.idle);
748         }
749
750         set_idle_for_cpu(cpu, c_idle.idle);
751
752 do_rest:
753
754         cpu_pda[cpu].pcurrent = c_idle.idle;
755
756         start_rip = setup_trampoline();
757
758         init_rsp = c_idle.idle->thread.rsp;
759         per_cpu(init_tss,cpu).rsp0 = init_rsp;
760         initial_code = start_secondary;
761         clear_ti_thread_flag(c_idle.idle->thread_info, TIF_FORK);
762
763         printk(KERN_INFO "Booting processor %d/%d rip %lx rsp %lx\n", cpu, apicid,
764                start_rip, init_rsp);
765
766         /*
767          * This grunge runs the startup process for
768          * the targeted processor.
769          */
770
771         atomic_set(&init_deasserted, 0);
772
773         Dprintk("Setting warm reset code and vector.\n");
774
775         CMOS_WRITE(0xa, 0xf);
776         local_flush_tlb();
777         Dprintk("1.\n");
778         *((volatile unsigned short *) phys_to_virt(0x469)) = start_rip >> 4;
779         Dprintk("2.\n");
780         *((volatile unsigned short *) phys_to_virt(0x467)) = start_rip & 0xf;
781         Dprintk("3.\n");
782
783         /*
784          * Be paranoid about clearing APIC errors.
785          */
786         if (APIC_INTEGRATED(apic_version[apicid])) {
787                 apic_read_around(APIC_SPIV);
788                 apic_write(APIC_ESR, 0);
789                 apic_read(APIC_ESR);
790         }
791
792         /*
793          * Status is now clean
794          */
795         boot_error = 0;
796
797         /*
798          * Starting actual IPI sequence...
799          */
800         boot_error = wakeup_secondary_via_INIT(apicid, start_rip);
801
802         if (!boot_error) {
803                 /*
804                  * allow APs to start initializing.
805                  */
806                 Dprintk("Before Callout %d.\n", cpu);
807                 cpu_set(cpu, cpu_callout_map);
808                 Dprintk("After Callout %d.\n", cpu);
809
810                 /*
811                  * Wait 5s total for a response
812                  */
813                 for (timeout = 0; timeout < 50000; timeout++) {
814                         if (cpu_isset(cpu, cpu_callin_map))
815                                 break;  /* It has booted */
816                         udelay(100);
817                 }
818
819                 if (cpu_isset(cpu, cpu_callin_map)) {
820                         /* number CPUs logically, starting from 1 (BSP is 0) */
821                         Dprintk("CPU has booted.\n");
822                 } else {
823                         boot_error = 1;
824                         if (*((volatile unsigned char *)phys_to_virt(SMP_TRAMPOLINE_BASE))
825                                         == 0xA5)
826                                 /* trampoline started but...? */
827                                 printk("Stuck ??\n");
828                         else
829                                 /* trampoline code not run */
830                                 printk("Not responding.\n");
831 #if APIC_DEBUG
832                         inquire_remote_apic(apicid);
833 #endif
834                 }
835         }
836         if (boot_error) {
837                 cpu_clear(cpu, cpu_callout_map); /* was set here (do_boot_cpu()) */
838                 clear_bit(cpu, &cpu_initialized); /* was set by cpu_init() */
839                 cpu_clear(cpu, cpu_present_map);
840                 cpu_clear(cpu, cpu_possible_map);
841                 x86_cpu_to_apicid[cpu] = BAD_APICID;
842                 x86_cpu_to_log_apicid[cpu] = BAD_APICID;
843                 return -EIO;
844         }
845
846         return 0;
847 }
848
849 cycles_t cacheflush_time;
850 unsigned long cache_decay_ticks;
851
852 /*
853  * Cleanup possible dangling ends...
854  */
855 static __cpuinit void smp_cleanup_boot(void)
856 {
857         /*
858          * Paranoid:  Set warm reset code and vector here back
859          * to default values.
860          */
861         CMOS_WRITE(0, 0xf);
862
863         /*
864          * Reset trampoline flag
865          */
866         *((volatile int *) phys_to_virt(0x467)) = 0;
867
868 #ifndef CONFIG_HOTPLUG_CPU
869         /*
870          * Free pages reserved for SMP bootup.
871          * When you add hotplug CPU support later remove this
872          * Note there is more work to be done for later CPU bootup.
873          */
874
875         free_page((unsigned long) __va(PAGE_SIZE));
876         free_page((unsigned long) __va(SMP_TRAMPOLINE_BASE));
877 #endif
878 }
879
880 /*
881  * Fall back to non SMP mode after errors.
882  *
883  * RED-PEN audit/test this more. I bet there is more state messed up here.
884  */
885 static __init void disable_smp(void)
886 {
887         cpu_present_map = cpumask_of_cpu(0);
888         cpu_possible_map = cpumask_of_cpu(0);
889         if (smp_found_config)
890                 phys_cpu_present_map = physid_mask_of_physid(boot_cpu_id);
891         else
892                 phys_cpu_present_map = physid_mask_of_physid(0);
893         cpu_set(0, cpu_sibling_map[0]);
894         cpu_set(0, cpu_core_map[0]);
895 }
896
897 /*
898  * Handle user cpus=... parameter.
899  */
900 static __init void enforce_max_cpus(unsigned max_cpus)
901 {
902         int i, k;
903         k = 0;
904         for (i = 0; i < NR_CPUS; i++) {
905                 if (!cpu_possible(i))
906                         continue;
907                 if (++k > max_cpus) {
908                         cpu_clear(i, cpu_possible_map);
909                         cpu_clear(i, cpu_present_map);
910                 }
911         }
912 }
913
914 /*
915  * Various sanity checks.
916  */
917 static int __init smp_sanity_check(unsigned max_cpus)
918 {
919         if (!physid_isset(hard_smp_processor_id(), phys_cpu_present_map)) {
920                 printk("weird, boot CPU (#%d) not listed by the BIOS.\n",
921                        hard_smp_processor_id());
922                 physid_set(hard_smp_processor_id(), phys_cpu_present_map);
923         }
924
925         /*
926          * If we couldn't find an SMP configuration at boot time,
927          * get out of here now!
928          */
929         if (!smp_found_config) {
930                 printk(KERN_NOTICE "SMP motherboard not detected.\n");
931                 disable_smp();
932                 if (APIC_init_uniprocessor())
933                         printk(KERN_NOTICE "Local APIC not detected."
934                                            " Using dummy APIC emulation.\n");
935                 return -1;
936         }
937
938         /*
939          * Should not be necessary because the MP table should list the boot
940          * CPU too, but we do it for the sake of robustness anyway.
941          */
942         if (!physid_isset(boot_cpu_id, phys_cpu_present_map)) {
943                 printk(KERN_NOTICE "weird, boot CPU (#%d) not listed by the BIOS.\n",
944                                                                  boot_cpu_id);
945                 physid_set(hard_smp_processor_id(), phys_cpu_present_map);
946         }
947
948         /*
949          * If we couldn't find a local APIC, then get out of here now!
950          */
951         if (APIC_INTEGRATED(apic_version[boot_cpu_id]) && !cpu_has_apic) {
952                 printk(KERN_ERR "BIOS bug, local APIC #%d not detected!...\n",
953                         boot_cpu_id);
954                 printk(KERN_ERR "... forcing use of dummy APIC emulation. (tell your hw vendor)\n");
955                 nr_ioapics = 0;
956                 return -1;
957         }
958
959         /*
960          * If SMP should be disabled, then really disable it!
961          */
962         if (!max_cpus) {
963                 printk(KERN_INFO "SMP mode deactivated, forcing use of dummy APIC emulation.\n");
964                 nr_ioapics = 0;
965                 return -1;
966         }
967
968         return 0;
969 }
970
971 /*
972  * Prepare for SMP bootup.  The MP table or ACPI has been read
973  * earlier.  Just do some sanity checking here and enable APIC mode.
974  */
975 void __init smp_prepare_cpus(unsigned int max_cpus)
976 {
977         int i;
978
979         nmi_watchdog_default();
980         current_cpu_data = boot_cpu_data;
981         current_thread_info()->cpu = 0;  /* needed? */
982
983         enforce_max_cpus(max_cpus);
984
985         /*
986          * Fill in cpu_present_mask
987          */
988         for (i = 0; i < NR_CPUS; i++) {
989                 int apicid = cpu_present_to_apicid(i);
990                 if (physid_isset(apicid, phys_cpu_present_map)) {
991                         cpu_set(i, cpu_present_map);
992                         cpu_set(i, cpu_possible_map);
993                 }
994                 fixup_cpu_possible_map(i);
995         }
996
997         if (smp_sanity_check(max_cpus) < 0) {
998                 printk(KERN_INFO "SMP disabled\n");
999                 disable_smp();
1000                 return;
1001         }
1002
1003
1004         /*
1005          * Switch from PIC to APIC mode.
1006          */
1007         connect_bsp_APIC();
1008         setup_local_APIC();
1009
1010         if (GET_APIC_ID(apic_read(APIC_ID)) != boot_cpu_id) {
1011                 panic("Boot APIC ID in local APIC unexpected (%d vs %d)",
1012                       GET_APIC_ID(apic_read(APIC_ID)), boot_cpu_id);
1013                 /* Or can we switch back to PIC here? */
1014         }
1015
1016         /*
1017          * Now start the IO-APICs
1018          */
1019         if (!skip_ioapic_setup && nr_ioapics)
1020                 setup_IO_APIC();
1021         else
1022                 nr_ioapics = 0;
1023
1024         /*
1025          * Set up local APIC timer on boot CPU.
1026          */
1027
1028         setup_boot_APIC_clock();
1029 }
1030
1031 /*
1032  * Early setup to make printk work.
1033  */
1034 void __init smp_prepare_boot_cpu(void)
1035 {
1036         int me = smp_processor_id();
1037         cpu_set(me, cpu_online_map);
1038         cpu_set(me, cpu_callout_map);
1039         cpu_set(0, cpu_sibling_map[0]);
1040         cpu_set(0, cpu_core_map[0]);
1041 }
1042
1043 /*
1044  * Entry point to boot a CPU.
1045  */
1046 int __cpuinit __cpu_up(unsigned int cpu)
1047 {
1048         int err;
1049         int apicid = cpu_present_to_apicid(cpu);
1050
1051         WARN_ON(irqs_disabled());
1052
1053         Dprintk("++++++++++++++++++++=_---CPU UP  %u\n", cpu);
1054
1055         if (apicid == BAD_APICID || apicid == boot_cpu_id ||
1056             !physid_isset(apicid, phys_cpu_present_map)) {
1057                 printk("__cpu_up: bad cpu %d\n", cpu);
1058                 return -EINVAL;
1059         }
1060
1061         /*
1062          * Already booted CPU?
1063          */
1064         if (cpu_isset(cpu, cpu_callin_map)) {
1065                 Dprintk("do_boot_cpu %d Already started\n", cpu);
1066                 return -ENOSYS;
1067         }
1068
1069         /* Boot it! */
1070         err = do_boot_cpu(cpu, apicid);
1071         if (err < 0) {
1072                 Dprintk("do_boot_cpu failed %d\n", err);
1073                 return err;
1074         }
1075
1076         /* Unleash the CPU! */
1077         Dprintk("waiting for cpu %d\n", cpu);
1078
1079         while (!cpu_isset(cpu, cpu_online_map))
1080                 cpu_relax();
1081         err = 0;
1082
1083         return err;
1084 }
1085
1086 /*
1087  * Finish the SMP boot.
1088  */
1089 void __init smp_cpus_done(unsigned int max_cpus)
1090 {
1091 #ifndef CONFIG_HOTPLUG_CPU
1092         zap_low_mappings();
1093 #endif
1094         smp_cleanup_boot();
1095
1096 #ifdef CONFIG_X86_IO_APIC
1097         setup_ioapic_dest();
1098 #endif
1099
1100         time_init_gtod();
1101
1102         check_nmi_watchdog();
1103 }
1104
1105 #ifdef CONFIG_HOTPLUG_CPU
1106
1107 static void remove_siblinginfo(int cpu)
1108 {
1109         int sibling;
1110
1111         for_each_cpu_mask(sibling, cpu_sibling_map[cpu])
1112                 cpu_clear(cpu, cpu_sibling_map[sibling]);
1113         for_each_cpu_mask(sibling, cpu_core_map[cpu])
1114                 cpu_clear(cpu, cpu_core_map[sibling]);
1115         cpus_clear(cpu_sibling_map[cpu]);
1116         cpus_clear(cpu_core_map[cpu]);
1117         phys_proc_id[cpu] = BAD_APICID;
1118         cpu_core_id[cpu] = BAD_APICID;
1119 }
1120
1121 void remove_cpu_from_maps(void)
1122 {
1123         int cpu = smp_processor_id();
1124
1125         cpu_clear(cpu, cpu_callout_map);
1126         cpu_clear(cpu, cpu_callin_map);
1127         clear_bit(cpu, &cpu_initialized); /* was set by cpu_init() */
1128 }
1129
1130 int __cpu_disable(void)
1131 {
1132         int cpu = smp_processor_id();
1133
1134         /*
1135          * Perhaps use cpufreq to drop frequency, but that could go
1136          * into generic code.
1137          *
1138          * We won't take down the boot processor on i386 due to some
1139          * interrupts only being able to be serviced by the BSP.
1140          * Especially so if we're not using an IOAPIC   -zwane
1141          */
1142         if (cpu == 0)
1143                 return -EBUSY;
1144
1145         disable_APIC_timer();
1146
1147         /*
1148          * HACK:
1149          * Allow any queued timer interrupts to get serviced
1150          * This is only a temporary solution until we cleanup
1151          * fixup_irqs as we do for IA64.
1152          */
1153         local_irq_enable();
1154         mdelay(1);
1155
1156         local_irq_disable();
1157         remove_siblinginfo(cpu);
1158
1159         /* It's now safe to remove this processor from the online map */
1160         cpu_clear(cpu, cpu_online_map);
1161         remove_cpu_from_maps();
1162         fixup_irqs(cpu_online_map);
1163         return 0;
1164 }
1165
1166 void __cpu_die(unsigned int cpu)
1167 {
1168         /* We don't do anything here: idle task is faking death itself. */
1169         unsigned int i;
1170
1171         for (i = 0; i < 10; i++) {
1172                 /* They ack this in play_dead by setting CPU_DEAD */
1173                 if (per_cpu(cpu_state, cpu) == CPU_DEAD)
1174                         return;
1175                 current->state = TASK_UNINTERRUPTIBLE;
1176                 schedule_timeout(HZ/10);
1177         }
1178         printk(KERN_ERR "CPU %u didn't die...\n", cpu);
1179 }
1180
1181 #else /* ... !CONFIG_HOTPLUG_CPU */
1182
1183 int __cpu_disable(void)
1184 {
1185         return -ENOSYS;
1186 }
1187
1188 void __cpu_die(unsigned int cpu)
1189 {
1190         /* We said "no" in __cpu_disable */
1191         BUG();
1192 }
1193 #endif /* CONFIG_HOTPLUG_CPU */