]> git.openfabrics.org - ~emulex/infiniband.git/commitdiff
x86: fold apic_ops into genapic
authorYinghai Lu <yinghai@kernel.org>
Tue, 17 Feb 2009 07:02:14 +0000 (23:02 -0800)
committerIngo Molnar <mingo@elte.hu>
Tue, 17 Feb 2009 11:22:20 +0000 (12:22 +0100)
Impact: cleanup

make it simpler, don't need have one extra struct.

v2: fix the sgi_uv build

Signed-off-by: Yinghai Lu <yinghai@kernel.org>
Cc: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
24 files changed:
arch/x86/include/asm/apic.h
arch/x86/include/asm/genapic.h
arch/x86/kernel/apic.c
arch/x86/kernel/bigsmp_32.c
arch/x86/kernel/cpu/mcheck/mce_amd_64.c
arch/x86/kernel/cpu/mcheck/mce_intel_64.c
arch/x86/kernel/cpu/perfctr-watchdog.c
arch/x86/kernel/es7000_32.c
arch/x86/kernel/genapic_64.c
arch/x86/kernel/genapic_flat_64.c
arch/x86/kernel/genx2apic_cluster.c
arch/x86/kernel/genx2apic_phys.c
arch/x86/kernel/genx2apic_uv_x.c
arch/x86/kernel/ipi.c
arch/x86/kernel/irq.c
arch/x86/kernel/nmi.c
arch/x86/kernel/numaq_32.c
arch/x86/kernel/probe_32.c
arch/x86/kernel/summit_32.c
arch/x86/kernel/uv_irq.c
arch/x86/kernel/vmi_32.c
arch/x86/kernel/vmiclock_32.c
arch/x86/lguest/boot.c
arch/x86/xen/enlighten.c

index dc1db99cd40e928c195b07736de40269b74ab1ee..4f56e053d3478e275fcb668c9d7f8263eb4b24b7 100644 (file)
@@ -92,6 +92,12 @@ static inline u32 native_apic_mem_read(u32 reg)
        return *((volatile u32 *)(APIC_BASE + reg));
 }
 
+extern void native_apic_wait_icr_idle(void);
+extern u32 native_safe_apic_wait_icr_idle(void);
+extern void native_apic_icr_write(u32 low, u32 id);
+extern u64 native_apic_icr_read(void);
+
+#ifdef CONFIG_X86_X2APIC
 static inline void native_apic_msr_write(u32 reg, u32 v)
 {
        if (reg == APIC_DFR || reg == APIC_ID || reg == APIC_LDR ||
@@ -112,7 +118,31 @@ static inline u32 native_apic_msr_read(u32 reg)
        return low;
 }
 
-#ifdef CONFIG_X86_X2APIC
+static inline void native_x2apic_wait_icr_idle(void)
+{
+       /* no need to wait for icr idle in x2apic */
+       return;
+}
+
+static inline u32 native_safe_x2apic_wait_icr_idle(void)
+{
+       /* no need to wait for icr idle in x2apic */
+       return 0;
+}
+
+static inline void native_x2apic_icr_write(u32 low, u32 id)
+{
+       wrmsrl(APIC_BASE_MSR + (APIC_ICR >> 4), ((__u64) id) << 32 | low);
+}
+
+static inline u64 native_x2apic_icr_read(void)
+{
+       unsigned long val;
+
+       rdmsrl(APIC_BASE_MSR + (APIC_ICR >> 4), val);
+       return val;
+}
+
 extern int x2apic;
 extern void check_x2apic(void);
 extern void enable_x2apic(void);
@@ -146,47 +176,6 @@ static inline int x2apic_enabled(void)
 }
 #endif
 
-struct apic_ops {
-       u32 (*read)(u32 reg);
-       void (*write)(u32 reg, u32 v);
-       u64 (*icr_read)(void);
-       void (*icr_write)(u32 low, u32 high);
-       void (*wait_icr_idle)(void);
-       u32 (*safe_wait_icr_idle)(void);
-};
-
-extern struct apic_ops *apic_ops;
-
-static inline u32 apic_read(u32 reg)
-{
-       return apic_ops->read(reg);
-}
-
-static inline void apic_write(u32 reg, u32 val)
-{
-       apic_ops->write(reg, val);
-}
-
-static inline u64 apic_icr_read(void)
-{
-       return apic_ops->icr_read();
-}
-
-static inline void apic_icr_write(u32 low, u32 high)
-{
-       apic_ops->icr_write(low, high);
-}
-
-static inline void apic_wait_icr_idle(void)
-{
-       apic_ops->wait_icr_idle();
-}
-
-static inline u32 safe_apic_wait_icr_idle(void)
-{
-       return apic_ops->safe_wait_icr_idle();
-}
-
 extern int get_physical_broadcast(void);
 
 #ifdef CONFIG_X86_X2APIC
