]> Pileus Git - ~andy/linux/commitdiff
xen/x86: Implement x86_apic_ops
authorKonrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Tue, 20 Mar 2012 22:53:10 +0000 (18:53 -0400)
committerKonrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Tue, 1 May 2012 18:50:33 +0000 (14:50 -0400)
Or rather just implement one different function as opposed
to the native one : the read function.

We synthesize the values.

Acked-by: Suresh Siddha <suresh.b.siddha@intel.com>
[v1: Rebased on top of tip/x86/urgent]
[v2: Return 0xfd instead of 0xff in the default case]
Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
arch/x86/xen/Makefile
arch/x86/xen/apic.c [new file with mode: 0644]
arch/x86/xen/enlighten.c
arch/x86/xen/xen-ops.h

index add2c2d729cef9a0bc804a0cafd6477f142c4df3..96ab2c09cb68e01bdb267c76a96f72ad93fde11b 100644 (file)
@@ -20,5 +20,5 @@ obj-$(CONFIG_EVENT_TRACING) += trace.o
 obj-$(CONFIG_SMP)              += smp.o
 obj-$(CONFIG_PARAVIRT_SPINLOCKS)+= spinlock.o
 obj-$(CONFIG_XEN_DEBUG_FS)     += debugfs.o
-obj-$(CONFIG_XEN_DOM0)         += vga.o
+obj-$(CONFIG_XEN_DOM0)         += apic.o vga.o
 obj-$(CONFIG_SWIOTLB_XEN)      += pci-swiotlb-xen.o
diff --git a/arch/x86/xen/apic.c b/arch/x86/xen/apic.c
new file mode 100644 (file)
index 0000000..73ade38
--- /dev/null
@@ -0,0 +1,17 @@
+#include <linux/init.h>
+#include <asm/x86_init.h>
+
+unsigned int xen_io_apic_read(unsigned apic, unsigned reg)
+{
+       if (reg == 0x1)
+               return 0x00170020;
+       else if (reg == 0x0)
+               return apic << 24;
+
+       return 0xfd;
+}
+
+void __init xen_init_apic(void)
+{
+       x86_io_apic_ops.read = xen_io_apic_read;
+}
index a8f8844b8d32690b8a189bc37d12cd3f286a81cd..c2ea9e9f420d39c3c6b6a960af34e4db5e3c4459 100644 (file)
@@ -1362,6 +1362,8 @@ asmlinkage void __init xen_start_kernel(void)
                xen_start_info->console.domU.mfn = 0;
                xen_start_info->console.domU.evtchn = 0;
 
+               xen_init_apic();
+
                /* Make sure ACS will be enabled */
                pci_request_acs();
        }
index b095739ccd4c6f531847bcaef276d9272cd4196a..45c0c0667bd966b28dfc36223f5d1912ab169c94 100644 (file)
@@ -92,11 +92,15 @@ struct dom0_vga_console_info;
 
 #ifdef CONFIG_XEN_DOM0
 void __init xen_init_vga(const struct dom0_vga_console_info *, size_t size);
+void __init xen_init_apic(void);
 #else
 static inline void __init xen_init_vga(const struct dom0_vga_console_info *info,
                                       size_t size)
 {
 }
+static inline void __init xen_init_apic(void)
+{
+}
 #endif
 
 /* Declare an asm function, along with symbols needed to make it