Merge branch 'linus' into timers/core
[pandora-kernel.git] / arch / x86 / kernel / apic / apic.c
1 /*
2  *      Local APIC handling, local APIC timers
3  *
4  *      (c) 1999, 2000, 2009 Ingo Molnar <mingo@redhat.com>
5  *
6  *      Fixes
7  *      Maciej W. Rozycki       :       Bits for genuine 82489DX APICs;
8  *                                      thanks to Eric Gilmore
9  *                                      and Rolf G. Tews
10  *                                      for testing these extensively.
11  *      Maciej W. Rozycki       :       Various updates and fixes.
12  *      Mikael Pettersson       :       Power Management for UP-APIC.
13  *      Pavel Machek and
14  *      Mikael Pettersson       :       PM converted to driver model.
15  */
16
17 #include <linux/perf_event.h>
18 #include <linux/kernel_stat.h>
19 #include <linux/mc146818rtc.h>
20 #include <linux/acpi_pmtmr.h>
21 #include <linux/clockchips.h>
22 #include <linux/interrupt.h>
23 #include <linux/bootmem.h>
24 #include <linux/ftrace.h>
25 #include <linux/ioport.h>
26 #include <linux/module.h>
27 #include <linux/sysdev.h>
28 #include <linux/delay.h>
29 #include <linux/timex.h>
30 #include <linux/dmar.h>
31 #include <linux/init.h>
32 #include <linux/cpu.h>
33 #include <linux/dmi.h>
34 #include <linux/nmi.h>
35 #include <linux/smp.h>
36 #include <linux/mm.h>
37
38 #include <asm/perf_event.h>
39 #include <asm/x86_init.h>
40 #include <asm/pgalloc.h>
41 #include <asm/atomic.h>
42 #include <asm/mpspec.h>
43 #include <asm/i8253.h>
44 #include <asm/i8259.h>
45 #include <asm/proto.h>
46 #include <asm/apic.h>
47 #include <asm/desc.h>
48 #include <asm/hpet.h>
49 #include <asm/idle.h>
50 #include <asm/mtrr.h>
51 #include <asm/smp.h>
52 #include <asm/mce.h>
53 #include <asm/kvm_para.h>
54
55 unsigned int num_processors;
56
57 unsigned disabled_cpus __cpuinitdata;
58
59 /* Processor that is doing the boot up */
60 unsigned int boot_cpu_physical_apicid = -1U;
61
62 /*
63  * The highest APIC ID seen during enumeration.
64  */
65 unsigned int max_physical_apicid;
66
67 /*
68  * Bitmask of physically existing CPUs:
69  */
70 physid_mask_t phys_cpu_present_map;
71
72 /*
73  * Map cpu index to physical APIC ID
74  */
75 DEFINE_EARLY_PER_CPU(u16, x86_cpu_to_apicid, BAD_APICID);
76 DEFINE_EARLY_PER_CPU(u16, x86_bios_cpu_apicid, BAD_APICID);
77 EXPORT_EARLY_PER_CPU_SYMBOL(x86_cpu_to_apicid);
78 EXPORT_EARLY_PER_CPU_SYMBOL(x86_bios_cpu_apicid);
79
80 #ifdef CONFIG_X86_32
81 /*
82  * Knob to control our willingness to enable the local APIC.
83  *
84  * +1=force-enable
85  */
86 static int force_enable_local_apic;
87 /*
88  * APIC command line parameters
89  */
90 static int __init parse_lapic(char *arg)
91 {
92         force_enable_local_apic = 1;
93         return 0;
94 }
95 early_param("lapic", parse_lapic);
96 /* Local APIC was disabled by the BIOS and enabled by the kernel */
97 static int enabled_via_apicbase;
98
99 /*
100  * Handle interrupt mode configuration register (IMCR).
101  * This register controls whether the interrupt signals
102  * that reach the BSP come from the master PIC or from the
103  * local APIC. Before entering Symmetric I/O Mode, either
104  * the BIOS or the operating system must switch out of
105  * PIC Mode by changing the IMCR.
106  */
107 static inline void imcr_pic_to_apic(void)
108 {
109         /* select IMCR register */
110         outb(0x70, 0x22);
111         /* NMI and 8259 INTR go through APIC */
112         outb(0x01, 0x23);
113 }
114
115 static inline void imcr_apic_to_pic(void)
116 {
117         /* select IMCR register */
118         outb(0x70, 0x22);
119         /* NMI and 8259 INTR go directly to BSP */
120         outb(0x00, 0x23);
121 }
122 #endif
123
124 #ifdef CONFIG_X86_64
125 static int apic_calibrate_pmtmr __initdata;
126 static __init int setup_apicpmtimer(char *s)
127 {
128         apic_calibrate_pmtmr = 1;
129         notsc_setup(NULL);
130         return 0;
131 }
132 __setup("apicpmtimer", setup_apicpmtimer);
133 #endif
134
135 int x2apic_mode;
136 #ifdef CONFIG_X86_X2APIC
137 /* x2apic enabled before OS handover */
138 static int x2apic_preenabled;
139 static __init int setup_nox2apic(char *str)
140 {
141         if (x2apic_enabled()) {
142                 pr_warning("Bios already enabled x2apic, "
143                            "can't enforce nox2apic");
144                 return 0;
145         }
146
147         setup_clear_cpu_cap(X86_FEATURE_X2APIC);
148         return 0;
149 }
150 early_param("nox2apic", setup_nox2apic);
151 #endif
152
153 unsigned long mp_lapic_addr;
154 int disable_apic;
155 /* Disable local APIC timer from the kernel commandline or via dmi quirk */
156 static int disable_apic_timer __cpuinitdata;
157 /* Local APIC timer works in C2 */
158 int local_apic_timer_c2_ok;
159 EXPORT_SYMBOL_GPL(local_apic_timer_c2_ok);
160
161 int first_system_vector = 0xfe;
162
163 /*
164  * Debug level, exported for io_apic.c
165  */
166 unsigned int apic_verbosity;
167
168 int pic_mode;
169
170 /* Have we found an MP table */
171 int smp_found_config;
172
173 static struct resource lapic_resource = {
174         .name = "Local APIC",
175         .flags = IORESOURCE_MEM | IORESOURCE_BUSY,
176 };
177
178 static unsigned int calibration_result;
179
180 static int lapic_next_event(unsigned long delta,
181                             struct clock_event_device *evt);
182 static void lapic_timer_setup(enum clock_event_mode mode,
183                               struct clock_event_device *evt);
184 static void lapic_timer_broadcast(const struct cpumask *mask);
185 static void apic_pm_activate(void);
186
187 /*
188  * The local apic timer can be used for any function which is CPU local.
189  */
190 static struct clock_event_device lapic_clockevent = {
191         .name           = "lapic",
192         .features       = CLOCK_EVT_FEAT_PERIODIC | CLOCK_EVT_FEAT_ONESHOT
193                         | CLOCK_EVT_FEAT_C3STOP | CLOCK_EVT_FEAT_DUMMY,
194         .shift          = 32,
195         .set_mode       = lapic_timer_setup,
196         .set_next_event = lapic_next_event,
197         .broadcast      = lapic_timer_broadcast,
198         .rating         = 100,
199         .irq            = -1,
200 };
201 static DEFINE_PER_CPU(struct clock_event_device, lapic_events);
202
203 static unsigned long apic_phys;
204
205 /*
206  * Get the LAPIC version
207  */
208 static inline int lapic_get_version(void)
209 {
210         return GET_APIC_VERSION(apic_read(APIC_LVR));
211 }
212
213 /*
214  * Check, if the APIC is integrated or a separate chip
215  */
216 static inline int lapic_is_integrated(void)
217 {
218 #ifdef CONFIG_X86_64
219         return 1;
220 #else
221         return APIC_INTEGRATED(lapic_get_version());
222 #endif
223 }
224
225 /*
226  * Check, whether this is a modern or a first generation APIC
227  */
228 static int modern_apic(void)
229 {
230         /* AMD systems use old APIC versions, so check the CPU */
231         if (boot_cpu_data.x86_vendor == X86_VENDOR_AMD &&
232             boot_cpu_data.x86 >= 0xf)
233                 return 1;
234         return lapic_get_version() >= 0x14;
235 }
236
237 /*
238  * right after this call apic become NOOP driven
239  * so apic->write/read doesn't do anything
240  */
241 void apic_disable(void)
242 {
243         pr_info("APIC: switched to apic NOOP\n");
244         apic = &apic_noop;
245 }
246
247 void native_apic_wait_icr_idle(void)
248 {
249         while (apic_read(APIC_ICR) & APIC_ICR_BUSY)
250                 cpu_relax();
251 }
252
253 u32 native_safe_apic_wait_icr_idle(void)
254 {
255         u32 send_status;
256         int timeout;
257
258         timeout = 0;
259         do {
260                 send_status = apic_read(APIC_ICR) & APIC_ICR_BUSY;
261                 if (!send_status)
262                         break;
263                 udelay(100);
264         } while (timeout++ < 1000);
265
266         return send_status;
267 }
268
269 void native_apic_icr_write(u32 low, u32 id)
270 {
271         apic_write(APIC_ICR2, SET_APIC_DEST_FIELD(id));
272         apic_write(APIC_ICR, low);
273 }
274
275 u64 native_apic_icr_read(void)
276 {
277         u32 icr1, icr2;
278
279         icr2 = apic_read(APIC_ICR2);
280         icr1 = apic_read(APIC_ICR);
281
282         return icr1 | ((u64)icr2 << 32);
283 }
284
285 /**
286  * enable_NMI_through_LVT0 - enable NMI through local vector table 0
287  */
288 void __cpuinit enable_NMI_through_LVT0(void)
289 {
290         unsigned int v;
291
292         /* unmask and set to NMI */
293         v = APIC_DM_NMI;
294
295         /* Level triggered for 82489DX (32bit mode) */
296         if (!lapic_is_integrated())
297                 v |= APIC_LVT_LEVEL_TRIGGER;
298
299         apic_write(APIC_LVT0, v);
300 }
301
302 #ifdef CONFIG_X86_32
303 /**
304  * get_physical_broadcast - Get number of physical broadcast IDs
305  */
306 int get_physical_broadcast(void)
307 {
308         return modern_apic() ? 0xff : 0xf;
309 }
310 #endif
311
312 /**
313  * lapic_get_maxlvt - get the maximum number of local vector table entries
314  */
315 int lapic_get_maxlvt(void)
316 {
317         unsigned int v;
318
319         v = apic_read(APIC_LVR);
320         /*
321          * - we always have APIC integrated on 64bit mode
322          * - 82489DXs do not report # of LVT entries
323          */
324         return APIC_INTEGRATED(GET_APIC_VERSION(v)) ? GET_APIC_MAXLVT(v) : 2;
325 }
326
327 /*
328  * Local APIC timer
329  */
330
331 /* Clock divisor */
332 #define APIC_DIVISOR 16
333
334 /*
335  * This function sets up the local APIC timer, with a timeout of
336  * 'clocks' APIC bus clock. During calibration we actually call
337  * this function twice on the boot CPU, once with a bogus timeout
338  * value, second time for real. The other (noncalibrating) CPUs
339  * call this function only once, with the real, calibrated value.
340  *
341  * We do reads before writes even if unnecessary, to get around the
342  * P5 APIC double write bug.
343  */
344 static void __setup_APIC_LVTT(unsigned int clocks, int oneshot, int irqen)
345 {
346         unsigned int lvtt_value, tmp_value;
347
348         lvtt_value = LOCAL_TIMER_VECTOR;
349         if (!oneshot)
350                 lvtt_value |= APIC_LVT_TIMER_PERIODIC;
351         if (!lapic_is_integrated())
352                 lvtt_value |= SET_APIC_TIMER_BASE(APIC_TIMER_BASE_DIV);
353
354         if (!irqen)
355                 lvtt_value |= APIC_LVT_MASKED;
356
357         apic_write(APIC_LVTT, lvtt_value);
358
359         /*
360          * Divide PICLK by 16
361          */
362         tmp_value = apic_read(APIC_TDCR);
363         apic_write(APIC_TDCR,
364                 (tmp_value & ~(APIC_TDR_DIV_1 | APIC_TDR_DIV_TMBASE)) |
365                 APIC_TDR_DIV_16);
366
367         if (!oneshot)
368                 apic_write(APIC_TMICT, clocks / APIC_DIVISOR);
369 }
370
371 /*
372  * Setup extended LVT, AMD specific (K8, family 10h)
373  *
374  * Vector mappings are hard coded. On K8 only offset 0 (APIC500) and
375  * MCE interrupts are supported. Thus MCE offset must be set to 0.
376  *
377  * If mask=1, the LVT entry does not generate interrupts while mask=0
378  * enables the vector. See also the BKDGs.
379  */
380
381 #define APIC_EILVT_LVTOFF_MCE 0
382 #define APIC_EILVT_LVTOFF_IBS 1
383
384 static void setup_APIC_eilvt(u8 lvt_off, u8 vector, u8 msg_type, u8 mask)
385 {
386         unsigned long reg = (lvt_off << 4) + APIC_EILVTn(0);
387         unsigned int  v   = (mask << 16) | (msg_type << 8) | vector;
388
389         apic_write(reg, v);
390 }
391
392 u8 setup_APIC_eilvt_mce(u8 vector, u8 msg_type, u8 mask)
393 {
394         setup_APIC_eilvt(APIC_EILVT_LVTOFF_MCE, vector, msg_type, mask);
395         return APIC_EILVT_LVTOFF_MCE;
396 }
397
398 u8 setup_APIC_eilvt_ibs(u8 vector, u8 msg_type, u8 mask)
399 {
400         setup_APIC_eilvt(APIC_EILVT_LVTOFF_IBS, vector, msg_type, mask);
401         return APIC_EILVT_LVTOFF_IBS;
402 }
403 EXPORT_SYMBOL_GPL(setup_APIC_eilvt_ibs);
404
405 /*
406  * Program the next event, relative to now
407  */
408 static int lapic_next_event(unsigned long delta,
409                             struct clock_event_device *evt)
410 {
411         apic_write(APIC_TMICT, delta);
412         return 0;
413 }
414
415 /*
416  * Setup the lapic timer in periodic or oneshot mode
417  */
418 static void lapic_timer_setup(enum clock_event_mode mode,
419                               struct clock_event_device *evt)
420 {
421         unsigned long flags;
422         unsigned int v;
423
424         /* Lapic used as dummy for broadcast ? */
425         if (evt->features & CLOCK_EVT_FEAT_DUMMY)
426                 return;
427
428         local_irq_save(flags);
429
430         switch (mode) {
431         case CLOCK_EVT_MODE_PERIODIC:
432         case CLOCK_EVT_MODE_ONESHOT:
433                 __setup_APIC_LVTT(calibration_result,
434                                   mode != CLOCK_EVT_MODE_PERIODIC, 1);
435                 break;
436         case CLOCK_EVT_MODE_UNUSED:
437         case CLOCK_EVT_MODE_SHUTDOWN:
438                 v = apic_read(APIC_LVTT);
439                 v |= (APIC_LVT_MASKED | LOCAL_TIMER_VECTOR);
440                 apic_write(APIC_LVTT, v);
441                 apic_write(APIC_TMICT, 0);
442                 break;
443         case CLOCK_EVT_MODE_RESUME:
444                 /* Nothing to do here */
445                 break;
446         }
447
448         local_irq_restore(flags);
449 }
450
451 /*
452  * Local APIC timer broadcast function
453  */
454 static void lapic_timer_broadcast(const struct cpumask *mask)
455 {
456 #ifdef CONFIG_SMP
457         apic->send_IPI_mask(mask, LOCAL_TIMER_VECTOR);
458 #endif
459 }
460
461 /*
462  * Setup the local APIC timer for this CPU. Copy the initilized values
463  * of the boot CPU and register the clock event in the framework.
464  */
465 static void __cpuinit setup_APIC_timer(void)
466 {
467         struct clock_event_device *levt = &__get_cpu_var(lapic_events);
468
469         if (cpu_has(&current_cpu_data, X86_FEATURE_ARAT)) {
470                 lapic_clockevent.features &= ~CLOCK_EVT_FEAT_C3STOP;
471                 /* Make LAPIC timer preferrable over percpu HPET */
472                 lapic_clockevent.rating = 150;
473         }
474
475         memcpy(levt, &lapic_clockevent, sizeof(*levt));
476         levt->cpumask = cpumask_of(smp_processor_id());
477
478         clockevents_register_device(levt);
479 }
480
481 /*
482  * In this functions we calibrate APIC bus clocks to the external timer.
483  *
484  * We want to do the calibration only once since we want to have local timer
485  * irqs syncron. CPUs connected by the same APIC bus have the very same bus
486  * frequency.
487  *
488  * This was previously done by reading the PIT/HPET and waiting for a wrap
489  * around to find out, that a tick has elapsed. I have a box, where the PIT
490  * readout is broken, so it never gets out of the wait loop again. This was
491  * also reported by others.
492  *
493  * Monitoring the jiffies value is inaccurate and the clockevents
494  * infrastructure allows us to do a simple substitution of the interrupt
495  * handler.
496  *
497  * The calibration routine also uses the pm_timer when possible, as the PIT
498  * happens to run way too slow (factor 2.3 on my VAIO CoreDuo, which goes
499  * back to normal later in the boot process).
500  */
501
502 #define LAPIC_CAL_LOOPS         (HZ/10)
503
504 static __initdata int lapic_cal_loops = -1;
505 static __initdata long lapic_cal_t1, lapic_cal_t2;
506 static __initdata unsigned long long lapic_cal_tsc1, lapic_cal_tsc2;
507 static __initdata unsigned long lapic_cal_pm1, lapic_cal_pm2;
508 static __initdata unsigned long lapic_cal_j1, lapic_cal_j2;
509
510 /*
511  * Temporary interrupt handler.
512  */
513 static void __init lapic_cal_handler(struct clock_event_device *dev)
514 {
515         unsigned long long tsc = 0;
516         long tapic = apic_read(APIC_TMCCT);
517         unsigned long pm = acpi_pm_read_early();
518
519         if (cpu_has_tsc)
520                 rdtscll(tsc);
521
522         switch (lapic_cal_loops++) {
523         case 0:
524                 lapic_cal_t1 = tapic;
525                 lapic_cal_tsc1 = tsc;
526                 lapic_cal_pm1 = pm;
527                 lapic_cal_j1 = jiffies;
528                 break;
529
530         case LAPIC_CAL_LOOPS:
531                 lapic_cal_t2 = tapic;
532                 lapic_cal_tsc2 = tsc;
533                 if (pm < lapic_cal_pm1)
534                         pm += ACPI_PM_OVRRUN;
535                 lapic_cal_pm2 = pm;
536                 lapic_cal_j2 = jiffies;
537                 break;
538         }
539 }
540
541 static int __init
542 calibrate_by_pmtimer(long deltapm, long *delta, long *deltatsc)
543 {
544         const long pm_100ms = PMTMR_TICKS_PER_SEC / 10;
545         const long pm_thresh = pm_100ms / 100;
546         unsigned long mult;
547         u64 res;
548
549 #ifndef CONFIG_X86_PM_TIMER
550         return -1;
551 #endif
552
553         apic_printk(APIC_VERBOSE, "... PM-Timer delta = %ld\n", deltapm);
554
555         /* Check, if the PM timer is available */
556         if (!deltapm)
557                 return -1;
558
559         mult = clocksource_hz2mult(PMTMR_TICKS_PER_SEC, 22);
560
561         if (deltapm > (pm_100ms - pm_thresh) &&
562             deltapm < (pm_100ms + pm_thresh)) {
563                 apic_printk(APIC_VERBOSE, "... PM-Timer result ok\n");
564                 return 0;
565         }
566
567         res = (((u64)deltapm) *  mult) >> 22;
568         do_div(res, 1000000);
569         pr_warning("APIC calibration not consistent "
570                    "with PM-Timer: %ldms instead of 100ms\n",(long)res);
571
572         /* Correct the lapic counter value */
573         res = (((u64)(*delta)) * pm_100ms);
574         do_div(res, deltapm);
575         pr_info("APIC delta adjusted to PM-Timer: "
576                 "%lu (%ld)\n", (unsigned long)res, *delta);
577         *delta = (long)res;
578
579         /* Correct the tsc counter value */
580         if (cpu_has_tsc) {
581                 res = (((u64)(*deltatsc)) * pm_100ms);
582                 do_div(res, deltapm);
583                 apic_printk(APIC_VERBOSE, "TSC delta adjusted to "
584                                           "PM-Timer: %lu (%ld)\n",
585                                         (unsigned long)res, *deltatsc);
586                 *deltatsc = (long)res;
587         }
588
589         return 0;
590 }
591
592 static int __init calibrate_APIC_clock(void)
593 {
594         struct clock_event_device *levt = &__get_cpu_var(lapic_events);
595         void (*real_handler)(struct clock_event_device *dev);
596         unsigned long deltaj;
597         long delta, deltatsc;
598         int pm_referenced = 0;
599
600         local_irq_disable();
601
602         /* Replace the global interrupt handler */
603         real_handler = global_clock_event->event_handler;
604         global_clock_event->event_handler = lapic_cal_handler;
605
606         /*
607          * Setup the APIC counter to maximum. There is no way the lapic
608          * can underflow in the 100ms detection time frame
609          */
610         __setup_APIC_LVTT(0xffffffff, 0, 0);
611
612         /* Let the interrupts run */
613         local_irq_enable();
614
615         while (lapic_cal_loops <= LAPIC_CAL_LOOPS)
616                 cpu_relax();
617
618         local_irq_disable();
619
620         /* Restore the real event handler */
621         global_clock_event->event_handler = real_handler;
622
623         /* Build delta t1-t2 as apic timer counts down */
624         delta = lapic_cal_t1 - lapic_cal_t2;
625         apic_printk(APIC_VERBOSE, "... lapic delta = %ld\n", delta);
626
627         deltatsc = (long)(lapic_cal_tsc2 - lapic_cal_tsc1);
628
629         /* we trust the PM based calibration if possible */
630         pm_referenced = !calibrate_by_pmtimer(lapic_cal_pm2 - lapic_cal_pm1,
631                                         &delta, &deltatsc);
632
633         /* Calculate the scaled math multiplication factor */
634         lapic_clockevent.mult = div_sc(delta, TICK_NSEC * LAPIC_CAL_LOOPS,
635                                        lapic_clockevent.shift);
636         lapic_clockevent.max_delta_ns =
637                 clockevent_delta2ns(0x7FFFFF, &lapic_clockevent);
638         lapic_clockevent.min_delta_ns =
639                 clockevent_delta2ns(0xF, &lapic_clockevent);
640
641         calibration_result = (delta * APIC_DIVISOR) / LAPIC_CAL_LOOPS;
642
643         apic_printk(APIC_VERBOSE, "..... delta %ld\n", delta);
644         apic_printk(APIC_VERBOSE, "..... mult: %u\n", lapic_clockevent.mult);
645         apic_printk(APIC_VERBOSE, "..... calibration result: %u\n",
646                     calibration_result);
647
648         if (cpu_has_tsc) {
649                 apic_printk(APIC_VERBOSE, "..... CPU clock speed is "
650                             "%ld.%04ld MHz.\n",
651                             (deltatsc / LAPIC_CAL_LOOPS) / (1000000 / HZ),
652                             (deltatsc / LAPIC_CAL_LOOPS) % (1000000 / HZ));
653         }
654
655         apic_printk(APIC_VERBOSE, "..... host bus clock speed is "
656                     "%u.%04u MHz.\n",
657                     calibration_result / (1000000 / HZ),
658                     calibration_result % (1000000 / HZ));
659
660         /*
661          * Do a sanity check on the APIC calibration result
662          */
663         if (calibration_result < (1000000 / HZ)) {
664                 local_irq_enable();
665                 pr_warning("APIC frequency too slow, disabling apic timer\n");
666                 return -1;
667         }
668
669         levt->features &= ~CLOCK_EVT_FEAT_DUMMY;
670
671         /*
672          * PM timer calibration failed or not turned on
673          * so lets try APIC timer based calibration
674          */
675         if (!pm_referenced) {
676                 apic_printk(APIC_VERBOSE, "... verify APIC timer\n");
677
678                 /*
679                  * Setup the apic timer manually
680                  */
681                 levt->event_handler = lapic_cal_handler;
682                 lapic_timer_setup(CLOCK_EVT_MODE_PERIODIC, levt);
683                 lapic_cal_loops = -1;
684
685                 /* Let the interrupts run */
686                 local_irq_enable();
687
688                 while (lapic_cal_loops <= LAPIC_CAL_LOOPS)
689                         cpu_relax();
690
691                 /* Stop the lapic timer */
692                 lapic_timer_setup(CLOCK_EVT_MODE_SHUTDOWN, levt);
693
694                 /* Jiffies delta */
695                 deltaj = lapic_cal_j2 - lapic_cal_j1;
696                 apic_printk(APIC_VERBOSE, "... jiffies delta = %lu\n", deltaj);
697
698                 /* Check, if the jiffies result is consistent */
699                 if (deltaj >= LAPIC_CAL_LOOPS-2 && deltaj <= LAPIC_CAL_LOOPS+2)
700                         apic_printk(APIC_VERBOSE, "... jiffies result ok\n");
701                 else
702                         levt->features |= CLOCK_EVT_FEAT_DUMMY;
703         } else
704                 local_irq_enable();
705
706         if (levt->features & CLOCK_EVT_FEAT_DUMMY) {
707                 pr_warning("APIC timer disabled due to verification failure\n");
708                         return -1;
709         }
710
711         return 0;
712 }
713
714 /*
715  * Setup the boot APIC
716  *
717  * Calibrate and verify the result.
718  */
719 void __init setup_boot_APIC_clock(void)
720 {
721         /*
722          * The local apic timer can be disabled via the kernel
723          * commandline or from the CPU detection code. Register the lapic
724          * timer as a dummy clock event source on SMP systems, so the
725          * broadcast mechanism is used. On UP systems simply ignore it.
726          */
727         if (disable_apic_timer) {
728                 pr_info("Disabling APIC timer\n");
729                 /* No broadcast on UP ! */
730                 if (num_possible_cpus() > 1) {
731                         lapic_clockevent.mult = 1;
732                         setup_APIC_timer();
733                 }
734                 return;
735         }
736
737         apic_printk(APIC_VERBOSE, "Using local APIC timer interrupts.\n"
738                     "calibrating APIC timer ...\n");
739
740         if (calibrate_APIC_clock()) {
741                 /* No broadcast on UP ! */
742                 if (num_possible_cpus() > 1)
743                         setup_APIC_timer();
744                 return;
745         }
746
747         /*
748          * If nmi_watchdog is set to IO_APIC, we need the
749          * PIT/HPET going.  Otherwise register lapic as a dummy
750          * device.
751          */
752         if (nmi_watchdog != NMI_IO_APIC)
753                 lapic_clockevent.features &= ~CLOCK_EVT_FEAT_DUMMY;
754         else
755                 pr_warning("APIC timer registered as dummy,"
756                         " due to nmi_watchdog=%d!\n", nmi_watchdog);
757
758         /* Setup the lapic or request the broadcast */
759         setup_APIC_timer();
760 }
761
762 void __cpuinit setup_secondary_APIC_clock(void)
763 {
764         setup_APIC_timer();
765 }
766
767 /*
768  * The guts of the apic timer interrupt
769  */
770 static void local_apic_timer_interrupt(void)
771 {
772         int cpu = smp_processor_id();
773         struct clock_event_device *evt = &per_cpu(lapic_events, cpu);
774
775         /*
776          * Normally we should not be here till LAPIC has been initialized but
777          * in some cases like kdump, its possible that there is a pending LAPIC
778          * timer interrupt from previous kernel's context and is delivered in
779          * new kernel the moment interrupts are enabled.
780          *
781          * Interrupts are enabled early and LAPIC is setup much later, hence
782          * its possible that when we get here evt->event_handler is NULL.
783          * Check for event_handler being NULL and discard the interrupt as
784          * spurious.
785          */
786         if (!evt->event_handler) {
787                 pr_warning("Spurious LAPIC timer interrupt on cpu %d\n", cpu);
788                 /* Switch it off */
789                 lapic_timer_setup(CLOCK_EVT_MODE_SHUTDOWN, evt);
790                 return;
791         }
792
793         /*
794          * the NMI deadlock-detector uses this.
795          */
796         inc_irq_stat(apic_timer_irqs);
797
798         evt->event_handler(evt);
799 }
800
801 /*
802  * Local APIC timer interrupt. This is the most natural way for doing
803  * local interrupts, but local timer interrupts can be emulated by
804  * broadcast interrupts too. [in case the hw doesn't support APIC timers]
805  *
806  * [ if a single-CPU system runs an SMP kernel then we call the local
807  *   interrupt as well. Thus we cannot inline the local irq ... ]
808  */
809 void __irq_entry smp_apic_timer_interrupt(struct pt_regs *regs)
810 {
811         struct pt_regs *old_regs = set_irq_regs(regs);
812
813         /*
814          * NOTE! We'd better ACK the irq immediately,
815          * because timer handling can be slow.
816          */
817         ack_APIC_irq();
818         /*
819          * update_process_times() expects us to have done irq_enter().
820          * Besides, if we don't timer interrupts ignore the global
821          * interrupt lock, which is the WrongThing (tm) to do.
822          */
823         exit_idle();
824         irq_enter();
825         local_apic_timer_interrupt();
826         irq_exit();
827
828         set_irq_regs(old_regs);
829 }
830
831 int setup_profiling_timer(unsigned int multiplier)
832 {
833         return -EINVAL;
834 }
835
836 /*
837  * Local APIC start and shutdown
838  */
839
840 /**
841  * clear_local_APIC - shutdown the local APIC
842  *
843  * This is called, when a CPU is disabled and before rebooting, so the state of
844  * the local APIC has no dangling leftovers. Also used to cleanout any BIOS
845  * leftovers during boot.
846  */
847 void clear_local_APIC(void)
848 {
849         int maxlvt;
850         u32 v;
851
852         /* APIC hasn't been mapped yet */
853         if (!x2apic_mode && !apic_phys)
854                 return;
855
856         maxlvt = lapic_get_maxlvt();
857         /*
858          * Masking an LVT entry can trigger a local APIC error
859          * if the vector is zero. Mask LVTERR first to prevent this.
860          */
861         if (maxlvt >= 3) {
862                 v = ERROR_APIC_VECTOR; /* any non-zero vector will do */
863                 apic_write(APIC_LVTERR, v | APIC_LVT_MASKED);
864         }
865         /*
866          * Careful: we have to set masks only first to deassert
867          * any level-triggered sources.
868          */
869         v = apic_read(APIC_LVTT);
870         apic_write(APIC_LVTT, v | APIC_LVT_MASKED);
871         v = apic_read(APIC_LVT0);
872         apic_write(APIC_LVT0, v | APIC_LVT_MASKED);
873         v = apic_read(APIC_LVT1);
874         apic_write(APIC_LVT1, v | APIC_LVT_MASKED);
875         if (maxlvt >= 4) {
876                 v = apic_read(APIC_LVTPC);
877                 apic_write(APIC_LVTPC, v | APIC_LVT_MASKED);
878         }
879
880         /* lets not touch this if we didn't frob it */
881 #ifdef CONFIG_X86_THERMAL_VECTOR
882         if (maxlvt >= 5) {
883                 v = apic_read(APIC_LVTTHMR);
884                 apic_write(APIC_LVTTHMR, v | APIC_LVT_MASKED);
885         }
886 #endif
887 #ifdef CONFIG_X86_MCE_INTEL
888         if (maxlvt >= 6) {
889                 v = apic_read(APIC_LVTCMCI);
890                 if (!(v & APIC_LVT_MASKED))
891                         apic_write(APIC_LVTCMCI, v | APIC_LVT_MASKED);
892         }
893 #endif
894
895         /*
896          * Clean APIC state for other OSs:
897          */
898         apic_write(APIC_LVTT, APIC_LVT_MASKED);
899         apic_write(APIC_LVT0, APIC_LVT_MASKED);
900         apic_write(APIC_LVT1, APIC_LVT_MASKED);
901         if (maxlvt >= 3)
902                 apic_write(APIC_LVTERR, APIC_LVT_MASKED);
903         if (maxlvt >= 4)
904                 apic_write(APIC_LVTPC, APIC_LVT_MASKED);
905
906         /* Integrated APIC (!82489DX) ? */
907         if (lapic_is_integrated()) {
908                 if (maxlvt > 3)
909                         /* Clear ESR due to Pentium errata 3AP and 11AP */
910                         apic_write(APIC_ESR, 0);
911                 apic_read(APIC_ESR);
912         }
913 }
914
915 /**
916  * disable_local_APIC - clear and disable the local APIC
917  */
918 void disable_local_APIC(void)
919 {
920         unsigned int value;
921
922         /* APIC hasn't been mapped yet */
923         if (!apic_phys)
924                 return;
925
926         clear_local_APIC();
927
928         /*
929          * Disable APIC (implies clearing of registers
930          * for 82489DX!).
931          */
932         value = apic_read(APIC_SPIV);
933         value &= ~APIC_SPIV_APIC_ENABLED;
934         apic_write(APIC_SPIV, value);
935
936 #ifdef CONFIG_X86_32
937         /*
938          * When LAPIC was disabled by the BIOS and enabled by the kernel,
939          * restore the disabled state.
940          */
941         if (enabled_via_apicbase) {
942                 unsigned int l, h;
943
944                 rdmsr(MSR_IA32_APICBASE, l, h);
945                 l &= ~MSR_IA32_APICBASE_ENABLE;
946                 wrmsr(MSR_IA32_APICBASE, l, h);
947         }
948 #endif
949 }
950
951 /*
952  * If Linux enabled the LAPIC against the BIOS default disable it down before
953  * re-entering the BIOS on shutdown.  Otherwise the BIOS may get confused and
954  * not power-off.  Additionally clear all LVT entries before disable_local_APIC
955  * for the case where Linux didn't enable the LAPIC.
956  */
957 void lapic_shutdown(void)
958 {
959         unsigned long flags;
960
961         if (!cpu_has_apic && !apic_from_smp_config())
962                 return;
963
964         local_irq_save(flags);
965
966 #ifdef CONFIG_X86_32
967         if (!enabled_via_apicbase)
968                 clear_local_APIC();
969         else
970 #endif
971                 disable_local_APIC();
972
973
974         local_irq_restore(flags);
975 }
976
977 /*
978  * This is to verify that we're looking at a real local APIC.
979  * Check these against your board if the CPUs aren't getting
980  * started for no apparent reason.
981  */
982 int __init verify_local_APIC(void)
983 {
984         unsigned int reg0, reg1;
985
986         /*
987          * The version register is read-only in a real APIC.
988          */
989         reg0 = apic_read(APIC_LVR);
990         apic_printk(APIC_DEBUG, "Getting VERSION: %x\n", reg0);
991         apic_write(APIC_LVR, reg0 ^ APIC_LVR_MASK);
992         reg1 = apic_read(APIC_LVR);
993         apic_printk(APIC_DEBUG, "Getting VERSION: %x\n", reg1);
994
995         /*
996          * The two version reads above should print the same
997          * numbers.  If the second one is different, then we
998          * poke at a non-APIC.
999          */
1000         if (reg1 != reg0)
1001                 return 0;
1002
1003         /*
1004          * Check if the version looks reasonably.
1005          */
1006         reg1 = GET_APIC_VERSION(reg0);
1007         if (reg1 == 0x00 || reg1 == 0xff)
1008                 return 0;
1009         reg1 = lapic_get_maxlvt();
1010         if (reg1 < 0x02 || reg1 == 0xff)
1011                 return 0;
1012
1013         /*
1014          * The ID register is read/write in a real APIC.
1015          */
1016         reg0 = apic_read(APIC_ID);
1017         apic_printk(APIC_DEBUG, "Getting ID: %x\n", reg0);
1018         apic_write(APIC_ID, reg0 ^ apic->apic_id_mask);
1019         reg1 = apic_read(APIC_ID);
1020         apic_printk(APIC_DEBUG, "Getting ID: %x\n", reg1);
1021         apic_write(APIC_ID, reg0);
1022         if (reg1 != (reg0 ^ apic->apic_id_mask))
1023                 return 0;
1024
1025         /*
1026          * The next two are just to see if we have sane values.
1027          * They're only really relevant if we're in Virtual Wire
1028          * compatibility mode, but most boxes are anymore.
1029          */
1030         reg0 = apic_read(APIC_LVT0);
1031         apic_printk(APIC_DEBUG, "Getting LVT0: %x\n", reg0);
1032         reg1 = apic_read(APIC_LVT1);
1033         apic_printk(APIC_DEBUG, "Getting LVT1: %x\n", reg1);
1034
1035         return 1;
1036 }
1037
1038 /**
1039  * sync_Arb_IDs - synchronize APIC bus arbitration IDs
1040  */
1041 void __init sync_Arb_IDs(void)
1042 {
1043         /*
1044          * Unsupported on P4 - see Intel Dev. Manual Vol. 3, Ch. 8.6.1 And not
1045          * needed on AMD.
1046          */
1047         if (modern_apic() || boot_cpu_data.x86_vendor == X86_VENDOR_AMD)
1048                 return;
1049
1050         /*
1051          * Wait for idle.
1052          */
1053         apic_wait_icr_idle();
1054
1055         apic_printk(APIC_DEBUG, "Synchronizing Arb IDs.\n");
1056         apic_write(APIC_ICR, APIC_DEST_ALLINC |
1057                         APIC_INT_LEVELTRIG | APIC_DM_INIT);
1058 }
1059
1060 /*
1061  * An initial setup of the virtual wire mode.
1062  */
1063 void __init init_bsp_APIC(void)
1064 {
1065         unsigned int value;
1066
1067         /*
1068          * Don't do the setup now if we have a SMP BIOS as the
1069          * through-I/O-APIC virtual wire mode might be active.
1070          */
1071         if (smp_found_config || !cpu_has_apic)
1072                 return;
1073
1074         /*
1075          * Do not trust the local APIC being empty at bootup.
1076          */
1077         clear_local_APIC();
1078
1079         /*
1080          * Enable APIC.
1081          */
1082         value = apic_read(APIC_SPIV);
1083         value &= ~APIC_VECTOR_MASK;
1084         value |= APIC_SPIV_APIC_ENABLED;
1085
1086 #ifdef CONFIG_X86_32
1087         /* This bit is reserved on P4/Xeon and should be cleared */
1088         if ((boot_cpu_data.x86_vendor == X86_VENDOR_INTEL) &&
1089             (boot_cpu_data.x86 == 15))
1090                 value &= ~APIC_SPIV_FOCUS_DISABLED;
1091         else
1092 #endif
1093                 value |= APIC_SPIV_FOCUS_DISABLED;
1094         value |= SPURIOUS_APIC_VECTOR;
1095         apic_write(APIC_SPIV, value);
1096
1097         /*
1098          * Set up the virtual wire mode.
1099          */
1100         apic_write(APIC_LVT0, APIC_DM_EXTINT);
1101         value = APIC_DM_NMI;
1102         if (!lapic_is_integrated())             /* 82489DX */
1103                 value |= APIC_LVT_LEVEL_TRIGGER;
1104         apic_write(APIC_LVT1, value);
1105 }
1106
1107 static void __cpuinit lapic_setup_esr(void)
1108 {
1109         unsigned int oldvalue, value, maxlvt;
1110
1111         if (!lapic_is_integrated()) {
1112                 pr_info("No ESR for 82489DX.\n");
1113                 return;
1114         }
1115
1116         if (apic->disable_esr) {
1117                 /*
1118                  * Something untraceable is creating bad interrupts on
1119                  * secondary quads ... for the moment, just leave the
1120                  * ESR disabled - we can't do anything useful with the
1121                  * errors anyway - mbligh
1122                  */
1123                 pr_info("Leaving ESR disabled.\n");
1124                 return;
1125         }
1126
1127         maxlvt = lapic_get_maxlvt();
1128         if (maxlvt > 3)         /* Due to the Pentium erratum 3AP. */
1129                 apic_write(APIC_ESR, 0);
1130         oldvalue = apic_read(APIC_ESR);
1131
1132         /* enables sending errors */
1133         value = ERROR_APIC_VECTOR;
1134         apic_write(APIC_LVTERR, value);
1135
1136         /*
1137          * spec says clear errors after enabling vector.
1138          */
1139         if (maxlvt > 3)
1140                 apic_write(APIC_ESR, 0);
1141         value = apic_read(APIC_ESR);
1142         if (value != oldvalue)
1143                 apic_printk(APIC_VERBOSE, "ESR value before enabling "
1144                         "vector: 0x%08x  after: 0x%08x\n",
1145                         oldvalue, value);
1146 }
1147
1148
1149 /**
1150  * setup_local_APIC - setup the local APIC
1151  */
1152 void __cpuinit setup_local_APIC(void)
1153 {
1154         unsigned int value;
1155         int i, j;
1156
1157         if (disable_apic) {
1158                 arch_disable_smp_support();
1159                 return;
1160         }
1161
1162 #ifdef CONFIG_X86_32
1163         /* Pound the ESR really hard over the head with a big hammer - mbligh */
1164         if (lapic_is_integrated() && apic->disable_esr) {
1165                 apic_write(APIC_ESR, 0);
1166                 apic_write(APIC_ESR, 0);
1167                 apic_write(APIC_ESR, 0);
1168                 apic_write(APIC_ESR, 0);
1169         }
1170 #endif
1171         perf_events_lapic_init();
1172
1173         preempt_disable();
1174
1175         /*
1176          * Double-check whether this APIC is really registered.
1177          * This is meaningless in clustered apic mode, so we skip it.
1178          */
1179         BUG_ON(!apic->apic_id_registered());
1180
1181         /*
1182          * Intel recommends to set DFR, LDR and TPR before enabling
1183          * an APIC.  See e.g. "AP-388 82489DX User's Manual" (Intel
1184          * document number 292116).  So here it goes...
1185          */
1186         apic->init_apic_ldr();
1187
1188         /*
1189          * Set Task Priority to 'accept all'. We never change this
1190          * later on.
1191          */
1192         value = apic_read(APIC_TASKPRI);
1193         value &= ~APIC_TPRI_MASK;
1194         apic_write(APIC_TASKPRI, value);
1195
1196         /*
1197          * After a crash, we no longer service the interrupts and a pending
1198          * interrupt from previous kernel might still have ISR bit set.
1199          *
1200          * Most probably by now CPU has serviced that pending interrupt and
1201          * it might not have done the ack_APIC_irq() because it thought,
1202          * interrupt came from i8259 as ExtInt. LAPIC did not get EOI so it
1203          * does not clear the ISR bit and cpu thinks it has already serivced
1204          * the interrupt. Hence a vector might get locked. It was noticed
1205          * for timer irq (vector 0x31). Issue an extra EOI to clear ISR.
1206          */
1207         for (i = APIC_ISR_NR - 1; i >= 0; i--) {
1208                 value = apic_read(APIC_ISR + i*0x10);
1209                 for (j = 31; j >= 0; j--) {
1210                         if (value & (1<<j))
1211                                 ack_APIC_irq();
1212                 }
1213         }
1214
1215         /*
1216          * Now that we are all set up, enable the APIC
1217          */
1218         value = apic_read(APIC_SPIV);
1219         value &= ~APIC_VECTOR_MASK;
1220         /*
1221          * Enable APIC
1222          */
1223         value |= APIC_SPIV_APIC_ENABLED;
1224
1225 #ifdef CONFIG_X86_32
1226         /*
1227          * Some unknown Intel IO/APIC (or APIC) errata is biting us with
1228          * certain networking cards. If high frequency interrupts are
1229          * happening on a particular IOAPIC pin, plus the IOAPIC routing
1230          * entry is masked/unmasked at a high rate as well then sooner or
1231          * later IOAPIC line gets 'stuck', no more interrupts are received
1232          * from the device. If focus CPU is disabled then the hang goes
1233          * away, oh well :-(
1234          *
1235          * [ This bug can be reproduced easily with a level-triggered
1236          *   PCI Ne2000 networking cards and PII/PIII processors, dual
1237          *   BX chipset. ]
1238          */
1239         /*
1240          * Actually disabling the focus CPU check just makes the hang less
1241          * frequent as it makes the interrupt distributon model be more
1242          * like LRU than MRU (the short-term load is more even across CPUs).
1243          * See also the comment in end_level_ioapic_irq().  --macro
1244          */
1245
1246         /*
1247          * - enable focus processor (bit==0)
1248          * - 64bit mode always use processor focus
1249          *   so no need to set it
1250          */
1251         value &= ~APIC_SPIV_FOCUS_DISABLED;
1252 #endif
1253
1254         /*
1255          * Set spurious IRQ vector
1256          */
1257         value |= SPURIOUS_APIC_VECTOR;
1258         apic_write(APIC_SPIV, value);
1259
1260         /*
1261          * Set up LVT0, LVT1:
1262          *
1263          * set up through-local-APIC on the BP's LINT0. This is not
1264          * strictly necessary in pure symmetric-IO mode, but sometimes
1265          * we delegate interrupts to the 8259A.
1266          */
1267         /*
1268          * TODO: set up through-local-APIC from through-I/O-APIC? --macro
1269          */
1270         value = apic_read(APIC_LVT0) & APIC_LVT_MASKED;
1271         if (!smp_processor_id() && (pic_mode || !value)) {
1272                 value = APIC_DM_EXTINT;
1273                 apic_printk(APIC_VERBOSE, "enabled ExtINT on CPU#%d\n",
1274                                 smp_processor_id());
1275         } else {
1276                 value = APIC_DM_EXTINT | APIC_LVT_MASKED;
1277                 apic_printk(APIC_VERBOSE, "masked ExtINT on CPU#%d\n",
1278                                 smp_processor_id());
1279         }
1280         apic_write(APIC_LVT0, value);
1281
1282         /*
1283          * only the BP should see the LINT1 NMI signal, obviously.
1284          */
1285         if (!smp_processor_id())
1286                 value = APIC_DM_NMI;
1287         else
1288                 value = APIC_DM_NMI | APIC_LVT_MASKED;
1289         if (!lapic_is_integrated())             /* 82489DX */
1290                 value |= APIC_LVT_LEVEL_TRIGGER;
1291         apic_write(APIC_LVT1, value);
1292
1293         preempt_enable();
1294
1295 #ifdef CONFIG_X86_MCE_INTEL
1296         /* Recheck CMCI information after local APIC is up on CPU #0 */
1297         if (smp_processor_id() == 0)
1298                 cmci_recheck();
1299 #endif
1300 }
1301
1302 void __cpuinit end_local_APIC_setup(void)
1303 {
1304         lapic_setup_esr();
1305
1306 #ifdef CONFIG_X86_32
1307         {
1308                 unsigned int value;
1309                 /* Disable the local apic timer */
1310                 value = apic_read(APIC_LVTT);
1311                 value |= (APIC_LVT_MASKED | LOCAL_TIMER_VECTOR);
1312                 apic_write(APIC_LVTT, value);
1313         }
1314 #endif
1315
1316         setup_apic_nmi_watchdog(NULL);
1317         apic_pm_activate();
1318 }
1319
1320 #ifdef CONFIG_X86_X2APIC
1321 void check_x2apic(void)
1322 {
1323         if (x2apic_enabled()) {
1324                 pr_info("x2apic enabled by BIOS, switching to x2apic ops\n");
1325                 x2apic_preenabled = x2apic_mode = 1;
1326         }
1327 }
1328
1329 void enable_x2apic(void)
1330 {
1331         int msr, msr2;
1332
1333         if (!x2apic_mode)
1334                 return;
1335
1336         rdmsr(MSR_IA32_APICBASE, msr, msr2);
1337         if (!(msr & X2APIC_ENABLE)) {
1338                 printk_once(KERN_INFO "Enabling x2apic\n");
1339                 wrmsr(MSR_IA32_APICBASE, msr | X2APIC_ENABLE, 0);
1340         }
1341 }
1342 #endif /* CONFIG_X86_X2APIC */
1343
1344 int __init enable_IR(void)
1345 {
1346 #ifdef CONFIG_INTR_REMAP
1347         if (!intr_remapping_supported()) {
1348                 pr_debug("intr-remapping not supported\n");
1349                 return 0;
1350         }
1351
1352         if (!x2apic_preenabled && skip_ioapic_setup) {
1353                 pr_info("Skipped enabling intr-remap because of skipping "
1354                         "io-apic setup\n");
1355                 return 0;
1356         }
1357
1358         if (enable_intr_remapping(x2apic_supported()))
1359                 return 0;
1360
1361         pr_info("Enabled Interrupt-remapping\n");
1362
1363         return 1;
1364
1365 #endif
1366         return 0;
1367 }
1368
1369 void __init enable_IR_x2apic(void)
1370 {
1371         unsigned long flags;
1372         struct IO_APIC_route_entry **ioapic_entries = NULL;
1373         int ret, x2apic_enabled = 0;
1374         int dmar_table_init_ret;
1375
1376         dmar_table_init_ret = dmar_table_init();
1377         if (dmar_table_init_ret && !x2apic_supported())
1378                 return;
1379
1380         ioapic_entries = alloc_ioapic_entries();
1381         if (!ioapic_entries) {
1382                 pr_err("Allocate ioapic_entries failed\n");
1383                 goto out;
1384         }
1385
1386         ret = save_IO_APIC_setup(ioapic_entries);
1387         if (ret) {
1388                 pr_info("Saving IO-APIC state failed: %d\n", ret);
1389                 goto out;
1390         }
1391
1392         local_irq_save(flags);
1393         legacy_pic->mask_all();
1394         mask_IO_APIC_setup(ioapic_entries);
1395
1396         if (dmar_table_init_ret)
1397                 ret = 0;
1398         else
1399                 ret = enable_IR();
1400
1401         if (!ret) {
1402                 /* IR is required if there is APIC ID > 255 even when running
1403                  * under KVM
1404                  */
1405                 if (max_physical_apicid > 255 || !kvm_para_available())
1406                         goto nox2apic;
1407                 /*
1408                  * without IR all CPUs can be addressed by IOAPIC/MSI
1409                  * only in physical mode
1410                  */
1411                 x2apic_force_phys();
1412         }
1413
1414         x2apic_enabled = 1;
1415
1416         if (x2apic_supported() && !x2apic_mode) {
1417                 x2apic_mode = 1;
1418                 enable_x2apic();
1419                 pr_info("Enabled x2apic\n");
1420         }
1421
1422 nox2apic:
1423         if (!ret) /* IR enabling failed */
1424                 restore_IO_APIC_setup(ioapic_entries);
1425         legacy_pic->restore_mask();
1426         local_irq_restore(flags);
1427
1428 out:
1429         if (ioapic_entries)
1430                 free_ioapic_entries(ioapic_entries);
1431
1432         if (x2apic_enabled)
1433                 return;
1434
1435         if (x2apic_preenabled)
1436                 panic("x2apic: enabled by BIOS but kernel init failed.");
1437         else if (cpu_has_x2apic)
1438                 pr_info("Not enabling x2apic, Intr-remapping init failed.\n");
1439 }
1440
1441 #ifdef CONFIG_X86_64
1442 /*
1443  * Detect and enable local APICs on non-SMP boards.
1444  * Original code written by Keir Fraser.
1445  * On AMD64 we trust the BIOS - if it says no APIC it is likely
1446  * not correctly set up (usually the APIC timer won't work etc.)
1447  */
1448 static int __init detect_init_APIC(void)
1449 {
1450         if (!cpu_has_apic) {
1451                 pr_info("No local APIC present\n");
1452                 return -1;
1453         }
1454
1455         mp_lapic_addr = APIC_DEFAULT_PHYS_BASE;
1456         return 0;
1457 }
1458 #else
1459 /*
1460  * Detect and initialize APIC
1461  */
1462 static int __init detect_init_APIC(void)
1463 {
1464         u32 h, l, features;
1465
1466         /* Disabled by kernel option? */
1467         if (disable_apic)
1468                 return -1;
1469
1470         switch (boot_cpu_data.x86_vendor) {
1471         case X86_VENDOR_AMD:
1472                 if ((boot_cpu_data.x86 == 6 && boot_cpu_data.x86_model > 1) ||
1473                     (boot_cpu_data.x86 >= 15))
1474                         break;
1475                 goto no_apic;
1476         case X86_VENDOR_INTEL:
1477                 if (boot_cpu_data.x86 == 6 || boot_cpu_data.x86 == 15 ||
1478                     (boot_cpu_data.x86 == 5 && cpu_has_apic))
1479                         break;
1480                 goto no_apic;
1481         default:
1482                 goto no_apic;
1483         }
1484
1485         if (!cpu_has_apic) {
1486                 /*
1487                  * Over-ride BIOS and try to enable the local APIC only if
1488                  * "lapic" specified.
1489                  */
1490                 if (!force_enable_local_apic) {
1491                         pr_info("Local APIC disabled by BIOS -- "
1492                                 "you can enable it with \"lapic\"\n");
1493                         return -1;
1494                 }
1495                 /*
1496                  * Some BIOSes disable the local APIC in the APIC_BASE
1497                  * MSR. This can only be done in software for Intel P6 or later
1498                  * and AMD K7 (Model > 1) or later.
1499                  */
1500                 rdmsr(MSR_IA32_APICBASE, l, h);
1501                 if (!(l & MSR_IA32_APICBASE_ENABLE)) {
1502                         pr_info("Local APIC disabled by BIOS -- reenabling.\n");
1503                         l &= ~MSR_IA32_APICBASE_BASE;
1504                         l |= MSR_IA32_APICBASE_ENABLE | APIC_DEFAULT_PHYS_BASE;
1505                         wrmsr(MSR_IA32_APICBASE, l, h);
1506                         enabled_via_apicbase = 1;
1507                 }
1508         }
1509         /*
1510          * The APIC feature bit should now be enabled
1511          * in `cpuid'
1512          */
1513         features = cpuid_edx(1);
1514         if (!(features & (1 << X86_FEATURE_APIC))) {
1515                 pr_warning("Could not enable APIC!\n");
1516                 return -1;
1517         }
1518         set_cpu_cap(&boot_cpu_data, X86_FEATURE_APIC);
1519         mp_lapic_addr = APIC_DEFAULT_PHYS_BASE;
1520
1521         /* The BIOS may have set up the APIC at some other address */
1522         rdmsr(MSR_IA32_APICBASE, l, h);
1523         if (l & MSR_IA32_APICBASE_ENABLE)
1524                 mp_lapic_addr = l & MSR_IA32_APICBASE_BASE;
1525
1526         pr_info("Found and enabled local APIC!\n");
1527
1528         apic_pm_activate();
1529
1530         return 0;
1531
1532 no_apic:
1533         pr_info("No local APIC present or hardware disabled\n");
1534         return -1;
1535 }
1536 #endif
1537
1538 #ifdef CONFIG_X86_64
1539 void __init early_init_lapic_mapping(void)
1540 {
1541         /*
1542          * If no local APIC can be found then go out
1543          * : it means there is no mpatable and MADT
1544          */
1545         if (!smp_found_config)
1546                 return;
1547
1548         set_fixmap_nocache(FIX_APIC_BASE, mp_lapic_addr);
1549         apic_printk(APIC_VERBOSE, "mapped APIC to %16lx (%16lx)\n",
1550                     APIC_BASE, mp_lapic_addr);
1551
1552         /*
1553          * Fetch the APIC ID of the BSP in case we have a
1554          * default configuration (or the MP table is broken).
1555          */
1556         boot_cpu_physical_apicid = read_apic_id();
1557 }
1558 #endif
1559
1560 /**
1561  * init_apic_mappings - initialize APIC mappings
1562  */
1563 void __init init_apic_mappings(void)
1564 {
1565         unsigned int new_apicid;
1566
1567         if (x2apic_mode) {
1568                 boot_cpu_physical_apicid = read_apic_id();
1569                 return;
1570         }
1571
1572         /* If no local APIC can be found return early */
1573         if (!smp_found_config && detect_init_APIC()) {
1574                 /* lets NOP'ify apic operations */
1575                 pr_info("APIC: disable apic facility\n");
1576                 apic_disable();
1577         } else {
1578                 apic_phys = mp_lapic_addr;
1579
1580                 /*
1581                  * acpi lapic path already maps that address in
1582                  * acpi_register_lapic_address()
1583                  */
1584                 if (!acpi_lapic)
1585                         set_fixmap_nocache(FIX_APIC_BASE, apic_phys);
1586
1587                 apic_printk(APIC_VERBOSE, "mapped APIC to %08lx (%08lx)\n",
1588                                         APIC_BASE, apic_phys);
1589         }
1590
1591         /*
1592          * Fetch the APIC ID of the BSP in case we have a
1593          * default configuration (or the MP table is broken).
1594          */
1595         new_apicid = read_apic_id();
1596         if (boot_cpu_physical_apicid != new_apicid) {
1597                 boot_cpu_physical_apicid = new_apicid;
1598                 /*
1599                  * yeah -- we lie about apic_version
1600                  * in case if apic was disabled via boot option
1601                  * but it's not a problem for SMP compiled kernel
1602                  * since smp_sanity_check is prepared for such a case
1603                  * and disable smp mode
1604                  */
1605                 apic_version[new_apicid] =
1606                          GET_APIC_VERSION(apic_read(APIC_LVR));
1607         }
1608 }
1609
1610 /*
1611  * This initializes the IO-APIC and APIC hardware if this is
1612  * a UP kernel.
1613  */
1614 int apic_version[MAX_APICS];
1615
1616 int __init APIC_init_uniprocessor(void)
1617 {
1618         if (disable_apic) {
1619                 pr_info("Apic disabled\n");
1620                 return -1;
1621         }
1622 #ifdef CONFIG_X86_64
1623         if (!cpu_has_apic) {
1624                 disable_apic = 1;
1625                 pr_info("Apic disabled by BIOS\n");
1626                 return -1;
1627         }
1628 #else
1629         if (!smp_found_config && !cpu_has_apic)
1630                 return -1;
1631
1632         /*
1633          * Complain if the BIOS pretends there is one.
1634          */
1635         if (!cpu_has_apic &&
1636             APIC_INTEGRATED(apic_version[boot_cpu_physical_apicid])) {
1637                 pr_err("BIOS bug, local APIC 0x%x not detected!...\n",
1638                         boot_cpu_physical_apicid);
1639                 return -1;
1640         }
1641 #endif
1642
1643 #ifndef CONFIG_SMP
1644         enable_IR_x2apic();
1645         default_setup_apic_routing();
1646 #endif
1647
1648         verify_local_APIC();
1649         connect_bsp_APIC();
1650
1651 #ifdef CONFIG_X86_64
1652         apic_write(APIC_ID, SET_APIC_ID(boot_cpu_physical_apicid));
1653 #else
1654         /*
1655          * Hack: In case of kdump, after a crash, kernel might be booting
1656          * on a cpu with non-zero lapic id. But boot_cpu_physical_apicid
1657          * might be zero if read from MP tables. Get it from LAPIC.
1658          */
1659 # ifdef CONFIG_CRASH_DUMP
1660         boot_cpu_physical_apicid = read_apic_id();
1661 # endif
1662 #endif
1663         physid_set_mask_of_physid(boot_cpu_physical_apicid, &phys_cpu_present_map);
1664         setup_local_APIC();
1665
1666 #ifdef CONFIG_X86_IO_APIC
1667         /*
1668          * Now enable IO-APICs, actually call clear_IO_APIC
1669          * We need clear_IO_APIC before enabling error vector
1670          */
1671         if (!skip_ioapic_setup && nr_ioapics)
1672                 enable_IO_APIC();
1673 #endif
1674
1675         end_local_APIC_setup();
1676
1677 #ifdef CONFIG_X86_IO_APIC
1678         if (smp_found_config && !skip_ioapic_setup && nr_ioapics)
1679                 setup_IO_APIC();
1680         else {
1681                 nr_ioapics = 0;
1682                 localise_nmi_watchdog();
1683         }
1684 #else
1685         localise_nmi_watchdog();
1686 #endif
1687
1688         x86_init.timers.setup_percpu_clockev();
1689 #ifdef CONFIG_X86_64
1690         check_nmi_watchdog();
1691 #endif
1692
1693         return 0;
1694 }
1695
1696 /*
1697  * Local APIC interrupts
1698  */
1699
1700 /*
1701  * This interrupt should _never_ happen with our APIC/SMP architecture
1702  */
1703 void smp_spurious_interrupt(struct pt_regs *regs)
1704 {
1705         u32 v;
1706
1707         exit_idle();
1708         irq_enter();
1709         /*
1710          * Check if this really is a spurious interrupt and ACK it
1711          * if it is a vectored one.  Just in case...
1712          * Spurious interrupts should not be ACKed.
1713          */
1714         v = apic_read(APIC_ISR + ((SPURIOUS_APIC_VECTOR & ~0x1f) >> 1));
1715         if (v & (1 << (SPURIOUS_APIC_VECTOR & 0x1f)))
1716                 ack_APIC_irq();
1717
1718         inc_irq_stat(irq_spurious_count);
1719
1720         /* see sw-dev-man vol 3, chapter 7.4.13.5 */
1721         pr_info("spurious APIC interrupt on CPU#%d, "
1722                 "should never happen.\n", smp_processor_id());
1723         irq_exit();
1724 }
1725
1726 /*
1727  * This interrupt should never happen with our APIC/SMP architecture
1728  */
1729 void smp_error_interrupt(struct pt_regs *regs)
1730 {
1731         u32 v, v1;
1732
1733         exit_idle();
1734         irq_enter();
1735         /* First tickle the hardware, only then report what went on. -- REW */
1736         v = apic_read(APIC_ESR);
1737         apic_write(APIC_ESR, 0);
1738         v1 = apic_read(APIC_ESR);
1739         ack_APIC_irq();
1740         atomic_inc(&irq_err_count);
1741
1742         /*
1743          * Here is what the APIC error bits mean:
1744          * 0: Send CS error
1745          * 1: Receive CS error
1746          * 2: Send accept error
1747          * 3: Receive accept error
1748          * 4: Reserved
1749          * 5: Send illegal vector
1750          * 6: Received illegal vector
1751          * 7: Illegal register address
1752          */
1753         pr_debug("APIC error on CPU%d: %02x(%02x)\n",
1754                 smp_processor_id(), v , v1);
1755         irq_exit();
1756 }
1757
1758 /**
1759  * connect_bsp_APIC - attach the APIC to the interrupt system
1760  */
1761 void __init connect_bsp_APIC(void)
1762 {
1763 #ifdef CONFIG_X86_32
1764         if (pic_mode) {
1765                 /*
1766                  * Do not trust the local APIC being empty at bootup.
1767                  */
1768                 clear_local_APIC();
1769                 /*
1770                  * PIC mode, enable APIC mode in the IMCR, i.e.  connect BSP's
1771                  * local APIC to INT and NMI lines.
1772                  */
1773                 apic_printk(APIC_VERBOSE, "leaving PIC mode, "
1774                                 "enabling APIC mode.\n");
1775                 imcr_pic_to_apic();
1776         }
1777 #endif
1778         if (apic->enable_apic_mode)
1779                 apic->enable_apic_mode();
1780 }
1781
1782 /**
1783  * disconnect_bsp_APIC - detach the APIC from the interrupt system
1784  * @virt_wire_setup:    indicates, whether virtual wire mode is selected
1785  *
1786  * Virtual wire mode is necessary to deliver legacy interrupts even when the
1787  * APIC is disabled.
1788  */
1789 void disconnect_bsp_APIC(int virt_wire_setup)
1790 {
1791         unsigned int value;
1792
1793 #ifdef CONFIG_X86_32
1794         if (pic_mode) {
1795                 /*
1796                  * Put the board back into PIC mode (has an effect only on
1797                  * certain older boards).  Note that APIC interrupts, including
1798                  * IPIs, won't work beyond this point!  The only exception are
1799                  * INIT IPIs.
1800                  */
1801                 apic_printk(APIC_VERBOSE, "disabling APIC mode, "
1802                                 "entering PIC mode.\n");
1803                 imcr_apic_to_pic();
1804                 return;
1805         }
1806 #endif
1807
1808         /* Go back to Virtual Wire compatibility mode */
1809
1810         /* For the spurious interrupt use vector F, and enable it */
1811         value = apic_read(APIC_SPIV);
1812         value &= ~APIC_VECTOR_MASK;
1813         value |= APIC_SPIV_APIC_ENABLED;
1814         value |= 0xf;
1815         apic_write(APIC_SPIV, value);
1816
1817         if (!virt_wire_setup) {
1818                 /*
1819                  * For LVT0 make it edge triggered, active high,
1820                  * external and enabled
1821                  */
1822                 value = apic_read(APIC_LVT0);
1823                 value &= ~(APIC_MODE_MASK | APIC_SEND_PENDING |
1824                         APIC_INPUT_POLARITY | APIC_LVT_REMOTE_IRR |
1825                         APIC_LVT_LEVEL_TRIGGER | APIC_LVT_MASKED);
1826                 value |= APIC_LVT_REMOTE_IRR | APIC_SEND_PENDING;
1827                 value = SET_APIC_DELIVERY_MODE(value, APIC_MODE_EXTINT);
1828                 apic_write(APIC_LVT0, value);
1829         } else {
1830                 /* Disable LVT0 */
1831                 apic_write(APIC_LVT0, APIC_LVT_MASKED);
1832         }
1833
1834         /*
1835          * For LVT1 make it edge triggered, active high,
1836          * nmi and enabled
1837          */
1838         value = apic_read(APIC_LVT1);
1839         value &= ~(APIC_MODE_MASK | APIC_SEND_PENDING |
1840                         APIC_INPUT_POLARITY | APIC_LVT_REMOTE_IRR |
1841                         APIC_LVT_LEVEL_TRIGGER | APIC_LVT_MASKED);
1842         value |= APIC_LVT_REMOTE_IRR | APIC_SEND_PENDING;
1843         value = SET_APIC_DELIVERY_MODE(value, APIC_MODE_NMI);
1844         apic_write(APIC_LVT1, value);
1845 }
1846
1847 void __cpuinit generic_processor_info(int apicid, int version)
1848 {
1849         int cpu;
1850
1851         /*
1852          * Validate version
1853          */
1854         if (version == 0x0) {
1855                 pr_warning("BIOS bug, APIC version is 0 for CPU#%d! "
1856                            "fixing up to 0x10. (tell your hw vendor)\n",
1857                                 version);
1858                 version = 0x10;
1859         }
1860         apic_version[apicid] = version;
1861
1862         if (num_processors >= nr_cpu_ids) {
1863                 int max = nr_cpu_ids;
1864                 int thiscpu = max + disabled_cpus;
1865
1866                 pr_warning(
1867                         "ACPI: NR_CPUS/possible_cpus limit of %i reached."
1868                         "  Processor %d/0x%x ignored.\n", max, thiscpu, apicid);
1869
1870                 disabled_cpus++;
1871                 return;
1872         }
1873
1874         num_processors++;
1875         cpu = cpumask_next_zero(-1, cpu_present_mask);
1876
1877         if (version != apic_version[boot_cpu_physical_apicid])
1878                 WARN_ONCE(1,
1879                         "ACPI: apic version mismatch, bootcpu: %x cpu %d: %x\n",
1880                         apic_version[boot_cpu_physical_apicid], cpu, version);
1881
1882         physid_set(apicid, phys_cpu_present_map);
1883         if (apicid == boot_cpu_physical_apicid) {
1884                 /*
1885                  * x86_bios_cpu_apicid is required to have processors listed
1886                  * in same order as logical cpu numbers. Hence the first
1887                  * entry is BSP, and so on.
1888                  */
1889                 cpu = 0;
1890         }
1891         if (apicid > max_physical_apicid)
1892                 max_physical_apicid = apicid;
1893
1894 #if defined(CONFIG_SMP) || defined(CONFIG_X86_64)
1895         early_per_cpu(x86_cpu_to_apicid, cpu) = apicid;
1896         early_per_cpu(x86_bios_cpu_apicid, cpu) = apicid;
1897 #endif
1898
1899         set_cpu_possible(cpu, true);
1900         set_cpu_present(cpu, true);
1901 }
1902
1903 int hard_smp_processor_id(void)
1904 {
1905         return read_apic_id();
1906 }
1907
1908 void default_init_apic_ldr(void)
1909 {
1910         unsigned long val;
1911
1912         apic_write(APIC_DFR, APIC_DFR_VALUE);
1913         val = apic_read(APIC_LDR) & ~APIC_LDR_MASK;
1914         val |= SET_APIC_LOGICAL_ID(1UL << smp_processor_id());
1915         apic_write(APIC_LDR, val);
1916 }
1917
1918 #ifdef CONFIG_X86_32
1919 int default_apicid_to_node(int logical_apicid)
1920 {
1921 #ifdef CONFIG_SMP
1922         return apicid_2_node[hard_smp_processor_id()];
1923 #else
1924         return 0;
1925 #endif
1926 }
1927 #endif
1928
1929 /*
1930  * Power management
1931  */
1932 #ifdef CONFIG_PM
1933
1934 static struct {
1935         /*
1936          * 'active' is true if the local APIC was enabled by us and
1937          * not the BIOS; this signifies that we are also responsible
1938          * for disabling it before entering apm/acpi suspend
1939          */
1940         int active;
1941         /* r/w apic fields */
1942         unsigned int apic_id;
1943         unsigned int apic_taskpri;
1944         unsigned int apic_ldr;
1945         unsigned int apic_dfr;
1946         unsigned int apic_spiv;
1947         unsigned int apic_lvtt;
1948         unsigned int apic_lvtpc;
1949         unsigned int apic_lvt0;
1950         unsigned int apic_lvt1;
1951         unsigned int apic_lvterr;
1952         unsigned int apic_tmict;
1953         unsigned int apic_tdcr;
1954         unsigned int apic_thmr;
1955 } apic_pm_state;
1956
1957 static int lapic_suspend(struct sys_device *dev, pm_message_t state)
1958 {
1959         unsigned long flags;
1960         int maxlvt;
1961
1962         if (!apic_pm_state.active)
1963                 return 0;
1964
1965         maxlvt = lapic_get_maxlvt();
1966
1967         apic_pm_state.apic_id = apic_read(APIC_ID);
1968         apic_pm_state.apic_taskpri = apic_read(APIC_TASKPRI);
1969         apic_pm_state.apic_ldr = apic_read(APIC_LDR);
1970         apic_pm_state.apic_dfr = apic_read(APIC_DFR);
1971         apic_pm_state.apic_spiv = apic_read(APIC_SPIV);
1972         apic_pm_state.apic_lvtt = apic_read(APIC_LVTT);
1973         if (maxlvt >= 4)
1974                 apic_pm_state.apic_lvtpc = apic_read(APIC_LVTPC);
1975         apic_pm_state.apic_lvt0 = apic_read(APIC_LVT0);
1976         apic_pm_state.apic_lvt1 = apic_read(APIC_LVT1);
1977         apic_pm_state.apic_lvterr = apic_read(APIC_LVTERR);
1978         apic_pm_state.apic_tmict = apic_read(APIC_TMICT);
1979         apic_pm_state.apic_tdcr = apic_read(APIC_TDCR);
1980 #ifdef CONFIG_X86_THERMAL_VECTOR
1981         if (maxlvt >= 5)
1982                 apic_pm_state.apic_thmr = apic_read(APIC_LVTTHMR);
1983 #endif
1984
1985         local_irq_save(flags);
1986         disable_local_APIC();
1987
1988         if (intr_remapping_enabled)
1989                 disable_intr_remapping();
1990
1991         local_irq_restore(flags);
1992         return 0;
1993 }
1994
1995 static int lapic_resume(struct sys_device *dev)
1996 {
1997         unsigned int l, h;
1998         unsigned long flags;
1999         int maxlvt;
2000         int ret = 0;
2001         struct IO_APIC_route_entry **ioapic_entries = NULL;
2002
2003         if (!apic_pm_state.active)
2004                 return 0;
2005
2006         local_irq_save(flags);
2007         if (intr_remapping_enabled) {
2008                 ioapic_entries = alloc_ioapic_entries();
2009                 if (!ioapic_entries) {
2010                         WARN(1, "Alloc ioapic_entries in lapic resume failed.");
2011                         ret = -ENOMEM;
2012                         goto restore;
2013                 }
2014
2015                 ret = save_IO_APIC_setup(ioapic_entries);
2016                 if (ret) {
2017                         WARN(1, "Saving IO-APIC state failed: %d\n", ret);
2018                         free_ioapic_entries(ioapic_entries);
2019                         goto restore;
2020                 }
2021
2022                 mask_IO_APIC_setup(ioapic_entries);
2023                 legacy_pic->mask_all();
2024         }
2025
2026         if (x2apic_mode)
2027                 enable_x2apic();
2028         else {
2029                 /*
2030                  * Make sure the APICBASE points to the right address
2031                  *
2032                  * FIXME! This will be wrong if we ever support suspend on
2033                  * SMP! We'll need to do this as part of the CPU restore!
2034                  */
2035                 rdmsr(MSR_IA32_APICBASE, l, h);
2036                 l &= ~MSR_IA32_APICBASE_BASE;
2037                 l |= MSR_IA32_APICBASE_ENABLE | mp_lapic_addr;
2038                 wrmsr(MSR_IA32_APICBASE, l, h);
2039         }
2040
2041         maxlvt = lapic_get_maxlvt();
2042         apic_write(APIC_LVTERR, ERROR_APIC_VECTOR | APIC_LVT_MASKED);
2043         apic_write(APIC_ID, apic_pm_state.apic_id);
2044         apic_write(APIC_DFR, apic_pm_state.apic_dfr);
2045         apic_write(APIC_LDR, apic_pm_state.apic_ldr);
2046         apic_write(APIC_TASKPRI, apic_pm_state.apic_taskpri);
2047         apic_write(APIC_SPIV, apic_pm_state.apic_spiv);
2048         apic_write(APIC_LVT0, apic_pm_state.apic_lvt0);
2049         apic_write(APIC_LVT1, apic_pm_state.apic_lvt1);
2050 #if defined(CONFIG_X86_MCE_P4THERMAL) || defined(CONFIG_X86_MCE_INTEL)
2051         if (maxlvt >= 5)
2052                 apic_write(APIC_LVTTHMR, apic_pm_state.apic_thmr);
2053 #endif
2054         if (maxlvt >= 4)
2055                 apic_write(APIC_LVTPC, apic_pm_state.apic_lvtpc);
2056         apic_write(APIC_LVTT, apic_pm_state.apic_lvtt);
2057         apic_write(APIC_TDCR, apic_pm_state.apic_tdcr);
2058         apic_write(APIC_TMICT, apic_pm_state.apic_tmict);
2059         apic_write(APIC_ESR, 0);
2060         apic_read(APIC_ESR);
2061         apic_write(APIC_LVTERR, apic_pm_state.apic_lvterr);
2062         apic_write(APIC_ESR, 0);
2063         apic_read(APIC_ESR);
2064
2065         if (intr_remapping_enabled) {
2066                 reenable_intr_remapping(x2apic_mode);
2067                 legacy_pic->restore_mask();
2068                 restore_IO_APIC_setup(ioapic_entries);
2069                 free_ioapic_entries(ioapic_entries);
2070         }
2071 restore:
2072         local_irq_restore(flags);
2073
2074         return ret;
2075 }
2076
2077 /*
2078  * This device has no shutdown method - fully functioning local APICs
2079  * are needed on every CPU up until machine_halt/restart/poweroff.
2080  */
2081
2082 static struct sysdev_class lapic_sysclass = {
2083         .name           = "lapic",
2084         .resume         = lapic_resume,
2085         .suspend        = lapic_suspend,
2086 };
2087
2088 static struct sys_device device_lapic = {
2089         .id     = 0,
2090         .cls    = &lapic_sysclass,
2091 };
2092
2093 static void __cpuinit apic_pm_activate(void)
2094 {
2095         apic_pm_state.active = 1;
2096 }
2097
2098 static int __init init_lapic_sysfs(void)
2099 {
2100         int error;
2101
2102         if (!cpu_has_apic)
2103                 return 0;
2104         /* XXX: remove suspend/resume procs if !apic_pm_state.active? */
2105
2106         error = sysdev_class_register(&lapic_sysclass);
2107         if (!error)
2108                 error = sysdev_register(&device_lapic);
2109         return error;
2110 }
2111
2112 /* local apic needs to resume before other devices access its registers. */
2113 core_initcall(init_lapic_sysfs);
2114
2115 #else   /* CONFIG_PM */
2116
2117 static void apic_pm_activate(void) { }
2118
2119 #endif  /* CONFIG_PM */
2120
2121 #ifdef CONFIG_X86_64
2122
2123 static int __cpuinit apic_cluster_num(void)
2124 {
2125         int i, clusters, zeros;
2126         unsigned id;
2127         u16 *bios_cpu_apicid;
2128         DECLARE_BITMAP(clustermap, NUM_APIC_CLUSTERS);
2129
2130         bios_cpu_apicid = early_per_cpu_ptr(x86_bios_cpu_apicid);
2131         bitmap_zero(clustermap, NUM_APIC_CLUSTERS);
2132
2133         for (i = 0; i < nr_cpu_ids; i++) {
2134                 /* are we being called early in kernel startup? */
2135                 if (bios_cpu_apicid) {
2136                         id = bios_cpu_apicid[i];
2137                 } else if (i < nr_cpu_ids) {
2138                         if (cpu_present(i))
2139                                 id = per_cpu(x86_bios_cpu_apicid, i);
2140                         else
2141                                 continue;
2142                 } else
2143                         break;
2144
2145                 if (id != BAD_APICID)
2146                         __set_bit(APIC_CLUSTERID(id), clustermap);
2147         }
2148
2149         /* Problem:  Partially populated chassis may not have CPUs in some of
2150          * the APIC clusters they have been allocated.  Only present CPUs have
2151          * x86_bios_cpu_apicid entries, thus causing zeroes in the bitmap.
2152          * Since clusters are allocated sequentially, count zeros only if
2153          * they are bounded by ones.
2154          */
2155         clusters = 0;
2156         zeros = 0;
2157         for (i = 0; i < NUM_APIC_CLUSTERS; i++) {
2158                 if (test_bit(i, clustermap)) {
2159                         clusters += 1 + zeros;
2160                         zeros = 0;
2161                 } else
2162                         ++zeros;
2163         }
2164
2165         return clusters;
2166 }
2167
2168 static int __cpuinitdata multi_checked;
2169 static int __cpuinitdata multi;
2170
2171 static int __cpuinit set_multi(const struct dmi_system_id *d)
2172 {
2173         if (multi)
2174                 return 0;
2175         pr_info("APIC: %s detected, Multi Chassis\n", d->ident);
2176         multi = 1;
2177         return 0;
2178 }
2179
2180 static const __cpuinitconst struct dmi_system_id multi_dmi_table[] = {
2181         {
2182                 .callback = set_multi,
2183                 .ident = "IBM System Summit2",
2184                 .matches = {
2185                         DMI_MATCH(DMI_SYS_VENDOR, "IBM"),
2186                         DMI_MATCH(DMI_PRODUCT_NAME, "Summit2"),
2187                 },
2188         },
2189         {}
2190 };
2191
2192 static void __cpuinit dmi_check_multi(void)
2193 {
2194         if (multi_checked)
2195                 return;
2196
2197         dmi_check_system(multi_dmi_table);
2198         multi_checked = 1;
2199 }
2200
2201 /*
2202  * apic_is_clustered_box() -- Check if we can expect good TSC
2203  *
2204  * Thus far, the major user of this is IBM's Summit2 series:
2205  * Clustered boxes may have unsynced TSC problems if they are
2206  * multi-chassis.
2207  * Use DMI to check them
2208  */
2209 __cpuinit int apic_is_clustered_box(void)
2210 {
2211         dmi_check_multi();
2212         if (multi)
2213                 return 1;
2214
2215         if (!is_vsmp_box())
2216                 return 0;
2217
2218         /*
2219          * ScaleMP vSMPowered boxes have one cluster per board and TSCs are
2220          * not guaranteed to be synced between boards
2221          */
2222         if (apic_cluster_num() > 1)
2223                 return 1;
2224
2225         return 0;
2226 }
2227 #endif
2228
2229 /*
2230  * APIC command line parameters
2231  */
2232 static int __init setup_disableapic(char *arg)
2233 {
2234         disable_apic = 1;
2235         setup_clear_cpu_cap(X86_FEATURE_APIC);
2236         return 0;
2237 }
2238 early_param("disableapic", setup_disableapic);
2239
2240 /* same as disableapic, for compatibility */
2241 static int __init setup_nolapic(char *arg)
2242 {
2243         return setup_disableapic(arg);
2244 }
2245 early_param("nolapic", setup_nolapic);
2246
2247 static int __init parse_lapic_timer_c2_ok(char *arg)
2248 {
2249         local_apic_timer_c2_ok = 1;
2250         return 0;
2251 }
2252 early_param("lapic_timer_c2_ok", parse_lapic_timer_c2_ok);
2253
2254 static int __init parse_disable_apic_timer(char *arg)
2255 {
2256         disable_apic_timer = 1;
2257         return 0;
2258 }
2259 early_param("noapictimer", parse_disable_apic_timer);
2260
2261 static int __init parse_nolapic_timer(char *arg)
2262 {
2263         disable_apic_timer = 1;
2264         return 0;
2265 }
2266 early_param("nolapic_timer", parse_nolapic_timer);
2267
2268 static int __init apic_set_verbosity(char *arg)
2269 {
2270         if (!arg)  {
2271 #ifdef CONFIG_X86_64
2272                 skip_ioapic_setup = 0;
2273                 return 0;
2274 #endif
2275                 return -EINVAL;
2276         }
2277
2278         if (strcmp("debug", arg) == 0)
2279                 apic_verbosity = APIC_DEBUG;
2280         else if (strcmp("verbose", arg) == 0)
2281                 apic_verbosity = APIC_VERBOSE;
2282         else {
2283                 pr_warning("APIC Verbosity level %s not recognised"
2284                         " use apic=verbose or apic=debug\n", arg);
2285                 return -EINVAL;
2286         }
2287
2288         return 0;
2289 }
2290 early_param("apic", apic_set_verbosity);
2291
2292 static int __init lapic_insert_resource(void)
2293 {
2294         if (!apic_phys)
2295                 return -1;
2296
2297         /* Put local APIC into the resource map. */
2298         lapic_resource.start = apic_phys;
2299         lapic_resource.end = lapic_resource.start + PAGE_SIZE - 1;
2300         insert_resource(&iomem_resource, &lapic_resource);
2301
2302         return 0;
2303 }
2304
2305 /*
2306  * need call insert after e820_reserve_resources()
2307  * that is using request_resource
2308  */
2309 late_initcall(lapic_insert_resource);