From mboxrd@z Thu Jan 1 00:00:00 1970 From: ehrhardt@linux.vnet.ibm.com Date: Tue, 19 Aug 2008 10:36:39 +0000 Subject: [PATCH 0/6][RFC] kvmppc: paravirtualization interface - host part v2 Message-Id: <1219142205-12062-1-git-send-email-ehrhardt@linux.vnet.ibm.com> List-Id: References: <1216802207-32675-1-git-send-email-ehrhardt@linux.vnet.ibm.com> In-Reply-To: <1216802207-32675-1-git-send-email-ehrhardt@linux.vnet.ibm.com> MIME-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable To: kvm-ppc@vger.kernel.org From: Christian Ehrhardt This patch series implements the host part of an paravirtualization interfa= ce using: - the device tree mechanism to pass hypervisor informations to the guest (kvm-userspace)=20 - 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 Version 2 contains the feedback to my last submission and implemented an exploitation of that interface using the magic page mechanism to rewrite gu= est code. The used hypercall ABI was already discussed on the embedded-hypervisor mai= ling list and is available at http://kvm.qumranet.com/kvmwiki/PowerPC_Hypercall_= ABI 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 d= ata - flags for features like the example "feature,pv-magicpage" setting 1 =3D available, everything else =3D 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 =3D> 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 sa= ving 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 - wrtee [PATCH 6/6] kvmppc: kvm-userspace: device tree modification for magic page --- [diffstat] arch/powerpc/kvm/booke_guest.c | 78 ++++++++++--- arch/powerpc/kvm/emulate.c | 233 ++++++++++++++++++++++++++++++++++= +++-- arch/powerpc/kvm/powerpc.c | 1 b/arch/powerpc/kvm/booke_guest.c | 14 ++ b/arch/powerpc/kvm/emulate.c | 28 ++++ b/arch/powerpc/kvm/powerpc.c | 19 +++ b/include/asm-powerpc/kvm_host.h | 6 + b/include/asm-powerpc/kvm_para.h | 2 b/include/asm-powerpc/kvm_ppc.h | 5 b/include/linux/kvm.h | 5 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 include/asm-powerpc/kvm_para.h | 56 +++++++++ 18 files changed, 466 insertions(+), 26 deletions(-)