On Fri, 2009-07-24 at 18:30 +0200, Alexander Graf wrote: > 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 will also need a modified version of qemu > that can deal with KVM on desktop cores. I will send out patches for those > later, but want to get feedback on the kernel side first. > > In the meanwhile, use the qemu version from > http://www.powerkvm.org/powerkvm.git which already includes all required > patches to run G3/G4 and G5 guests. The git pull request is good when the series is good to pull or for testing, but for review patches are nice :-) So I never got enough time to look into too much details so far (I'm still up for a little walkthrough on IRC one of these days btw) but I did look at the changes to the powerpc core code and they look ok to me. The only thing I couldn't quite figure out is why you are adding exports for mm_alloc() and switch_slb(). I spotted tons of stuff that could be optimized, especially in the interrupt handling (but then, we all agree that using a magic page is going to be much better), and I suppose we need to have a close look at some aspects of the MMU emulation. But for now, I'm happy with the merge, feel free to add my Acked-by, just make sure it's marked CONFIG_EXPERIMENTAL. Avi, are you taking care of it from here ? Cheers, Ben. > > To not spam on everyone on the list, I figured I'd send this as a git pull > request this time. If I did anything wrong, please tell me :-). > > 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 > > TODO: > > - use MMU Notifiers > - use u64* for dirty log > > > > > The following changes since commit 84a3c0818fe9d7a1e34c188d6182793f213a6a66: > Gleb Natapov (1): > KVM: Reduce runnability interface with arch support code > > are available in the git repository at: > > git://csgraf.de/kvm ppc-v3 > > Alexander Graf (25): > 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 > 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 > Enable 32bit dirty log pointers on 64bit host > > arch/powerpc/include/asm/exception.h | 2 + > arch/powerpc/include/asm/kvm.h | 2 + > arch/powerpc/include/asm/kvm_asm.h | 49 ++ > arch/powerpc/include/asm/kvm_book3s.h | 135 ++++ > arch/powerpc/include/asm/kvm_book3s_64_asm.h | 58 ++ > arch/powerpc/include/asm/kvm_host.h | 76 +++- > arch/powerpc/include/asm/kvm_ppc.h | 1 + > 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 | 6 + > 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 | 43 ++- > arch/powerpc/kvm/powerpc.c | 5 - > arch/powerpc/kvm/trace.h | 6 +- > arch/powerpc/mm/hash_utils_64.c | 2 + > arch/powerpc/mm/mmu_context_hash64.c | 4 + > arch/powerpc/mm/slb.c | 2 + > kernel/fork.c | 1 + > virt/kvm/kvm_main.c | 5 + > 33 files changed, 3786 insertions(+), 15 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 > -- > 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 -- 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