From mboxrd@z Thu Jan 1 00:00:00 1970 From: Alexander Graf Date: Wed, 21 Oct 2009 15:03:06 +0000 Subject: [PATCH 00/27] Add KVM support for Book3s_64 (PPC64) hosts v5 Message-Id: <1256137413-15256-1-git-send-email-agraf@suse.de> List-Id: References: <1254212303-8737-1-git-send-email-agraf@suse.de> In-Reply-To: <1254212303-8737-1-git-send-email-agraf@suse.de> MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: kvm@vger.kernel.org Cc: Avi Kivity , kvm-ppc , Hollis Blanchard , Arnd Bergmann , Benjamin Herrenschmidt , Kevin Wolf , bphilips@suse.de, Marcelo Tosatti KVM for PowerPC only supports embedded cores at the moment. While it makes sense to virtualize on small machines, it's even more fun to do so on big boxes. So I figured we need KVM for PowerPC64 as well. This patchset implements KVM support for Book3s_64 hosts and guest support for Book3s_64 and G3/G4. To really make use of this, you also need a recent version of qemu. Don't want to apply patches? Get the git tree! $ git clone git://csgraf.de/kvm $ git checkout origin/ppc-v4 V1 -> V2: - extend sregs with padding - new naming scheme (ppc64 -> book3s_64; 74xx -> book3s_32) - to_phys -> in-kernel tophys() - loadimm -> LOAD_REG_IMMEDIATE - call .ko kvm.ko - set magic paca bit later - run guest code with PACA->soft_enabled=true - pt_regs for host state saving (guest too?) - only do HV dcbz trick on 970 - refuse to run on LPAR because of missing SLB pieces V2 -> V3: - fix DAR/DSISR saving - allow running on LPAR by modifying the SLB shadow - change the SLB implementation to use a mem-backed cache and do full world switch on enter/exit. gets rid of "context" magic - be more aggressive about DEC injection - remove fast ld/st because we're always in host context - don't use SPRGs in real->paged transition - implement dirty log - remove MMIO speedup code - SPRG cleanup - rename SPRG3 -> SPRN_SPRG_PACA - rename SPRG1 -> SPRN_SPRG_SCRATCH0 - don't use SPRG2 V3 -> V4: - use context_id instead of mm_alloc - export less V4 -> V5: - use get_tb instead of mftb - make ppc32 and ppc64 emulation share more code - make pvr 32 bits - add patch to use hrtimer for decrememter Alexander Graf (27): Move dirty logging code to sub-arch Pass PVR in sregs Add Book3s definitions Add Book3s fields to vcpu structs Add asm/kvm_book3s.h Add Book3s_64 intercept helpers Add book3s_64 highmem asm code Add SLB switching code for entry/exit Add interrupt handling code Add book3s.c Add book3s_64 Host MMU handling Add book3s_64 guest MMU Add book3s_32 guest MMU Add book3s_64 specific opcode emulation Add mfdec emulation Add desktop PowerPC specific emulation Make head_64.S aware of KVM real mode code Add Book3s_64 offsets to asm-offsets.c Export symbols for KVM module Split init_new_context and destroy_context Export KVM symbols for module Add fields to PACA Export new PACA constants in asm-offsets Include Book3s_64 target in buildsystem Fix trace.h Use Little Endian for Dirty Bitmap Use hrtimers for the decrementer arch/powerpc/include/asm/exception-64s.h | 2 + arch/powerpc/include/asm/kvm.h | 2 + arch/powerpc/include/asm/kvm_asm.h | 39 ++ arch/powerpc/include/asm/kvm_book3s.h | 136 ++++ arch/powerpc/include/asm/kvm_book3s_64_asm.h | 58 ++ arch/powerpc/include/asm/kvm_host.h | 79 +++- arch/powerpc/include/asm/kvm_ppc.h | 1 + arch/powerpc/include/asm/mmu_context.h | 5 + arch/powerpc/include/asm/paca.h | 9 + arch/powerpc/kernel/asm-offsets.c | 18 + arch/powerpc/kernel/exceptions-64s.S | 8 + arch/powerpc/kernel/head_64.S | 7 + arch/powerpc/kernel/ppc_ksyms.c | 3 +- arch/powerpc/kernel/time.c | 1 + arch/powerpc/kvm/Kconfig | 17 + arch/powerpc/kvm/Makefile | 27 +- arch/powerpc/kvm/book3s.c | 919 ++++++++++++++++++++++++++ arch/powerpc/kvm/book3s_32_mmu.c | 354 ++++++++++ arch/powerpc/kvm/book3s_64_emulate.c | 338 ++++++++++ arch/powerpc/kvm/book3s_64_exports.c | 24 + arch/powerpc/kvm/book3s_64_interrupts.S | 392 +++++++++++ arch/powerpc/kvm/book3s_64_mmu.c | 469 +++++++++++++ arch/powerpc/kvm/book3s_64_mmu_host.c | 412 ++++++++++++ arch/powerpc/kvm/book3s_64_rmhandlers.S | 131 ++++ arch/powerpc/kvm/book3s_64_slb.S | 277 ++++++++ arch/powerpc/kvm/booke.c | 5 + arch/powerpc/kvm/emulate.c | 66 ++- arch/powerpc/kvm/powerpc.c | 25 +- arch/powerpc/kvm/trace.h | 6 +- arch/powerpc/mm/hash_utils_64.c | 2 + arch/powerpc/mm/mmu_context_hash64.c | 24 +- virt/kvm/kvm_main.c | 5 +- 32 files changed, 3827 insertions(+), 34 deletions(-) create mode 100644 arch/powerpc/include/asm/kvm_book3s.h create mode 100644 arch/powerpc/include/asm/kvm_book3s_64_asm.h create mode 100644 arch/powerpc/kvm/book3s.c create mode 100644 arch/powerpc/kvm/book3s_32_mmu.c create mode 100644 arch/powerpc/kvm/book3s_64_emulate.c create mode 100644 arch/powerpc/kvm/book3s_64_exports.c create mode 100644 arch/powerpc/kvm/book3s_64_interrupts.S create mode 100644 arch/powerpc/kvm/book3s_64_mmu.c create mode 100644 arch/powerpc/kvm/book3s_64_mmu_host.c create mode 100644 arch/powerpc/kvm/book3s_64_rmhandlers.S create mode 100644 arch/powerpc/kvm/book3s_64_slb.S