@@ -197,18 +186,6 @@ static inline void ack_x2APIC_irq(void)
 }
 #endif
 
-
-static inline void ack_APIC_irq(void)
-{
-       /*
-        * ack_APIC_irq() actually gets compiled as a single instruction
-        * ... yummie.
-        */
-
-       /* Docs say use 0 for future compatibility */
-       apic_write(APIC_EOI, 0);
-}
-
 extern int lapic_get_maxlvt(void);
 extern void clear_local_APIC(void);
 extern void connect_bsp_APIC(void);
@@ -256,18 +233,6 @@ static inline void disable_local_APIC(void) { }
 #define        SET_APIC_ID(x)          (apic->set_apic_id(x))
 #else
 
-#ifdef CONFIG_X86_LOCAL_APIC
-static inline unsigned default_get_apic_id(unsigned long x)
-{
-       unsigned int ver = GET_APIC_VERSION(apic_read(APIC_LVR));
-
-       if (APIC_XAPIC(ver))
-               return (x >> 24) & 0xFF;
-       else
-               return (x >> 24) & 0x0F;
-}
-#endif
-
 #endif
 
 #endif /* _ASM_X86_APIC_H */
index 273b99452ae092dacf633116dcaa78ec2406fd63..a6d0b00a544cf7bf4fdd7209d0f0f0cdd84d4b7c 100644 (file)
@@ -5,6 +5,7 @@
 
 #include <asm/mpspec.h>
 #include <asm/atomic.h>
+#include <asm/apic.h>
 
 /*
  * Copyright 2004 James Cleverdon, IBM.
@@ -83,10 +84,70 @@ struct genapic {
        void (*smp_callin_clear_local_apic)(void);
        void (*store_NMI_vector)(unsigned short *high, unsigned short *low);
        void (*inquire_remote_apic)(int apicid);
+
+       /* apic ops */
+       u32 (*read)(u32 reg);
+       void (*write)(u32 reg, u32 v);
+       u64 (*icr_read)(void);
+       void (*icr_write)(u32 low, u32 high);
+       void (*wait_icr_idle)(void);
+       u32 (*safe_wait_icr_idle)(void);
 };
 
 extern struct genapic *apic;
 
+static inline u32 apic_read(u32 reg)
+{
+       return apic->read(reg);
+}
+
+static inline void apic_write(u32 reg, u32 val)
+{
+       apic->write(reg, val);
+}
+
+static inline u64 apic_icr_read(void)
+{
+       return apic->icr_read();
+}
+
+static inline void apic_icr_write(u32 low, u32 high)
+{
+       apic->icr_write(low, high);
+}
+
+static inline void apic_wait_icr_idle(void)
+{
+       apic->wait_icr_idle();
+}
+
+static inline u32 safe_apic_wait_icr_idle(void)
+{
+       return apic->safe_wait_icr_idle();
+}
+
+
+static inline void ack_APIC_irq(void)
+{
+       /*
+        * ack_APIC_irq() actually gets compiled as a single instruction
+        * ... yummie.
+        */
+
+       /* Docs say use 0 for future compatibility */
+       apic_write(APIC_EOI, 0);
+}
+
+static inline unsigned default_get_apic_id(unsigned long x)
+{
+       unsigned int ver = GET_APIC_VERSION(apic_read(APIC_LVR));
+
+       if (APIC_XAPIC(ver))
+               return (x >> 24) & 0xFF;
+       else
+               return (x >> 24) & 0x0F;
+}
+
 /*
  * Warm reset vector default position:
  */
index 004aa1c31e4f42e20ee4b7a45ee47d3a8b02836f..af494bad885874c323969abbb3da85bae73beba7 100644 (file)
@@ -210,18 +210,13 @@ static int modern_apic(void)
        return lapic_get_version() >= 0x14;
 }
 
