The following series implements KVM support for ARM processors, specifically on the Cortex A-15 platform. The patch series applies to the arm-lpae branch of ARM Ltd's kernel tree. This is Version 4 of the patch series, but the first two versions were reviewed outside of the KVM mailing list. Changes can also be pulled from: git://git.ncl.cs.columbia.edu/pub/git/linux-kvm-arm kvm-a15-v4 The implementation is broken up into a logical set of patches, the first one containing a skeleton of files, makefile changes, the basic user space interface and KVM architecture specific stubs. Subsequent patches implement parts of the system as listed: 1. Skeleton 2. Identity Mapping for Hyp mode 3. Hypervisor intitalization 4. Hyp mode memory mappings and 2nd stage preparation 5. World-switch implementation and Hyp exception vectors 6. Emulation framework and CP15 emulation 7. Handle guest user memory aborts 8. Handle guest MMIO aborts 9. Handle userspace IRQ/FIQ injection 10. Support guest wait-for-interrupt instructions. Testing: Limited testing, but have run GCC inside guest, which compiled a small hellow-world program, which was successfully run. Hardware still unavailable, so all testing has been done on ARM Fast Models. For a guide on how to set up a testing environment and try out these patches, see: http://wiki.ncl.cs.columbia.edu/wiki/KVMARM:Guides:Development_Environment Changes since v3: - v4 actually works, fully boots a guest - Support compiling as a module - Use static inlines instead of macros for vcpu_reg and friends - Optimize kvm_vcpu_reg function - Use Ftrace for trace capabilities - Updated documentation and commenting - Use KVM_IRQ_LINE instead of KVM_INTERRUPT - Emulates load/store instructions not supported through HSR syndrome information. - Frees 2nd stage translation tables on VM teardown - Handles IRQ/FIQ instructions - Handles more CP15 accesses - Support guest WFI calls - Uses debugfs instead of /proc - Support compiling in Thumb mode Changes since v2: - Performs world-switch code - Maps guest memory using 2nd stage translation - Emulates co-processor 15 instructions - Forwards I/O faults to QEMU. --- Christoffer Dall (10): ARM: KVM: Initial skeleton to compile KVM support ARM: KVM: Hypervisor identity mapping ARM: KVM: Add hypervisor inititalization ARM: KVM: Memory virtualization setup ARM: KVM: Inject IRQs and FIQs from userspace ARM: KVM: World-switch implementation ARM: KVM: Emulation framework and CP15 emulation ARM: KVM: Handle guest faults in KVM ARM: KVM: Handle I/O aborts ARM: KVM: Guest wait-for-interrupts (WFI) support Documentation/kvm/api.txt | 11 arch/arm/Kconfig | 2 arch/arm/Makefile | 1 arch/arm/include/asm/kvm.h | 75 +++ arch/arm/include/asm/kvm_arm.h | 130 +++++ arch/arm/include/asm/kvm_asm.h | 51 ++ arch/arm/include/asm/kvm_emulate.h | 100 ++++ arch/arm/include/asm/kvm_host.h | 105 ++++ arch/arm/include/asm/kvm_mmu.h | 46 ++ arch/arm/include/asm/kvm_para.h | 9 arch/arm/include/asm/pgtable-3level-hwdef.h | 6 arch/arm/include/asm/pgtable-3level.h | 9 arch/arm/include/asm/pgtable.h | 15 + arch/arm/include/asm/unified.h | 12 arch/arm/kernel/armksyms.c | 6 arch/arm/kernel/asm-offsets.c | 33 + arch/arm/kernel/entry-armv.S | 1 arch/arm/kvm/Kconfig | 44 ++ arch/arm/kvm/Makefile | 18 + arch/arm/kvm/arm.c | 701 +++++++++++++++++++++++++++ arch/arm/kvm/arm_emulate.c | 604 +++++++++++++++++++++++ arch/arm/kvm/arm_exports.c | 26 + arch/arm/kvm/arm_guest.c | 150 ++++++ arch/arm/kvm/arm_init.S | 115 ++++ arch/arm/kvm/arm_interrupts.S | 488 +++++++++++++++++++ arch/arm/kvm/arm_mmu.c | 549 +++++++++++++++++++++ arch/arm/kvm/debug.c | 377 +++++++++++++++ arch/arm/kvm/debug.h | 63 ++ arch/arm/kvm/trace.h | 131 +++++ arch/arm/mach-vexpress/Kconfig | 1 arch/arm/mm/Kconfig | 7 arch/arm/mm/idmap.c | 52 ++ arch/arm/mm/mmu.c | 3 include/linux/kvm.h | 1 mm/memory.c | 1 35 files changed, 3939 insertions(+), 4 deletions(-) create mode 100644 arch/arm/include/asm/kvm.h create mode 100644 arch/arm/include/asm/kvm_arm.h create mode 100644 arch/arm/include/asm/kvm_asm.h create mode 100644 arch/arm/include/asm/kvm_emulate.h create mode 100644 arch/arm/include/asm/kvm_host.h create mode 100644 arch/arm/include/asm/kvm_mmu.h create mode 100644 arch/arm/include/asm/kvm_para.h create mode 100644 arch/arm/kvm/Kconfig create mode 100644 arch/arm/kvm/Makefile create mode 100644 arch/arm/kvm/arm.c create mode 100644 arch/arm/kvm/arm_emulate.c create mode 100644 arch/arm/kvm/arm_exports.c create mode 100644 arch/arm/kvm/arm_guest.c create mode 100644 arch/arm/kvm/arm_init.S create mode 100644 arch/arm/kvm/arm_interrupts.S create mode 100644 arch/arm/kvm/arm_mmu.c create mode 100644 arch/arm/kvm/debug.c create mode 100644 arch/arm/kvm/debug.h create mode 100644 arch/arm/kvm/trace.h -- -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html