]> git.karo-electronics.de Git - mv-sheeva.git/blob - arch/x86_64/kernel/smpboot.c
[PATCH] x86_64: Fix get_cmos_time()
[mv-sheeva.git] / 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         /* Allocate node local memory for AP pdas */
761         if (cpu_pda(cpu) == &boot_cpu_pda[cpu]) {
762                 struct x8664_pda *newpda, *pda;
763                 int node = cpu_to_node(cpu);
764                 pda = cpu_pda(cpu);
765                 newpda = kmalloc_node(sizeof (struct x8664_pda), GFP_ATOMIC,
766                                       node);
767                 if (newpda) {
768                         memcpy(newpda, pda, sizeof (struct x8664_pda));
769                         cpu_pda(cpu) = newpda;
770                 } else
771                         printk(KERN_ERR
772                 "Could not allocate node local PDA for CPU %d on node %d\n",
773                                 cpu, node);
774         }
775
776
777         c_idle.idle = get_idle_for_cpu(cpu);
778
779         if (c_idle.idle) {
780                 c_idle.idle->thread.rsp = (unsigned long) (((struct pt_regs *)
781                         (THREAD_SIZE + (unsigned long) c_idle.idle->thread_info)) - 1);
782                 init_idle(c_idle.idle, cpu);
783                 goto do_rest;
784         }
785
786         /*
787          * During cold boot process, keventd thread is not spun up yet.
788          * When we do cpu hot-add, we create idle threads on the fly, we should
789          * not acquire any attributes from the calling context. Hence the clean
790          * way to create kernel_threads() is to do that from keventd().
791          * We do the current_is_keventd() due to the fact that ACPI notifier
792          * was also queuing to keventd() and when the caller is already running
793          * in context of keventd(), we would end up with locking up the keventd
794          * thread.
795          */
796         if (!keventd_up() || current_is_keventd())
797                 work.func(work.data);
798         else {
799                 schedule_work(&work);
800                 wait_for_completion(&c_idle.done);
801         }
802
803         if (IS_ERR(c_idle.idle)) {
804                 printk("failed fork for CPU %d\n", cpu);
805                 return PTR_ERR(c_idle.idle);
806         }
807
808         set_idle_for_cpu(cpu, c_idle.idle);
809
810 do_rest:
811
812         cpu_pda(cpu)->pcurrent = c_idle.idle;
813
814         start_rip = setup_trampoline();
815
816         init_rsp = c_idle.idle->thread.rsp;
817         per_cpu(init_tss,cpu).rsp0 = init_rsp;
818         initial_code = start_secondary;
819         clear_ti_thread_flag(c_idle.idle->thread_info, TIF_FORK);
820
821         printk(KERN_INFO "Booting processor %d/%d APIC 0x%x\n", cpu,
822                 cpus_weight(cpu_present_map),
823                 apicid);
824
825         /*
826          * This grunge runs the startup process for
827          * the targeted processor.
828          */
829
830         atomic_set(&init_deasserted, 0);
831
832         Dprintk("Setting warm reset code and vector.\n");
833
834         CMOS_WRITE(0xa, 0xf);
835         local_flush_tlb();
836         Dprintk("1.\n");
837         *((volatile unsigned short *) phys_to_virt(0x469)) = start_rip >> 4;
838         Dprintk("2.\n");
839         *((volatile unsigned short *) phys_to_virt(0x467)) = start_rip & 0xf;
840         Dprintk("3.\n");
841
842         /*
843          * Be paranoid about clearing APIC errors.
844          */
845         if (APIC_INTEGRATED(apic_version[apicid])) {
846                 apic_read_around(APIC_SPIV);
847                 apic_write(APIC_ESR, 0);
848                 apic_read(APIC_ESR);
849         }
850
851         /*
852          * Status is now clean
853          */
854         boot_error = 0;
855
856         /*
857          * Starting actual IPI sequence...
858          */
859         boot_error = wakeup_secondary_via_INIT(apicid, start_rip);
860
861         if (!boot_error) {
862                 /*
863                  * allow APs to start initializing.
864                  */
865                 Dprintk("Before Callout %d.\n", cpu);
866                 cpu_set(cpu, cpu_callout_map);
867                 Dprintk("After Callout %d.\n", cpu);
868
869                 /*
870                  * Wait 5s total for a response
871                  */
872                 for (timeout = 0; timeout < 50000; timeout++) {
873                         if (cpu_isset(cpu, cpu_callin_map))
874                                 break;  /* It has booted */
875                         udelay(100);
876                 }
877
878                 if (cpu_isset(cpu, cpu_callin_map)) {
879                         /* number CPUs logically, starting from 1 (BSP is 0) */
880                         Dprintk("CPU has booted.\n");
881                 } else {
882                         boot_error = 1;
883                         if (*((volatile unsigned char *)phys_to_virt(SMP_TRAMPOLINE_BASE))
884                                         == 0xA5)
885                                 /* trampoline started but...? */
886                                 printk("Stuck ??\n");
887                         else
888                                 /* trampoline code not run */
889                                 printk("Not responding.\n");
890 #ifdef APIC_DEBUG
891                         inquire_remote_apic(apicid);
892 #endif
893                 }
894         }
895         if (boot_error) {
896                 cpu_clear(cpu, cpu_callout_map); /* was set here (do_boot_cpu()) */
897                 clear_bit(cpu, &cpu_initialized); /* was set by cpu_init() */
898                 cpu_clear(cpu, cpu_present_map);
899                 cpu_clear(cpu, cpu_possible_map);
900                 x86_cpu_to_apicid[cpu] = BAD_APICID;
901                 x86_cpu_to_log_apicid[cpu] = BAD_APICID;
902                 return -EIO;
903         }
904
905         return 0;
906 }
907
908 cycles_t cacheflush_time;
909 unsigned long cache_decay_ticks;
910
911 /*
912  * Cleanup possible dangling ends...
913  */
914 static __cpuinit void smp_cleanup_boot(void)
915 {
916         /*
917          * Paranoid:  Set warm reset code and vector here back
918          * to default values.
919          */
920         CMOS_WRITE(0, 0xf);
921
922         /*
923          * Reset trampoline flag
924          */
925         *((volatile int *) phys_to_virt(0x467)) = 0;
926 }
927
928 /*
929  * Fall back to non SMP mode after errors.
930  *
931  * RED-PEN audit/test this more. I bet there is more state messed up here.
932  */
933 static __init void disable_smp(void)
934 {
935         cpu_present_map = cpumask_of_cpu(0);
936         cpu_possible_map = cpumask_of_cpu(0);
937         if (smp_found_config)
938                 phys_cpu_present_map = physid_mask_of_physid(boot_cpu_id);
939         else
940                 phys_cpu_present_map = physid_mask_of_physid(0);
941         cpu_set(0, cpu_sibling_map[0]);
942         cpu_set(0, cpu_core_map[0]);
943 }
944
945 #ifdef CONFIG_HOTPLUG_CPU
946
947 int additional_cpus __initdata = -1;
948
949 /*
950  * cpu_possible_map should be static, it cannot change as cpu's
951  * are onlined, or offlined. The reason is per-cpu data-structures
952  * are allocated by some modules at init time, and dont expect to
953  * do this dynamically on cpu arrival/departure.
954  * cpu_present_map on the other hand can change dynamically.
955  * In case when cpu_hotplug is not compiled, then we resort to current
956  * behaviour, which is cpu_possible == cpu_present.
957  * - Ashok Raj
958  *
959  * Three ways to find out the number of additional hotplug CPUs:
960  * - If the BIOS specified disabled CPUs in ACPI/mptables use that.
961  * - The user can overwrite it with additional_cpus=NUM
962  * - Otherwise don't reserve additional CPUs.
963  * We do this because additional CPUs waste a lot of memory.
964  * -AK
965  */
966 __init void prefill_possible_map(void)
967 {
968         int i;
969         int possible;
970
971         if (additional_cpus == -1) {
972                 if (disabled_cpus > 0)
973                         additional_cpus = disabled_cpus;
974                 else
975                         additional_cpus = 0;
976         }
977         possible = num_processors + additional_cpus;
978         if (possible > NR_CPUS) 
979                 possible = NR_CPUS;
980
981         printk(KERN_INFO "SMP: Allowing %d CPUs, %d hotplug CPUs\n",
982                 possible,
983                 max_t(int, possible - num_processors, 0));
984
985         for (i = 0; i < possible; i++)
986                 cpu_set(i, cpu_possible_map);
987 }
988 #endif
989
990 /*
991  * Various sanity checks.
992  */
993 static int __init smp_sanity_check(unsigned max_cpus)
994 {
995         if (!physid_isset(hard_smp_processor_id(), phys_cpu_present_map)) {
996                 printk("weird, boot CPU (#%d) not listed by the BIOS.\n",
997                        hard_smp_processor_id());
998                 physid_set(hard_smp_processor_id(), phys_cpu_present_map);
999         }
1000
1001         /*
1002          * If we couldn't find an SMP configuration at boot time,
1003          * get out of here now!
1004          */
1005         if (!smp_found_config) {
1006                 printk(KERN_NOTICE "SMP motherboard not detected.\n");
1007                 disable_smp();
1008                 if (APIC_init_uniprocessor())
1009                         printk(KERN_NOTICE "Local APIC not detected."
1010                                            " Using dummy APIC emulation.\n");
1011                 return -1;
1012         }
1013
1014         /*
1015          * Should not be necessary because the MP table should list the boot
1016          * CPU too, but we do it for the sake of robustness anyway.
1017          */
1018         if (!physid_isset(boot_cpu_id, phys_cpu_present_map)) {
1019                 printk(KERN_NOTICE "weird, boot CPU (#%d) not listed by the BIOS.\n",
1020                                                                  boot_cpu_id);
1021                 physid_set(hard_smp_processor_id(), phys_cpu_present_map);
1022         }
1023
1024         /*
1025          * If we couldn't find a local APIC, then get out of here now!
1026          */
1027         if (APIC_INTEGRATED(apic_version[boot_cpu_id]) && !cpu_has_apic) {
1028                 printk(KERN_ERR "BIOS bug, local APIC #%d not detected!...\n",
1029                         boot_cpu_id);
1030                 printk(KERN_ERR "... forcing use of dummy APIC emulation. (tell your hw vendor)\n");
1031                 nr_ioapics = 0;
1032                 return -1;
1033         }
1034
1035         /*
1036          * If SMP should be disabled, then really disable it!
1037          */
1038         if (!max_cpus) {
1039                 printk(KERN_INFO "SMP mode deactivated, forcing use of dummy APIC emulation.\n");
1040                 nr_ioapics = 0;
1041                 return -1;
1042         }
1043
1044         return 0;
1045 }
1046
1047 /*
1048  * Prepare for SMP bootup.  The MP table or ACPI has been read
1049  * earlier.  Just do some sanity checking here and enable APIC mode.
1050  */
1051 void __init smp_prepare_cpus(unsigned int max_cpus)
1052 {
1053         nmi_watchdog_default();
1054         current_cpu_data = boot_cpu_data;
1055         current_thread_info()->cpu = 0;  /* needed? */
1056         set_cpu_sibling_map(0);
1057
1058         if (smp_sanity_check(max_cpus) < 0) {
1059                 printk(KERN_INFO "SMP disabled\n");
1060                 disable_smp();
1061                 return;
1062         }
1063
1064
1065         /*
1066          * Switch from PIC to APIC mode.
1067          */
1068         connect_bsp_APIC();
1069         setup_local_APIC();
1070
1071         if (GET_APIC_ID(apic_read(APIC_ID)) != boot_cpu_id) {
1072                 panic("Boot APIC ID in local APIC unexpected (%d vs %d)",
1073                       GET_APIC_ID(apic_read(APIC_ID)), boot_cpu_id);
1074                 /* Or can we switch back to PIC here? */
1075         }
1076
1077         /*
1078          * Now start the IO-APICs
1079          */
1080         if (!skip_ioapic_setup && nr_ioapics)
1081                 setup_IO_APIC();
1082         else
1083                 nr_ioapics = 0;
1084
1085         /*
1086          * Set up local APIC timer on boot CPU.
1087          */
1088
1089         setup_boot_APIC_clock();
1090 }
1091
1092 /*
1093  * Early setup to make printk work.
1094  */
1095 void __init smp_prepare_boot_cpu(void)
1096 {
1097         int me = smp_processor_id();
1098         cpu_set(me, cpu_online_map);
1099         cpu_set(me, cpu_callout_map);
1100         per_cpu(cpu_state, me) = CPU_ONLINE;
1101 }
1102
1103 /*
1104  * Entry point to boot a CPU.
1105  */
1106 int __cpuinit __cpu_up(unsigned int cpu)
1107 {
1108         int err;
1109         int apicid = cpu_present_to_apicid(cpu);
1110
1111         WARN_ON(irqs_disabled());
1112
1113         Dprintk("++++++++++++++++++++=_---CPU UP  %u\n", cpu);
1114
1115         if (apicid == BAD_APICID || apicid == boot_cpu_id ||
1116             !physid_isset(apicid, phys_cpu_present_map)) {
1117                 printk("__cpu_up: bad cpu %d\n", cpu);
1118                 return -EINVAL;
1119         }
1120
1121         /*
1122          * Already booted CPU?
1123          */
1124         if (cpu_isset(cpu, cpu_callin_map)) {
1125                 Dprintk("do_boot_cpu %d Already started\n", cpu);
1126                 return -ENOSYS;
1127         }
1128
1129         per_cpu(cpu_state, cpu) = CPU_UP_PREPARE;
1130         /* Boot it! */
1131         err = do_boot_cpu(cpu, apicid);
1132         if (err < 0) {
1133                 Dprintk("do_boot_cpu failed %d\n", err);
1134                 return err;
1135         }
1136
1137         /* Unleash the CPU! */
1138         Dprintk("waiting for cpu %d\n", cpu);
1139
1140         while (!cpu_isset(cpu, cpu_online_map))
1141                 cpu_relax();
1142         err = 0;
1143
1144         return err;
1145 }
1146
1147 /*
1148  * Finish the SMP boot.
1149  */
1150 void __init smp_cpus_done(unsigned int max_cpus)
1151 {
1152         smp_cleanup_boot();
1153
1154 #ifdef CONFIG_X86_IO_APIC
1155         setup_ioapic_dest();
1156 #endif
1157
1158         time_init_gtod();
1159
1160         check_nmi_watchdog();
1161 }
1162
1163 #ifdef CONFIG_HOTPLUG_CPU
1164
1165 static void remove_siblinginfo(int cpu)
1166 {
1167         int sibling;
1168         struct cpuinfo_x86 *c = cpu_data;
1169
1170         for_each_cpu_mask(sibling, cpu_core_map[cpu]) {
1171                 cpu_clear(cpu, cpu_core_map[sibling]);
1172                 /*
1173                  * last thread sibling in this cpu core going down
1174                  */
1175                 if (cpus_weight(cpu_sibling_map[cpu]) == 1)
1176                         c[sibling].booted_cores--;
1177         }
1178                         
1179         for_each_cpu_mask(sibling, cpu_sibling_map[cpu])
1180                 cpu_clear(cpu, cpu_sibling_map[sibling]);
1181         cpus_clear(cpu_sibling_map[cpu]);
1182         cpus_clear(cpu_core_map[cpu]);
1183         phys_proc_id[cpu] = BAD_APICID;
1184         cpu_core_id[cpu] = BAD_APICID;
1185         cpu_clear(cpu, cpu_sibling_setup_map);
1186 }
1187
1188 void remove_cpu_from_maps(void)
1189 {
1190         int cpu = smp_processor_id();
1191
1192         cpu_clear(cpu, cpu_callout_map);
1193         cpu_clear(cpu, cpu_callin_map);
1194         clear_bit(cpu, &cpu_initialized); /* was set by cpu_init() */
1195 }
1196
1197 int __cpu_disable(void)
1198 {
1199         int cpu = smp_processor_id();
1200
1201         /*
1202          * Perhaps use cpufreq to drop frequency, but that could go
1203          * into generic code.
1204          *
1205          * We won't take down the boot processor on i386 due to some
1206          * interrupts only being able to be serviced by the BSP.
1207          * Especially so if we're not using an IOAPIC   -zwane
1208          */
1209         if (cpu == 0)
1210                 return -EBUSY;
1211
1212         clear_local_APIC();
1213
1214         /*
1215          * HACK:
1216          * Allow any queued timer interrupts to get serviced
1217          * This is only a temporary solution until we cleanup
1218          * fixup_irqs as we do for IA64.
1219          */
1220         local_irq_enable();
1221         mdelay(1);
1222
1223         local_irq_disable();
1224         remove_siblinginfo(cpu);
1225
1226         /* It's now safe to remove this processor from the online map */
1227         cpu_clear(cpu, cpu_online_map);
1228         remove_cpu_from_maps();
1229         fixup_irqs(cpu_online_map);
1230         return 0;
1231 }
1232
1233 void __cpu_die(unsigned int cpu)
1234 {
1235         /* We don't do anything here: idle task is faking death itself. */
1236         unsigned int i;
1237
1238         for (i = 0; i < 10; i++) {
1239                 /* They ack this in play_dead by setting CPU_DEAD */
1240                 if (per_cpu(cpu_state, cpu) == CPU_DEAD) {
1241                         printk ("CPU %d is now offline\n", cpu);
1242                         return;
1243                 }
1244                 msleep(100);
1245         }
1246         printk(KERN_ERR "CPU %u didn't die...\n", cpu);
1247 }
1248
1249 static __init int setup_additional_cpus(char *s)
1250 {
1251         return get_option(&s, &additional_cpus);
1252 }
1253 __setup("additional_cpus=", setup_additional_cpus);
1254
1255 #else /* ... !CONFIG_HOTPLUG_CPU */
1256
1257 int __cpu_disable(void)
1258 {
1259         return -ENOSYS;
1260 }
1261
1262 void __cpu_die(unsigned int cpu)
1263 {
1264         /* We said "no" in __cpu_disable */
1265         BUG();
1266 }
1267 #endif /* CONFIG_HOTPLUG_CPU */