aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/xen
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2012-10-06 18:13:01 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2012-10-06 18:13:01 -0400
commitf1c6872e4980bc4078cfaead05f892b3d78dea64 (patch)
tree24c18bb07714109296638b3193b35bdcc4098f7c /drivers/xen
parent5f3d2f2e1a63679cf1c4a4210f2f1cc2f335bef6 (diff)
parent4ed5978bdd99114db7773cb3d78f2998bd17f694 (diff)
Merge tag 'stable/for-linus-3.7-arm-tag' of git://git.kernel.org/pub/scm/linux/kernel/git/konrad/xen
Pull ADM Xen support from Konrad Rzeszutek Wilk: Features: * Allow a Linux guest to boot as initial domain and as normal guests on Xen on ARM (specifically ARMv7 with virtualized extensions). PV console, block and network frontend/backends are working. Bug-fixes: * Fix compile linux-next fallout. * Fix PVHVM bootup crashing. The Xen-unstable hypervisor (so will be 4.3 in a ~6 months), supports ARMv7 platforms. The goal in implementing this architecture is to exploit the hardware as much as possible. That means use as little as possible of PV operations (so no PV MMU) - and use existing PV drivers for I/Os (network, block, console, etc). This is similar to how PVHVM guests operate in X86 platform nowadays - except that on ARM there is no need for QEMU. The end result is that we share a lot of the generic Xen drivers and infrastructure. Details on how to compile/boot/etc are available at this Wiki: http://wiki.xen.org/wiki/Xen_ARMv7_with_Virtualization_Extensions and this blog has links to a technical discussion/presentations on the overall architecture: http://blog.xen.org/index.php/2012/09/21/xensummit-sessions-new-pvh-virtualisation-mode-for-arm-cortex-a15arm-servers-and-x86/ * tag 'stable/for-linus-3.7-arm-tag' of git://git.kernel.org/pub/scm/linux/kernel/git/konrad/xen: (21 commits) xen/xen_initial_domain: check that xen_start_info is initialized xen: mark xen_init_IRQ __init xen/Makefile: fix dom-y build arm: introduce a DTS for Xen unprivileged virtual machines MAINTAINERS: add myself as Xen ARM maintainer xen/arm: compile netback xen/arm: compile blkfront and blkback xen/arm: implement alloc/free_xenballooned_pages with alloc_pages/kfree xen/arm: receive Xen events on ARM xen/arm: initialize grant_table on ARM xen/arm: get privilege status xen/arm: introduce CONFIG_XEN on ARM xen: do not compile manage, balloon, pci, acpi, pcpu and cpu_hotplug on ARM xen/arm: Introduce xen_ulong_t for unsigned long xen/arm: Xen detection and shared_info page mapping docs: Xen ARM DT bindings xen/arm: empty implementation of grant_table arch specific functions xen/arm: sync_bitops xen/arm: page.h definitions xen/arm: hypercalls ...
Diffstat (limited to 'drivers/xen')
-rw-r--r--drivers/xen/Makefile14
-rw-r--r--drivers/xen/events.c14
2 files changed, 22 insertions, 6 deletions
diff --git a/drivers/xen/Makefile b/drivers/xen/Makefile
index a4a3cab2f459..0e8637035457 100644
--- a/drivers/xen/Makefile
+++ b/drivers/xen/Makefile
@@ -1,11 +1,19 @@
1obj-y += grant-table.o features.o events.o manage.o balloon.o 1ifneq ($(CONFIG_ARM),y)
2obj-y += manage.o balloon.o
3obj-$(CONFIG_HOTPLUG_CPU) += cpu_hotplug.o
4endif
5obj-y += grant-table.o features.o events.o
2obj-y += xenbus/ 6obj-y += xenbus/
3 7
4nostackp := $(call cc-option, -fno-stack-protector) 8nostackp := $(call cc-option, -fno-stack-protector)
5CFLAGS_features.o := $(nostackp) 9CFLAGS_features.o := $(nostackp)
6 10
11dom0-$(CONFIG_PCI) += pci.o
12dom0-$(CONFIG_USB_SUPPORT) += dbgp.o
13dom0-$(CONFIG_ACPI) += acpi.o
14dom0-$(CONFIG_X86) += pcpu.o
15obj-$(CONFIG_XEN_DOM0) += $(dom0-y)
7obj-$(CONFIG_BLOCK) += biomerge.o 16obj-$(CONFIG_BLOCK) += biomerge.o
8obj-$(CONFIG_HOTPLUG_CPU) += cpu_hotplug.o
9obj-$(CONFIG_XEN_XENCOMM) += xencomm.o 17obj-$(CONFIG_XEN_XENCOMM) += xencomm.o
10obj-$(CONFIG_XEN_BALLOON) += xen-balloon.o 18obj-$(CONFIG_XEN_BALLOON) += xen-balloon.o
11obj-$(CONFIG_XEN_SELFBALLOONING) += xen-selfballoon.o 19obj-$(CONFIG_XEN_SELFBALLOONING) += xen-selfballoon.o
@@ -17,8 +25,6 @@ obj-$(CONFIG_XEN_SYS_HYPERVISOR) += sys-hypervisor.o
17obj-$(CONFIG_XEN_PVHVM) += platform-pci.o 25obj-$(CONFIG_XEN_PVHVM) += platform-pci.o
18obj-$(CONFIG_XEN_TMEM) += tmem.o 26obj-$(CONFIG_XEN_TMEM) += tmem.o
19obj-$(CONFIG_SWIOTLB_XEN) += swiotlb-xen.o 27obj-$(CONFIG_SWIOTLB_XEN) += swiotlb-xen.o
20obj-$(CONFIG_XEN_DOM0) += pcpu.o
21obj-$(CONFIG_XEN_DOM0) += pci.o dbgp.o acpi.o
22obj-$(CONFIG_XEN_MCE_LOG) += mcelog.o 28obj-$(CONFIG_XEN_MCE_LOG) += mcelog.o
23obj-$(CONFIG_XEN_PCIDEV_BACKEND) += xen-pciback/ 29obj-$(CONFIG_XEN_PCIDEV_BACKEND) += xen-pciback/
24obj-$(CONFIG_XEN_PRIVCMD) += xen-privcmd.o 30obj-$(CONFIG_XEN_PRIVCMD) += xen-privcmd.o
diff --git a/drivers/xen/events.c b/drivers/xen/events.c
index c60d1629c916..59e10a1286d5 100644
--- a/drivers/xen/events.c
+++ b/drivers/xen/events.c
@@ -31,14 +31,16 @@
31#include <linux/irqnr.h> 31#include <linux/irqnr.h>
32#include <linux/pci.h> 32#include <linux/pci.h>
33 33
34#ifdef CONFIG_X86
34#include <asm/desc.h> 35#include <asm/desc.h>
35#include <asm/ptrace.h> 36#include <asm/ptrace.h>
36#include <asm/irq.h> 37#include <asm/irq.h>
37#include <asm/idle.h> 38#include <asm/idle.h>
38#include <asm/io_apic.h> 39#include <asm/io_apic.h>
39#include <asm/sync_bitops.h>
40#include <asm/xen/page.h> 40#include <asm/xen/page.h>
41#include <asm/xen/pci.h> 41#include <asm/xen/pci.h>
42#endif
43#include <asm/sync_bitops.h>
42#include <asm/xen/hypercall.h> 44#include <asm/xen/hypercall.h>
43#include <asm/xen/hypervisor.h> 45#include <asm/xen/hypervisor.h>
44 46
@@ -50,6 +52,9 @@
50#include <xen/interface/event_channel.h> 52#include <xen/interface/event_channel.h>
51#include <xen/interface/hvm/hvm_op.h> 53#include <xen/interface/hvm/hvm_op.h>
52#include <xen/interface/hvm/params.h> 54#include <xen/interface/hvm/params.h>
55#include <xen/interface/physdev.h>
56#include <xen/interface/sched.h>
57#include <asm/hw_irq.h>
53 58
54/* 59/*
55 * This lock protects updates to the following mapping and reference-count 60 * This lock protects updates to the following mapping and reference-count
@@ -1386,7 +1391,9 @@ void xen_evtchn_do_upcall(struct pt_regs *regs)
1386{ 1391{
1387 struct pt_regs *old_regs = set_irq_regs(regs); 1392 struct pt_regs *old_regs = set_irq_regs(regs);
1388 1393
1394#ifdef CONFIG_X86
1389 exit_idle(); 1395 exit_idle();
1396#endif
1390 irq_enter(); 1397 irq_enter();
1391 1398
1392 __xen_evtchn_do_upcall(); 1399 __xen_evtchn_do_upcall();
@@ -1797,7 +1804,7 @@ void xen_callback_vector(void) {}
1797 1804
1798void __init xen_init_IRQ(void) 1805void __init xen_init_IRQ(void)
1799{ 1806{
1800 int i, rc; 1807 int i;
1801 1808
1802 evtchn_to_irq = kcalloc(NR_EVENT_CHANNELS, sizeof(*evtchn_to_irq), 1809 evtchn_to_irq = kcalloc(NR_EVENT_CHANNELS, sizeof(*evtchn_to_irq),
1803 GFP_KERNEL); 1810 GFP_KERNEL);
@@ -1813,6 +1820,7 @@ void __init xen_init_IRQ(void)
1813 1820
1814 pirq_needs_eoi = pirq_needs_eoi_flag; 1821 pirq_needs_eoi = pirq_needs_eoi_flag;
1815 1822
1823#ifdef CONFIG_X86
1816 if (xen_hvm_domain()) { 1824 if (xen_hvm_domain()) {
1817 xen_callback_vector(); 1825 xen_callback_vector();
1818 native_init_IRQ(); 1826 native_init_IRQ();
@@ -1820,6 +1828,7 @@ void __init xen_init_IRQ(void)
1820 * __acpi_register_gsi can point at the right function */ 1828 * __acpi_register_gsi can point at the right function */
1821 pci_xen_hvm_init(); 1829 pci_xen_hvm_init();
1822 } else { 1830 } else {
1831 int rc;
1823 struct physdev_pirq_eoi_gmfn eoi_gmfn; 1832 struct physdev_pirq_eoi_gmfn eoi_gmfn;
1824 1833
1825 irq_ctx_init(smp_processor_id()); 1834 irq_ctx_init(smp_processor_id());
@@ -1835,4 +1844,5 @@ void __init xen_init_IRQ(void)
1835 } else 1844 } else
1836 pirq_needs_eoi = pirq_check_eoi_map; 1845 pirq_needs_eoi = pirq_check_eoi_map;
1837 } 1846 }
1847#endif
1838} 1848}