86 lines
2.3 KiB
Diff
86 lines
2.3 KiB
Diff
|
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>
|
||
|
Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
|
||
|
---
|
||
|
arch/x86/xen/Makefile | 2 +-
|
||
|
arch/x86/xen/apic.c | 17 +++++++++++++++++
|
||
|
arch/x86/xen/enlighten.c | 2 ++
|
||
|
arch/x86/xen/xen-ops.h | 4 ++++
|
||
|
4 files changed, 24 insertions(+), 1 deletions(-)
|
||
|
create mode 100644 arch/x86/xen/apic.c
|
||
|
|
||
|
diff --git a/arch/x86/xen/Makefile b/arch/x86/xen/Makefile
|
||
|
index add2c2d..96ab2c0 100644
|
||
|
--- a/arch/x86/xen/Makefile
|
||
|
+++ b/arch/x86/xen/Makefile
|
||
|
@@ -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
|
||
|
index 0000000..71ed91c
|
||
|
--- /dev/null
|
||
|
+++ b/arch/x86/xen/apic.c
|
||
|
@@ -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 0xff;
|
||
|
+}
|
||
|
+
|
||
|
+void __init xen_init_apic(void)
|
||
|
+{
|
||
|
+ x86_ioapic.read = xen_io_apic_read;
|
||
|
+}
|
||
|
diff --git a/arch/x86/xen/enlighten.c b/arch/x86/xen/enlighten.c
|
||
|
index 0732326..93a03195 100644
|
||
|
--- a/arch/x86/xen/enlighten.c
|
||
|
+++ b/arch/x86/xen/enlighten.c
|
||
|
@@ -1377,6 +1377,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();
|
||
|
|
||
|
diff --git a/arch/x86/xen/xen-ops.h b/arch/x86/xen/xen-ops.h
|
||
|
index b095739..45c0c06 100644
|
||
|
--- a/arch/x86/xen/xen-ops.h
|
||
|
+++ b/arch/x86/xen/xen-ops.h
|
||
|
@@ -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
|
||
|
--
|
||
|
1.7.7.5
|
||
|
|