[GIT PULL] Add KVM support for Book3s_64 (PPC64) hosts v3

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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.


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

[Index of Archives]     [KVM Development]     [KVM ARM]     [KVM ia64]     [Linux Virtualization]     [Linux USB Devel]     [Linux Video]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Big List of Linux Books]

  Powered by Linux