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. Patches also available at: git://git.kernel.org/pub/scm/linux/kernel/git/cdall/linux.git vcpu-load-put-v2 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 | 107 ++++++++++++++++++++++++++++++------------ 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, 323 insertions(+), 144 deletions(-) -- 2.7.4