-/*
- * Paravirt kernels also might be using these below ops. So we still
- * use generic apic_read()/apic_write(), which might be pointing to different
- * ops in PARAVIRT case.
- */
-void xapic_wait_icr_idle(void)
+void native_apic_wait_icr_idle(void)
 {
        while (apic_read(APIC_ICR) & APIC_ICR_BUSY)
                cpu_relax();
 }
 
-u32 safe_xapic_wait_icr_idle(void)
+u32 native_safe_apic_wait_icr_idle(void)
 {
        u32 send_status;
        int timeout;
@@ -237,13 +232,13 @@ u32 safe_xapic_wait_icr_idle(void)
        return send_status;
 }
 
-void xapic_icr_write(u32 low, u32 id)
+void native_apic_icr_write(u32 low, u32 id)
 {
        apic_write(APIC_ICR2, SET_APIC_DEST_FIELD(id));
        apic_write(APIC_ICR, low);
 }
 
-static u64 xapic_icr_read(void)
+u64 native_apic_icr_read(void)
 {
        u32 icr1, icr2;
 
@@ -253,54 +248,6 @@ static u64 xapic_icr_read(void)
        return icr1 | ((u64)icr2 << 32);
 }
 
-static struct apic_ops xapic_ops = {
-       .read = native_apic_mem_read,
-       .write = native_apic_mem_write,
-       .icr_read = xapic_icr_read,
-       .icr_write = xapic_icr_write,
-       .wait_icr_idle = xapic_wait_icr_idle,
-       .safe_wait_icr_idle = safe_xapic_wait_icr_idle,
-};
-
-struct apic_ops __read_mostly *apic_ops = &xapic_ops;
-EXPORT_SYMBOL_GPL(apic_ops);
-
-#ifdef CONFIG_X86_X2APIC
-static void x2apic_wait_icr_idle(void)
-{
-       /* no need to wait for icr idle in x2apic */
-       return;
-}
-
-static u32 safe_x2apic_wait_icr_idle(void)
-{
-       /* no need to wait for icr idle in x2apic */
-       return 0;
-}
-
-void x2apic_icr_write(u32 low, u32 id)
-{
-       wrmsrl(APIC_BASE_MSR + (APIC_ICR >> 4), ((__u64) id) << 32 | low);
-}
-
-static u64 x2apic_icr_read(void)
-{
-       unsigned long val;
-
-       rdmsrl(APIC_BASE_MSR + (APIC_ICR >> 4), val);
-       return val;
-}
-
-static struct apic_ops x2apic_ops = {
-       .read = native_apic_msr_read,
-       .write = native_apic_msr_write,
-       .icr_read = x2apic_icr_read,
-       .icr_write = x2apic_icr_write,
-       .wait_icr_idle = x2apic_wait_icr_idle,
-       .safe_wait_icr_idle = safe_x2apic_wait_icr_idle,
-};
-#endif
-
 /**
  * enable_NMI_through_LVT0 - enable NMI through local vector table 0
  */
@@ -1329,7 +1276,6 @@ void check_x2apic(void)
        if (msr & X2APIC_ENABLE) {
                pr_info("x2apic enabled by BIOS, switching to x2apic ops\n");
                x2apic_preenabled = x2apic = 1;
-               apic_ops = &x2apic_ops;
        }
 }
 
@@ -1403,7 +1349,6 @@ void __init enable_IR_x2apic(void)
 
        if (!x2apic) {
                x2apic = 1;
-               apic_ops = &x2apic_ops;
                enable_x2apic();
        }
 
index 47a62f46afdbda3c04ffe9a756321617ca85434c..9eeb714c5ded82eb1fe3bfc17610b411802832a2 100644 (file)
@@ -263,4 +263,11 @@ struct genapic apic_bigsmp = {
        .smp_callin_clear_local_apic    = NULL,
        .store_NMI_vector               = NULL,
        .inquire_remote_apic            = default_inquire_remote_apic,
+
+       .read                           = native_apic_mem_read,
+       .write                          = native_apic_mem_write,
+       .icr_read                       = native_apic_icr_read,
+       .icr_write                      = native_apic_icr_write,
+       .wait_icr_idle                  = native_apic_wait_icr_idle,
+       .safe_wait_icr_idle             = native_safe_apic_wait_icr_idle,
 };
