Skip to content

Move vcpu_load and vcpu_put calls to arch code

Christoffer Dall kvm kvm-ppc kvmarm linux-arm-kernel linux-mips linux-s390 1 version In review

Get series with b4
b4 am [email protected]

Versions newest first

  1. v3 Latest16 patches 26 repliesIn review

Changes in v3 from the cover letter

- Clarified commit message on patch 1
- Initialized ret to -EINVAL at declaration on patch 9
- Added David Hildenbrand's reviewed-by tag

Patches in v3 No applies recorded yet

#Subject and filesSizeRepliesApplied
1/16KVM: Take vcpu->mutex outside vcpu_loadarch/x86/kvm/vmx.c arch/x86/kvm/x86.c include/linux/kvm_host.h +1 more+15 -282 replies
2/16KVM: Prepare for moving vcpu_load/vcpu_put into arch specific codevirt/kvm/kvm_main.c+24 -21 reply
3/16KVM: Move vcpu_load to arch-specific kvm_arch_vcpu_ioctl_runarch/mips/kvm/mips.c arch/powerpc/kvm/powerpc.c arch/s390/kvm/kvm-s390.c +3 more+30 -92 replies
4/16KVM: Move vcpu_load to arch-specific kvm_arch_vcpu_ioctl_get_regsarch/mips/kvm/mips.c arch/powerpc/kvm/book3s.c arch/powerpc/kvm/booke.c +3 more+14 -22 replies
5/16KVM: Move vcpu_load to arch-specific kvm_arch_vcpu_ioctl_set_regsarch/mips/kvm/mips.c arch/powerpc/kvm/book3s.c arch/powerpc/kvm/booke.c +3 more+14 -22 replies
6/16KVM: Move vcpu_load to arch-specific kvm_arch_vcpu_ioctl_get_sregsarch/powerpc/kvm/book3s.c arch/powerpc/kvm/booke.c arch/s390/kvm/kvm-s390.c +2 more+22 -42 replies
7/16KVM: Move vcpu_load to arch-specific kvm_arch_vcpu_ioctl_set_sregsarch/powerpc/kvm/book3s.c arch/powerpc/kvm/booke.c arch/s390/kvm/kvm-s390.c +2 more+32 -104 replies
8/16KVM: Move vcpu_load to arch-specific kvm_arch_vcpu_ioctl_get_mpstatearch/s390/kvm/kvm-s390.c arch/x86/kvm/x86.c virt/kvm/arm/arm.c +1 more+15 -41 reply
9/16KVM: Move vcpu_load to arch-specific kvm_arch_vcpu_ioctl_set_mpstatearch/s390/kvm/kvm-s390.c arch/x86/kvm/x86.c virt/kvm/arm/arm.c +1 more+21 -71 reply
10/16KVM: Move vcpu_load to arch-specific kvm_arch_vcpu_ioctl_translatearch/powerpc/kvm/booke.c arch/x86/kvm/x86.c virt/kvm/kvm_main.c+5 -21 reply
11/16KVM: Move vcpu_load to arch-specific kvm_arch_vcpu_ioctl_set_guest_debugarch/arm64/kvm/guest.c arch/powerpc/kvm/book3s.c arch/powerpc/kvm/booke.c +3 more+42 -163 replies
12/16KVM: Move vcpu_load to arch-specific kvm_arch_vcpu_ioctl_get_fpuarch/s390/kvm/kvm-s390.c arch/x86/kvm/x86.c virt/kvm/kvm_main.c+9 -41 reply
13/16KVM: Move vcpu_load to arch-specific kvm_arch_vcpu_ioctl_set_fpuarch/s390/kvm/kvm-s390.c arch/x86/kvm/x86.c virt/kvm/kvm_main.c+18 -71 reply
14/16KVM: Move vcpu_load to arch-specific kvm_arch_vcpu_ioctlarch/mips/kvm/mips.c arch/powerpc/kvm/powerpc.c arch/s390/kvm/kvm-s390.c +3 more+103 -603 replies
15/16KVM: arm/arm64: Avoid vcpu_load for other vcpu ioctls than KVM_RUNarch/arm64/kvm/guest.c virt/kvm/arm/arm.c+0 -120 replies
16/16KVM: arm/arm64: Move vcpu_load call after kvm_vcpu_first_run_initvirt/kvm/arm/arch_timer.c virt/kvm/arm/arm.c virt/kvm/arm/vgic/vgic-init.c+5 -220 replies

Reviews trailers per patch

13 of 16 patches have a Reviewed-by or Acked-by.

