From: Christian Ehrhardt <ehrhardt@xxxxxxxxxxxxxxxxxx> Version 3 updates: - fixed adress release at a kunmap_atomic call - removed style issues (whitespace/indent) - all checks to test if pvmem is currently available now use the wrappers kvmppc_has_pvmem or kvmppc_is_pvmem - folded some changes in a better order to prevent multiple trivial patches for the same code sections - the hypercall ABI is now implemented in beat style - the rewrite of wrtee is dropped, instead mfmsr is rewritten. This saves more exits on non cooperating guests and for now rmeoving the need for guest coop patches (less invasive). - separated and removed some changes unrelated to paravirtualization to streamline this series - changed mapping of guest memory to call gfn_to_page without mm locks held (upstream code just changed) - instruction rewriting is now done after emulation guarded by an unlikely() which should save a lot of runtime complexity (adding some extra code though): a) in non pv case this is now just an if (unlikely(x)) that is never true b) in pv case the rewrite function does not need to be called for every emulation - only for those that are rewritable (which additionally don't occur anymore after being rewritten once). This patch series implements the host part of an paravirtualization interface using: - the device tree mechanism to pass hypervisor informations to the guest (kvm-userspace) - hypercalls backend for guest->host calls - an example exploiter of that interface (magic page) that uses that for binary rewriting saving guest exits by avoiding privileged instructions The device tree format used here (=base for the discussions on embedded-hypervisor) is the following. - A node "hypervisor" to show the general availability of some hypervisor data - flags for features like the example "feature,pv-magicpage" setting 1 = available, everything else = unavailable - Some features might need to pass more data and can use an entry in the device tree like the example of "data,pv-magicpage-size" If the guest wants that pv support it has to allocate the requested size of memory (aligned to the tlb entry size rounded up => e.g. 4000 bytes 4k aligned, 4096 bytes 4k aligned, 4097 bytes 16k aligned and so on). The speedup with both patch queues applied is around 40% dependent on what the guest is doing (measured with boot times and some simple tasks). The raw saving of exits about ~50-60% as you can see in the kvm stat exit counters. [patches in series] [PATCH 1/6] kvmppc: add hypercall infrastructure - host part [PATCH 2/6] kvmppc: magic page hypercall - host part [PATCH 3/6] kvmppc: rewrite guest code - sprg0-3 [PATCH 4/6] kvmppc: rewrite guest code - dear, esr, srr0, srr1 [PATCH 5/6] kvmppc: rewrite guest code - mfmsr [PATCH 6/6] kvmppc: kvm-userspace: device tree modification for magic page --- [diffstat] kernel: arch/powerpc/kvm/booke_guest.c | 70 ++++- arch/powerpc/kvm/emulate.c | 415 ++++++++++++++++++++++++++++++++-- b/arch/powerpc/kvm/booke_guest.c | 11 b/arch/powerpc/kvm/booke_interrupts.S | 9 b/arch/powerpc/kvm/emulate.c | 16 + b/arch/powerpc/kvm/powerpc.c | 20 + b/include/asm-powerpc/kvm_host.h | 1 b/include/asm-powerpc/kvm_para.h | 4 b/include/asm-powerpc/kvm_ppc.h | 3 b/include/linux/kvm.h | 5 include/asm-powerpc/kvm_host.h | 5 include/asm-powerpc/kvm_para.h | 54 ++++ kvm-userspace: b/libkvm/libkvm-powerpc.c | 6 b/libkvm/libkvm.h | 4 b/qemu/hw/device_tree.c | 10 b/qemu/hw/device_tree.h | 1 b/qemu/hw/ppc440_bamboo.c | 18 + b/qemu/qemu-kvm-powerpc.c | 5 b/qemu/qemu-kvm.h | 1 19 files changed, 625 insertions(+), 33 deletions(-) -- To unsubscribe from this list: send the line "unsubscribe kvm-ppc" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html