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