The following patchset implements KVM support for MIPS32 processors, using Trap & Emulate, with basic runtime binary translation to improve performance. In KVM mode, CPU virtualization is handled via the kvm kernel module, while system and I/O virtualization leverage the Malta model already present in QEMU. Both Guest kernel and Guest Userspace execute in UM. The Guest address space is as folows: Guest User address space: 0x00000000 -> 0x40000000 Guest Kernel Unmapped: 0x40000000 -> 0x60000000 Guest Kernel Mapped: 0x60000000 -> 0x80000000 As a result, Guest Usermode virtual memory is limited to 1GB. The Malta model has been enhanced to support SMP guest kernels via support for the CPS bootcode from MIPS which supports bootstrapping multiple cpus. A model for the MIPS GIC has also been added to support IPIs. This allows booting Linux in full SMP mode with a cluster of MIPS32R2 cpus. There is a companion kernel patchset for KVM that has been posted on the KVM/MIPS mailing lists. -- Sanjay Lal (12): KVM/MIPS: Bootcode for MIPS SMP configurations with a GCMP KVM/MIPS: GIC emulation for SMP guests. KVM/MIPS: Add save/restore state APIs for saving/restoring KVM guests. KVM/MIPS: Do not start the periodic timer in KVM mode. Compare/Count timer interrupts are handled in-kernel. KVM/MIPS: In KVM mode, inject IRQ2 (I/O) interupts via ioctls(). COP0 emulation is in-kernel KVM/MIPS: Define APIs to convert Guest KSEG0 <-> Guest Physical addresses. KVM/MIPS: QEMU <-> Kernel interface for KVM/MIPS KVM/MIPS: Enable KVM/MIPS for MIPS targets. Add MIPS GIC code to the build. KVM/MIPS: set sigmask length to 16 for MIPS targets. KVM/MIPS: Set page size to 16K in KVM mode. KVM/MIPS: MIPS specfic APIs for KVM. KVM/MIPS: General KVM support and support for SMP Guests configure | 17 +- hw/gt64xxx.c | 317 +++++++++++++++++++++++++++++ hw/mips/Makefile.objs | 2 +- hw/mips_addr.c | 14 ++ hw/mips_cps_bootcode.h | 310 ++++++++++++++++++++++++++++ hw/mips_cpudevs.h | 4 + hw/mips_gcmpregs.h | 122 +++++++++++ hw/mips_gic.c | 418 ++++++++++++++++++++++++++++++++++++++ hw/mips_gic.h | 378 ++++++++++++++++++++++++++++++++++ hw/mips_int.c | 15 ++ hw/mips_malta.c | 192 +++++++++++------ hw/mips_timer.c | 13 +- kvm-all.c | 5 + linux-headers/asm-mips/kvm.h | 94 +++++++++ linux-headers/asm-mips/kvm_para.h | 10 + target-mips/Makefile.objs | 1 + target-mips/kvm.c | 292 ++++++++++++++++++++++++++ target-mips/kvm_mips.h | 21 ++ target-mips/mips-defs.h | 5 + 19 files changed, 2157 insertions(+), 73 deletions(-) create mode 100644 hw/mips_cps_bootcode.h create mode 100644 hw/mips_gcmpregs.h create mode 100644 hw/mips_gic.c create mode 100644 hw/mips_gic.h create mode 100644 linux-headers/asm-mips/kvm.h create mode 100644 linux-headers/asm-mips/kvm_para.h create mode 100644 target-mips/kvm.c create mode 100644 target-mips/kvm_mips.h -- 1.7.11.3 -- 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