]> git.kernelconcepts.de Git - karo-tx-linux.git/blobdiff - arch/x86/kernel/apic_64.c
Merge branch 'linus' into x86/x2apic
[karo-tx-linux.git] / arch / x86 / kernel / apic_64.c
index c75f58a66d8e16b895d22f347965463cb839db3d..cd63c0bc61802a5415a3f8917af5e02bffd459ed 100644 (file)
@@ -61,7 +61,7 @@ EXPORT_SYMBOL_GPL(local_apic_timer_c2_ok);
 /*
  * Debug level, exported for io_apic.c
  */
-int apic_verbosity;
+unsigned int apic_verbosity;
 
 /* Have we found an MP table */
 int smp_found_config;
@@ -167,7 +167,6 @@ u64 xapic_icr_read(void)
 static struct apic_ops xapic_ops = {
        .read = native_apic_mem_read,
        .write = native_apic_mem_write,
-       .write_atomic = native_apic_mem_write_atomic,
        .icr_read = xapic_icr_read,
        .icr_write = xapic_icr_write,
        .wait_icr_idle = xapic_wait_icr_idle,
@@ -206,7 +205,6 @@ u64 x2apic_icr_read(void)
 static struct apic_ops x2apic_ops = {
        .read = native_apic_msr_read,
        .write = native_apic_msr_write,
-       .write_atomic = native_apic_msr_write,
        .icr_read = x2apic_icr_read,
        .icr_write = x2apic_icr_write,
        .wait_icr_idle = x2apic_wait_icr_idle,
@@ -386,7 +384,7 @@ static void setup_APIC_timer(void)
 
 #define TICK_COUNT 100000000
 
-static void __init calibrate_APIC_clock(void)
+static int __init calibrate_APIC_clock(void)
 {
        unsigned apic, apic_start;
        unsigned long tsc, tsc_start;
@@ -440,6 +438,17 @@ static void __init calibrate_APIC_clock(void)
                clockevent_delta2ns(0xF, &lapic_clockevent);
 
        calibration_result = result / HZ;
+
+       /*
+        * Do a sanity check on the APIC calibration result
+        */
+       if (calibration_result < (1000000 / HZ)) {
+               printk(KERN_WARNING
+                       "APIC frequency too slow, disabling apic timer\n");
+               return -1;
+       }
+
+       return 0;
 }
 
 /*
@@ -466,14 +475,7 @@ void __init setup_boot_APIC_clock(void)
        }
 
        printk(KERN_INFO "Using local APIC timer interrupts.\n");
-       calibrate_APIC_clock();
-
-       /*
-        * Do a sanity check on the APIC calibration result
-        */
-       if (calibration_result < (1000000 / HZ)) {
-               printk(KERN_WARNING
-                      "APIC frequency too slow, disabling apic timer\n");
+       if (calibrate_APIC_clock()) {
                /* No broadcast on UP ! */
                if (num_possible_cpus() > 1)
                        setup_APIC_timer();
@@ -1554,7 +1556,7 @@ early_param("apic", apic_set_verbosity);
 static __init int setup_disableapic(char *str)
 {
        disable_apic = 1;
-       clear_cpu_cap(&boot_cpu_data, X86_FEATURE_APIC);
+       setup_clear_cpu_cap(X86_FEATURE_APIC);
        return 0;
 }
 early_param("disableapic", setup_disableapic);