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