index 4772e91e82465e3c4dd048d68f5f52fe440fe16a..e22d6ed26e610360d28589f0bc6c144fb8db3117 100644 (file)
@@ -24,7 +24,7 @@
 #include <linux/smp.h>
 #include <linux/sysdev.h>
 #include <linux/sysfs.h>
-#include <asm/apic.h>
+#include <asm/genapic.h>
 #include <asm/mce.h>
 #include <asm/msr.h>
 #include <asm/percpu.h>
index 5e8c79e748a65ef02c41c8170c36c26a85e130d3..42f090702f02f0bd173051622e176548267be999 100644 (file)
@@ -7,7 +7,7 @@
 #include <linux/interrupt.h>
 #include <linux/percpu.h>
 #include <asm/processor.h>
-#include <asm/apic.h>
+#include <asm/genapic.h>
 #include <asm/msr.h>
 #include <asm/mce.h>
 #include <asm/hw_irq.h>
index 9abd48b2267413a4212b18d0cb627325703b90de..f6c70a164e320eeb58ab097ce7ee2d9079e29ce4 100644 (file)
@@ -19,7 +19,7 @@
 #include <linux/nmi.h>
 #include <linux/kprobes.h>
 
-#include <asm/apic.h>
+#include <asm/genapic.h>
 #include <asm/intel_arch_perfmon.h>
 
 struct nmi_watchdog_ctlblk {
index 55515d73d9c2c4746cd7aba2a1c1560da5b82e1d..23f1df4ce18eee04f195bb66ea2289f7d6afaaf6 100644 (file)
@@ -806,4 +806,11 @@ struct genapic apic_es7000 = {
        .smp_callin_clear_local_apic    = NULL,
        .store_NMI_vector               = NULL,
        .inquire_remote_apic            = default_inquire_remote_apic,
+
+       .read                           = native_apic_mem_read,
+       .write                          = native_apic_mem_write,
+       .icr_read                       = native_apic_icr_read,
+       .icr_write                      = native_apic_icr_write,
+       .wait_icr_idle                  = native_apic_wait_icr_idle,
+       .safe_wait_icr_idle             = native_safe_apic_wait_icr_idle,
 };
index cdc4772d9c874fadb29ac4a31c78c53586180158..70b616b4c6295bc14cead569ea28df054022ab9c 100644 (file)
@@ -19,8 +19,8 @@
 #include <linux/dmar.h>
 
 #include <asm/smp.h>
-#include <asm/ipi.h>
 #include <asm/genapic.h>
+#include <asm/ipi.h>
 #include <asm/setup.h>
 
 extern struct genapic apic_flat;
index 249d2d3c034ce24f6fa2b7b6083012e4c8a7dad5..36ee760fd1332370956651ac7634e4bf5c19387a 100644 (file)
@@ -17,8 +17,8 @@
 #include <linux/init.h>
 #include <linux/hardirq.h>
 #include <asm/smp.h>
-#include <asm/ipi.h>
 #include <asm/genapic.h>
+#include <asm/ipi.h>
 
 #ifdef CONFIG_ACPI
 #include <acpi/acpi_bus.h>
@@ -229,6 +229,13 @@ struct genapic apic_flat =  {
        .smp_callin_clear_local_apic    = NULL,
        .store_NMI_vector               = NULL,
        .inquire_remote_apic            = NULL,
+
+       .read                           = native_apic_mem_read,
+       .write                          = native_apic_mem_write,
+       .icr_read                       = native_apic_icr_read,
+       .icr_write                      = native_apic_icr_write,
+       .wait_icr_idle                  = native_apic_wait_icr_idle,
+       .safe_wait_icr_idle             = native_safe_apic_wait_icr_idle,
 };
 
 /*
@@ -374,4 +381,11 @@ struct genapic apic_physflat =  {
        .smp_callin_clear_local_apic    = NULL,
        .store_NMI_vector               = NULL,
        .inquire_remote_apic            = NULL,
+
+       .read                           = native_apic_mem_read,
+       .write                          = native_apic_mem_write,
+       .icr_read                       = native_apic_icr_read,
+       .icr_write                      = native_apic_icr_write,
+       .wait_icr_idle                  = native_apic_wait_icr_idle,
+       .safe_wait_icr_idle             = native_safe_apic_wait_icr_idle,
 };
index 7c87156b641189e43ba79c435c180297fd3a4b36..dd6e8d6854261a819a6b62543dd47a9d34ab434e 100644 (file)
@@ -7,8 +7,8 @@
 #include <linux/dmar.h>
 
 #include <asm/smp.h>
-#include <asm/ipi.h>
 #include <asm/genapic.h>
+#include <asm/ipi.h>
 
 DEFINE_PER_CPU(u32, x86_cpu_to_logical_apicid);
 
@@ -46,7 +46,7 @@ static void
        /*
         * send the IPI.
         */
-       x2apic_icr_write(cfg, apicid);
+       native_x2apic_icr_write(cfg, apicid);
 }
 
 /*
@@ -234,4 +234,11 @@ struct genapic apic_x2apic_cluster = {
        .smp_callin_clear_local_apic    = NULL,
        .store_NMI_vector               = NULL,
        .inquire_remote_apic            = NULL,
+
+       .read                           = native_apic_msr_read,
+       .write                          = native_apic_msr_write,
+       .icr_read                       = native_x2apic_icr_read,
+       .icr_write                      = native_x2apic_icr_write,
+       .wait_icr_idle                  = native_x2apic_wait_icr_idle,
+       .safe_wait_icr_idle             = native_safe_x2apic_wait_icr_idle,
 };
index 5cbae8aa0408886a874bfa5e7263e720abb7b1e2..eb1486bb002e34208239b35266e00c7241ad4489 100644 (file)
@@ -7,8 +7,8 @@
 #include <linux/dmar.h>
 
 #include <asm/smp.h>
-#include <asm/ipi.h>
 #include <asm/genapic.h>
+#include <asm/ipi.h>
 
 static int x2apic_phys;
 
@@ -50,7 +50,7 @@ static void __x2apic_send_IPI_dest(unsigned int apicid, int vector,
        /*
         * send the IPI.
         */
