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

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

 



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

[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