PatchDavid HildenbrandChristian BorntraegerCornelia Huck
1/16R-b
2/16R-b R-b
3/16R-b R-b
4/16R-b R-b
5/16R-b R-b
6/16R-b R-b
7/16R-b R-b
8/16R-b R-b
9/16R-b R-b
10/16R-b R-b
11/16R-b R-b
12/16R-b R-b
13/16R-b R-b
14/16
15/16
16/16

Trailers given in replies are filled; those carried in the patches from earlier versions are outlined with dashes. Scroll the table sideways for all 3 reviewers.

Read the v3 thread

Cover letter [PATCH v3 00/16] Move vcpu_load and vcpu_put calls to arch code

From: Christoffer Dall <[email protected]>

Some architectures may decide to do different things during kvm_arch_vcpu_load depending on the ioctl being executed. For example, arm64 is about to do significant work in vcpu load/put when running a vcpu, but it's problematic to do this for any other vcpu ioctl than KVM_RUN.

Further, while it may be possible to call kvm_arch_vcpu_load() for a number of non-KVM_RUN ioctls, it makes the KVM/ARM code more difficult to reason about, especially after my optimization series, because a lot of things can now happen, where we have to consider if we're really in the process of running a vcpu or not.

This series will first move the vcpu_load() and vcpu_put() calls in the arch generic dispatch function into each case of the switch statement and then, one-by-one, pushed the calls down into the architecture specific code making the changes for each ioctl as required.

Based on v4.15-rc1

Patches also available at:
git://git.kernel.org/pub/scm/linux/kernel/git/cdall/linux.git vcpu-load-put-v3

Changes since v2:
- Clarified commit message on patch 1
- Initialized ret to -EINVAL at declaration on patch 9
- Added David Hildenbrand's reviewed-by tag

Changes since v1:
- Fix PPC and S390 bugs from v1
- Take the mutex in the main disaptcher function and make vcpu_load a void, which simplifies the patches overall.
- Add a patch that moves vcpu_load for arm/arm64 after the first-run init function.

Thanks,
-Christoffer

Christoffer Dall (16):
KVM: Take vcpu->mutex outside vcpu_load
KVM: Prepare for moving vcpu_load/vcpu_put into arch specific code
KVM: Move vcpu_load to arch-specific kvm_arch_vcpu_ioctl_run
KVM: Move vcpu_load to arch-specific kvm_arch_vcpu_ioctl_get_regs
KVM: Move vcpu_load to arch-specific kvm_arch_vcpu_ioctl_set_regs
KVM: Move vcpu_load to arch-specific kvm_arch_vcpu_ioctl_get_sregs
KVM: Move vcpu_load to arch-specific kvm_arch_vcpu_ioctl_set_sregs
KVM: Move vcpu_load to arch-specific kvm_arch_vcpu_ioctl_get_mpstate
KVM: Move vcpu_load to arch-specific kvm_arch_vcpu_ioctl_set_mpstate
KVM: Move vcpu_load to arch-specific kvm_arch_vcpu_ioctl_translate
KVM: Move vcpu_load to arch-specific
kvm_arch_vcpu_ioctl_set_guest_debug
KVM: Move vcpu_load to arch-specific kvm_arch_vcpu_ioctl_get_fpu
KVM: Move vcpu_load to arch-specific kvm_arch_vcpu_ioctl_set_fpu
KVM: Move vcpu_load to arch-specific kvm_arch_vcpu_ioctl
KVM: arm/arm64: Avoid vcpu_load for other vcpu ioctls than KVM_RUN
KVM: arm/arm64: Move vcpu_load call after kvm_vcpu_first_run_init

 arch/arm64/kvm/guest.c        |  12 +++--
 arch/mips/kvm/mips.c          |  58 +++++++++++++++--------
 arch/powerpc/kvm/book3s.c     |  24 +++++++++-
 arch/powerpc/kvm/booke.c      |  51 +++++++++++++++-----
 arch/powerpc/kvm/powerpc.c    |  19 +++++---
 arch/s390/kvm/kvm-s390.c      |  90 +++++++++++++++++++++++++++--------
 arch/x86/kvm/vmx.c            |   4 +-
 arch/x86/kvm/x86.c            | 106 ++++++++++++++++++++++++++++++------------
 include/linux/kvm_host.h      |   2 +-
 virt/kvm/arm/arch_timer.c     |   4 --
 virt/kvm/arm/arm.c            |  68 ++++++++++++++++++---------
 virt/kvm/arm/vgic/vgic-init.c |  11 -----
 virt/kvm/kvm_main.c           |  17 ++-----
 13 files changed, 322 insertions(+), 144 deletions(-)
Signature · 1 line
2.14.2