diff options
author | Stefano Stabellini <stefano.stabellini@eu.citrix.com> | 2012-09-14 13:37:32 +0000 |
---|---|---|
committer | Stefano Stabellini <stefano.stabellini@eu.citrix.com> | 2012-09-14 13:37:32 +0000 |
commit | 0ec53ecf38bcbf95b4b057328a8fbba4d22ef28b (patch) | |
tree | ee0fa3f22816e4c95bc6229577930eabf08c2d48 /drivers/xen/events.c | |
parent | b3b52fd87e8f7544fde75a471108bd5bd4492c90 (diff) | |
download | op-kernel-dev-0ec53ecf38bcbf95b4b057328a8fbba4d22ef28b.zip op-kernel-dev-0ec53ecf38bcbf95b4b057328a8fbba4d22ef28b.tar.gz |
xen/arm: receive Xen events on ARM
Compile events.c on ARM.
Parse, map and enable the IRQ to get event notifications from the device
tree (node "/xen").
Signed-off-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
Acked-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Diffstat (limited to 'drivers/xen/events.c')
-rw-r--r-- | drivers/xen/events.c | 17 |
1 files changed, 14 insertions, 3 deletions
diff --git a/drivers/xen/events.c b/drivers/xen/events.c index c60d162..8672211 100644 --- a/drivers/xen/events.c +++ b/drivers/xen/events.c @@ -31,14 +31,16 @@ #include <linux/irqnr.h> #include <linux/pci.h> +#ifdef CONFIG_X86 #include <asm/desc.h> #include <asm/ptrace.h> #include <asm/irq.h> #include <asm/idle.h> #include <asm/io_apic.h> -#include <asm/sync_bitops.h> #include <asm/xen/page.h> #include <asm/xen/pci.h> +#endif +#include <asm/sync_bitops.h> #include <asm/xen/hypercall.h> #include <asm/xen/hypervisor.h> @@ -50,6 +52,9 @@ #include <xen/interface/event_channel.h> #include <xen/interface/hvm/hvm_op.h> #include <xen/interface/hvm/params.h> +#include <xen/interface/physdev.h> +#include <xen/interface/sched.h> +#include <asm/hw_irq.h> /* * This lock protects updates to the following mapping and reference-count @@ -1386,7 +1391,9 @@ void xen_evtchn_do_upcall(struct pt_regs *regs) { struct pt_regs *old_regs = set_irq_regs(regs); +#ifdef CONFIG_X86 exit_idle(); +#endif irq_enter(); __xen_evtchn_do_upcall(); @@ -1795,9 +1802,9 @@ void xen_callback_vector(void) void xen_callback_vector(void) {} #endif -void __init xen_init_IRQ(void) +void xen_init_IRQ(void) { - int i, rc; + int i; evtchn_to_irq = kcalloc(NR_EVENT_CHANNELS, sizeof(*evtchn_to_irq), GFP_KERNEL); @@ -1813,6 +1820,7 @@ void __init xen_init_IRQ(void) pirq_needs_eoi = pirq_needs_eoi_flag; +#ifdef CONFIG_X86 if (xen_hvm_domain()) { xen_callback_vector(); native_init_IRQ(); @@ -1820,6 +1828,7 @@ void __init xen_init_IRQ(void) * __acpi_register_gsi can point at the right function */ pci_xen_hvm_init(); } else { + int rc; struct physdev_pirq_eoi_gmfn eoi_gmfn; irq_ctx_init(smp_processor_id()); @@ -1835,4 +1844,6 @@ void __init xen_init_IRQ(void) } else pirq_needs_eoi = pirq_check_eoi_map; } +#endif } +EXPORT_SYMBOL_GPL(xen_init_IRQ); |