-       x2apic_icr_write(cfg, apicid);
+       native_x2apic_icr_write(cfg, apicid);
 }
 
 static void x2apic_send_IPI_mask(const struct cpumask *mask, int vector)
@@ -220,4 +220,11 @@ struct genapic apic_x2apic_phys = {
        .smp_callin_clear_local_apic    = NULL,
        .store_NMI_vector               = NULL,
        .inquire_remote_apic            = NULL,
+
+       .read                           = native_apic_msr_read,
+       .write                          = native_apic_msr_write,
+       .icr_read                       = native_x2apic_icr_read,
+       .icr_write                      = native_x2apic_icr_write,
+       .wait_icr_idle                  = native_x2apic_wait_icr_idle,
+       .safe_wait_icr_idle             = native_safe_x2apic_wait_icr_idle,
 };
index 89b84e004f04bcca637580682ad13167eb68562c..9ae4a92fac8c867cdd222ef5c91a258664828143 100644 (file)
@@ -22,8 +22,8 @@
 #include <linux/proc_fs.h>
 #include <asm/current.h>
 #include <asm/smp.h>
-#include <asm/ipi.h>
 #include <asm/genapic.h>
+#include <asm/ipi.h>
 #include <asm/pgtable.h>
 #include <asm/uv/uv.h>
 #include <asm/uv/uv_mmrs.h>
@@ -292,6 +292,13 @@ struct genapic apic_x2apic_uv_x = {
        .smp_callin_clear_local_apic    = NULL,
        .store_NMI_vector               = NULL,
        .inquire_remote_apic            = NULL,
+
+       .read                           = native_apic_msr_read,
+       .write                          = native_apic_msr_write,
+       .icr_read                       = native_x2apic_icr_read,
+       .icr_write                      = native_x2apic_icr_write,
+       .wait_icr_idle                  = native_x2apic_wait_icr_idle,
+       .safe_wait_icr_idle             = native_safe_x2apic_wait_icr_idle,
 };
 
 static __cpuinit void set_x2apic_extra_bits(int pnode)
index dbf5445727a9d69d5cd02e07ff7c675c916bb0d9..1326272cae431a1e03798f1020293d5e0e063a9e 100644 (file)
@@ -15,7 +15,7 @@
 #include <asm/mtrr.h>
 #include <asm/tlbflush.h>
 #include <asm/mmu_context.h>
-#include <asm/apic.h>
+#include <asm/genapic.h>
 #include <asm/proto.h>
 #include <asm/ipi.h>
 
