Some of you might remember Gerd's xenner project. The basic motivation is to run Xen PV guests in KVM with the normal KVM architecture.
In order to achieve this, Xenner contains of two pieces: 1) Xenner Qemu pieces 2) Xenner guest kernel Part 1 is partially in qemu already. The xen support framework that Gerd pushed a while back can be used just as well for xenner. Some parts like a special PV device to communicate with xenner and, mechanisms to instantiate a VM and replacements for xen infrastructure are provided in patches here. Part 2 is a completely self-contained piece of code. The xenner guest kernel runs in the VM's CPL0 context. It translates guest hypercalls to hardware calls that KVM implements, like CR3 modifications or LAPIC accesses. This patch set tries to revive Gerd's code by integrating as much as possible into the qemu code base. My ultimate goal is to isolate the qemu xenner code well enough to be able to run an i386 xen pv guest with tcg on powerpc. I'm sending this set out in the hope to receive feedback. Do you think this is a good idea? Can you spot some glitches in the code that I overlooked? See the list below for things I'm aware of to be broken. Missing pieces: - VMstate - Full qdev check - endianness check - build qemu w/o xen headers - find a replacement for qemu_map_foreign_batch Usage: (pv-grub) qemu-system-x86_64 -M xenpv -kernel /usr/lib/xen/boot/pv-grub-x86_64 \ -drive file=/images/xen.raw,if=xen -nographic -enable-kvm (direct kernel boot) qemu-system-x86_64 -M xenpv -kernel /boot/vmlinux-xen -initrd \ /boot/initrd-xen -append xencons=tty -drive file=/images/xen.raw,if=xen \ -nographic -enable-kvm (with graphics) qemu-system-x86_64 -M xenpv -kernel /boot/vmlinux-xen -initrd \ /boot/initrd-xen -drive file=/images/xen.raw,if=xen -vga xenfb -vnc :0 \ -enable-kvm I'm looking very much forward to constructive feedback! Alex Alexander Graf (39): elf: Move translate_fn to helper struct elf: Add notes implementation elf: add header notification elf: add section analyzer xen-disk: disable aio xenner: kernel: 32 bit files xenner: kernel: 64-bit files xenner: kernel: Global data xenner: kernel: Hypercall handler (i386) xenner: kernel: Hypercall handler (x86_64) xenner: kernel: Hypercall handler (generic) xenner: kernel: Headers xenner: kernel: Instruction emulator xenner: kernel: lapic code xenner: kernel: Main (i386) xenner: kernel: Main (x86_64) xenner: kernel: Main xenner: kernel: Makefile xenner: kernel: mmu support for 32-bit PAE xenner: kernel: mmu support for 32-bit normal xenner: kernel: mmu support for 64-bit xenner: kernel: generic MM functionality xenner: kernel: printk xenner: kernel: KVM PV code xenner: kernel: xen-names xenner: add xc_dom.h xenner: libxc emu: evtchn xenner: libxc emu: grant tables xenner: libxc emu: memory mapping xenner: libxc emu: xenstore xenner: emudev xenner: core xenner: PV machine xenner: Domain Builder xen: only create dummy env when necessary Add xenner binaries xenner: integrate into build system xenner: integrate into xen pv machine xen: add sysrq support Gerd Hoffmann (1): qdev-ify: xen backends Makefile | 6 + Makefile.target | 16 +- configure | 21 +- hmp-commands.hx | 24 + hw/an5206.c | 2 +- hw/arm_boot.c | 2 +- hw/armv7m.c | 2 +- hw/cris-boot.c | 4 +- hw/dummy_m68k.c | 2 +- hw/elf_ops.h | 105 ++++- hw/loader.c | 50 ++- hw/loader.h | 24 +- hw/mcf5208.c | 2 +- hw/mips_fulong2e.c | 4 +- hw/mips_malta.c | 4 +- hw/mips_mipssim.c | 6 +- hw/mips_r4k.c | 6 +- hw/multiboot.c | 2 +- hw/petalogix_s3adsp1800_mmu.c | 8 +- hw/ppc440_bamboo.c | 2 +- hw/ppc_newworld.c | 6 +- hw/ppc_oldworld.c | 6 +- hw/ppce500_mpc8544ds.c | 2 +- hw/sun4m.c | 10 +- hw/sun4u.c | 7 +- hw/virtex_ml507.c | 2 +- hw/xc_dom.h | 273 +++++++++++ hw/xen.h | 2 + hw/xen_backend.c | 176 +++++--- hw/xen_backend.h | 10 +- hw/xen_console.c | 10 +- hw/xen_disk.c | 12 +- hw/xen_domainbuild.c | 8 + hw/xen_interfaces.c | 108 ++++ hw/xen_interfaces.h | 111 +++++ hw/xen_machine_pv.c | 44 ++- hw/xen_nic.c | 10 +- hw/xen_redirect.h | 56 +++ hw/xenfb.c | 14 +- hw/xenner.h | 52 ++ hw/xenner_core.c | 224 +++++++++ hw/xenner_dom_builder.c | 406 +++++++++++++++ hw/xenner_emudev.c | 107 ++++ hw/xenner_emudev.h | 108 ++++ hw/xenner_guest_store.c | 494 +++++++++++++++++++ hw/xenner_libxc_evtchn.c | 467 ++++++++++++++++++ hw/xenner_libxc_gnttab.c | 91 ++++ hw/xenner_libxc_if.c | 124 +++++ hw/xenner_libxenstore.c | 709 +++++++++++++++++++++++++++ hw/xenner_pv.c | 135 +++++ monitor.c | 8 + pc-bios/xenner/Makefile | 72 +++ pc-bios/xenner/apicdef.h | 173 +++++++ pc-bios/xenner/cpufeature.h | 129 +++++ pc-bios/xenner/list.h | 169 +++++++ pc-bios/xenner/msr-index.h | 278 +++++++++++ pc-bios/xenner/printk.c | 682 ++++++++++++++++++++++++++ pc-bios/xenner/processor.h | 326 ++++++++++++ pc-bios/xenner/shared.h | 188 +++++++ pc-bios/xenner/xen-names.c | 141 ++++++ pc-bios/xenner/xen-names.h | 68 +++ pc-bios/xenner/xenner-data.c | 142 ++++++ pc-bios/xenner/xenner-emudev.h | 57 +++ pc-bios/xenner/xenner-hcall.c | 1031 +++++++++++++++++++++++++++++++++++++++ pc-bios/xenner/xenner-hcall32.c | 299 +++++++++++ pc-bios/xenner/xenner-hcall64.c | 323 ++++++++++++ pc-bios/xenner/xenner-instr.c | 405 +++++++++++++++ pc-bios/xenner/xenner-lapic.c | 622 +++++++++++++++++++++++ pc-bios/xenner/xenner-main.c | 875 +++++++++++++++++++++++++++++++++ pc-bios/xenner/xenner-main32.c | 390 +++++++++++++++ pc-bios/xenner/xenner-main64.c | 412 ++++++++++++++++ pc-bios/xenner/xenner-mm.c | 105 ++++ pc-bios/xenner/xenner-mm32.c | 314 ++++++++++++ pc-bios/xenner/xenner-mm64.c | 369 ++++++++++++++ pc-bios/xenner/xenner-mmpae.c | 444 +++++++++++++++++ pc-bios/xenner/xenner-pv.c | 186 +++++++ pc-bios/xenner/xenner.h | 684 ++++++++++++++++++++++++++ pc-bios/xenner/xenner32-pae.lds | 37 ++ pc-bios/xenner/xenner32.S | 441 +++++++++++++++++ pc-bios/xenner/xenner32.h | 191 ++++++++ pc-bios/xenner/xenner32.lds | 37 ++ pc-bios/xenner/xenner64.S | 400 +++++++++++++++ pc-bios/xenner/xenner64.h | 117 +++++ pc-bios/xenner/xenner64.lds | 38 ++ pc-bios/xenner32-pae.elf | Bin 0 -> 310874 bytes pc-bios/xenner32.elf | Bin 0 -> 296741 bytes pc-bios/xenner64.elf | Bin 0 -> 342244 bytes 87 files changed, 14089 insertions(+), 140 deletions(-) create mode 100644 hw/xc_dom.h create mode 100644 hw/xen_interfaces.c create mode 100644 hw/xen_interfaces.h create mode 100644 hw/xen_redirect.h create mode 100644 hw/xenner.h create mode 100644 hw/xenner_core.c create mode 100644 hw/xenner_dom_builder.c create mode 100644 hw/xenner_emudev.c create mode 100644 hw/xenner_emudev.h create mode 100644 hw/xenner_guest_store.c create mode 100644 hw/xenner_libxc_evtchn.c create mode 100644 hw/xenner_libxc_gnttab.c create mode 100644 hw/xenner_libxc_if.c create mode 100644 hw/xenner_libxenstore.c create mode 100644 hw/xenner_pv.c create mode 100644 pc-bios/xenner/Makefile create mode 100644 pc-bios/xenner/apicdef.h create mode 100644 pc-bios/xenner/cpufeature.h create mode 100644 pc-bios/xenner/list.h create mode 100644 pc-bios/xenner/msr-index.h create mode 100644 pc-bios/xenner/printk.c create mode 100644 pc-bios/xenner/processor.h create mode 100644 pc-bios/xenner/shared.h create mode 100644 pc-bios/xenner/xen-names.c create mode 100644 pc-bios/xenner/xen-names.h create mode 100644 pc-bios/xenner/xenner-data.c create mode 100644 pc-bios/xenner/xenner-emudev.h create mode 100644 pc-bios/xenner/xenner-hcall.c create mode 100644 pc-bios/xenner/xenner-hcall32.c create mode 100644 pc-bios/xenner/xenner-hcall64.c create mode 100644 pc-bios/xenner/xenner-instr.c create mode 100644 pc-bios/xenner/xenner-lapic.c create mode 100644 pc-bios/xenner/xenner-main.c create mode 100644 pc-bios/xenner/xenner-main32.c create mode 100644 pc-bios/xenner/xenner-main64.c create mode 100644 pc-bios/xenner/xenner-mm.c create mode 100644 pc-bios/xenner/xenner-mm32.c create mode 100644 pc-bios/xenner/xenner-mm64.c create mode 100644 pc-bios/xenner/xenner-mmpae.c create mode 100644 pc-bios/xenner/xenner-pv.c create mode 100644 pc-bios/xenner/xenner.h create mode 100644 pc-bios/xenner/xenner32-pae.lds create mode 100644 pc-bios/xenner/xenner32.S create mode 100644 pc-bios/xenner/xenner32.h create mode 100644 pc-bios/xenner/xenner32.lds create mode 100644 pc-bios/xenner/xenner64.S create mode 100644 pc-bios/xenner/xenner64.h create mode 100644 pc-bios/xenner/xenner64.lds create mode 100755 pc-bios/xenner32-pae.elf create mode 100755 pc-bios/xenner32.elf create mode 100755 pc-bios/xenner64.elf