index f13ca1650aafce84b1ecf5c1e665f1bbf4a9f5c6..3957776b1930b1668880d011a0cea75118e0e856 100644 (file)
@@ -8,7 +8,7 @@
 #include <linux/smp.h>
 #include <linux/ftrace.h>
 
-#include <asm/apic.h>
+#include <asm/genapic.h>
 #include <asm/io_apic.h>
 #include <asm/irq.h>
 #include <asm/idle.h>
index bdfad80c3cf196e752f8cf16ce8a3f37ed096c6c..48b9ca5e088c0a9d9d100fe244caf1a4a8f531ac 100644 (file)
@@ -11,7 +11,7 @@
  *  Mikael Pettersson  : PM converted to driver model. Disable/enable API.
  */
 
-#include <asm/apic.h>
+#include <asm/genapic.h>
 
 #include <linux/nmi.h>
 #include <linux/mm.h>
index 0cc41a1d25504e81d87493165fa62b4499f59a96..f0f0c2f0596b359f955502d19422e3d5da4085b7 100644 (file)
@@ -569,4 +569,11 @@ struct genapic apic_numaq = {
        .smp_callin_clear_local_apic    = numaq_smp_callin_clear_local_apic,
        .store_NMI_vector               = numaq_store_NMI_vector,
        .inquire_remote_apic            = NULL,
+
+       .read                           = native_apic_mem_read,
+       .write                          = native_apic_mem_write,
+       .icr_read                       = native_apic_icr_read,
+       .icr_write                      = native_apic_icr_write,
+       .wait_icr_idle                  = native_apic_wait_icr_idle,
+       .safe_wait_icr_idle             = native_safe_apic_wait_icr_idle,
 };
index 22337b75de6221e63c2a53a40cdf8c6ebe677edc..1f701caa95bcc92b3a07505040c0c46bfa26796e 100644 (file)
@@ -127,6 +127,13 @@ struct genapic apic_default = {
        .smp_callin_clear_local_apic    = NULL,
        .store_NMI_vector               = NULL,
        .inquire_remote_apic            = default_inquire_remote_apic,
+
+       .read                           = native_apic_mem_read,
+       .write                          = native_apic_mem_write,
+       .icr_read                       = native_apic_icr_read,
+       .icr_write                      = native_apic_icr_write,
+       .wait_icr_idle                  = native_apic_wait_icr_idle,
+       .safe_wait_icr_idle             = native_safe_apic_wait_icr_idle,
 };
 
 extern struct genapic apic_numaq;
index 1e733eff9b331a7e7851f1f8513f3d3a31f9819c..1cf32c325d12dcf520396313f2a004ba5e9e0c0b 100644 (file)
@@ -599,4 +599,11 @@ struct genapic apic_summit = {
        .smp_callin_clear_local_apic    = NULL,
        .store_NMI_vector               = NULL,
        .inquire_remote_apic            = default_inquire_remote_apic,
+
+       .read                           = native_apic_mem_read,
+       .write                          = native_apic_mem_write,
+       .icr_read                       = native_apic_icr_read,
+       .icr_write                      = native_apic_icr_write,
+       .wait_icr_idle                  = native_apic_wait_icr_idle,
+       .safe_wait_icr_idle             = native_safe_apic_wait_icr_idle,
 };
index aeef529917e44f896d6e05c77c2b6232e84c8361..75eb5ec5dd2a770078d518ff7fe54c364367fc4f 100644 (file)
@@ -11,7 +11,7 @@
 #include <linux/module.h>
 #include <linux/irq.h>
 
-#include <asm/apic.h>
+#include <asm/genapic.h>
 #include <asm/uv/uv_irq.h>
 
 static void uv_noop(unsigned int irq)
index f052c84ecbe4a53993998cd9a1c6836b2b32c69d..a1c7b71dc0d01cf1025cba2539f1655c93b67571 100644 (file)
@@ -32,7 +32,7 @@
 #include <asm/io.h>
 #include <asm/fixmap.h>
 #include <asm/apicdef.h>
-#include <asm/apic.h>
+#include <asm/genapic.h>
 #include <asm/processor.h>
 #include <asm/timer.h>
 #include <asm/vmi_time.h>
@@ -798,8 +798,8 @@ static inline int __init activate_vmi(void)
 #endif
 
 #ifdef CONFIG_X86_LOCAL_APIC
-       para_fill(apic_ops->read, APICRead);
-       para_fill(apic_ops->write, APICWrite);
+       para_fill(apic->read, APICRead);
+       para_fill(apic->write, APICWrite);
 #endif
 
        /*
index a4791ef412d101e6baab8ba5b07442c3b9ca9001..2a5e0e6a7c0de4ff1109d9c3b7d03c026cb62bd3 100644 (file)
@@ -30,7 +30,7 @@
 #include <asm/vmi_time.h>
 #include <asm/arch_hooks.h>
 #include <asm/apicdef.h>
-#include <asm/apic.h>
+#include <asm/genapic.h>
 #include <asm/timer.h>
 #include <asm/i8253.h>
 #include <asm/irq_vectors.h>
index da2e314f61b5ea00566b3618cd72bfb7fd6a6271..bc9893f2c3831cb2260f0dae1368a8087064ef36 100644 (file)
@@ -55,7 +55,7 @@
 #include <linux/lguest_launcher.h>
 #include <linux/virtio_console.h>
 #include <linux/pm.h>
-#include <asm/apic.h>
+#include <asm/genapic.h>
 #include <asm/lguest.h>
 #include <asm/paravirt.h>
 #include <asm/param.h>
@@ -828,13 +828,14 @@ static u32 lguest_apic_safe_wait_icr_idle(void)
        return 0;
 }
 
-static struct apic_ops lguest_basic_apic_ops = {
-       .read = lguest_apic_read,
-       .write = lguest_apic_write,
-       .icr_read = lguest_apic_icr_read,
-       .icr_write = lguest_apic_icr_write,
-       .wait_icr_idle = lguest_apic_wait_icr_idle,
-       .safe_wait_icr_idle = lguest_apic_safe_wait_icr_idle,
+static void set_lguest_basic_apic_ops(void)
+{
+       apic->read = lguest_apic_read;
+       apic->write = lguest_apic_write;
+       apic->icr_read = lguest_apic_icr_read;
+       apic->icr_write = lguest_apic_icr_write;
+       apic->wait_icr_idle = lguest_apic_wait_icr_idle;
+       apic->safe_wait_icr_idle = lguest_apic_safe_wait_icr_idle;
 };
 #endif
 
@@ -1035,7 +1036,7 @@ __init void lguest_init(void)
 
 #ifdef CONFIG_X86_LOCAL_APIC
        /* apic read/write intercepts */
-       apic_ops = &lguest_basic_apic_ops;
+       set_lguest_basic_apic_ops();
 #endif
 
        /* time operations */
index 95ff6a0e942ae492d31c25f2e9bdb30e1b7ed513..e3dd3fb672901f19b54ccaea673844cb73527a38 100644 (file)
@@ -36,7 +36,7 @@
 #include <xen/hvc-console.h>
 
 #include <asm/paravirt.h>
-#include <asm/apic.h>
+#include <asm/genapic.h>
 #include <asm/page.h>
 #include <asm/xen/hypercall.h>
 #include <asm/xen/hypervisor.h>
@@ -554,14 +554,15 @@ static u32 xen_safe_apic_wait_icr_idle(void)
         return 0;
 }
 
-static struct apic_ops xen_basic_apic_ops = {
-       .read = xen_apic_read,
-       .write = xen_apic_write,
-       .icr_read = xen_apic_icr_read,
-       .icr_write = xen_apic_icr_write,
-       .wait_icr_idle = xen_apic_wait_icr_idle,
-       .safe_wait_icr_idle = xen_safe_apic_wait_icr_idle,
-};
+static void set_xen_basic_apic_ops(void)
+{
+       apic->read = xen_apic_read;
+       apic->write = xen_apic_write;
+       apic->icr_read = xen_apic_icr_read;
+       apic->icr_write = xen_apic_icr_write;
+       apic->wait_icr_idle = xen_apic_wait_icr_idle;
+       apic->safe_wait_icr_idle = xen_safe_apic_wait_icr_idle;
+}
 
 #endif
 
@@ -898,7 +899,7 @@ asmlinkage void __init xen_start_kernel(void)
        /*
         * set up the basic apic ops.
         */
-       apic_ops = &xen_basic_apic_ops;
+       set_xen_basic_apic_ops();
 #endif
 
        if (xen_feature(XENFEAT_mmu_pt_update_preserve_ad)) {