From: Avi Kivity <a...@redhat.com>

Now that all arch specific ioctls have centralized locking, it is easy to
move it to the central dispatcher.

Signed-off-by: Avi Kivity <a...@redhat.com>

diff --git a/arch/powerpc/kvm/powerpc.c b/arch/powerpc/kvm/powerpc.c
index caeed7b..a1d8750 100644
--- a/arch/powerpc/kvm/powerpc.c
+++ b/arch/powerpc/kvm/powerpc.c
@@ -512,17 +512,16 @@ long kvm_arch_vcpu_ioctl(struct file *filp,
        void __user *argp = (void __user *)arg;
        long r;
 
-       if (ioctl == KVM_INTERRUPT) {
+       switch (ioctl) {
+       case KVM_INTERRUPT: {
                struct kvm_interrupt irq;
                r = -EFAULT;
                if (copy_from_user(&irq, argp, sizeof(irq)))
-                       goto out_nolock;
+                       goto out;
                r = kvm_vcpu_ioctl_interrupt(vcpu, &irq);
-               goto out_nolock;
+               goto out;
        }
 
-       vcpu_load(vcpu);
-       switch (ioctl) {
        case KVM_ENABLE_CAP:
        {
                struct kvm_enable_cap cap;
@@ -537,8 +536,6 @@ long kvm_arch_vcpu_ioctl(struct file *filp,
        }
 
 out:
-       vcpu_put(vcpu);
-out_nolock:
        return r;
 }
 
diff --git a/arch/s390/kvm/kvm-s390.c b/arch/s390/kvm/kvm-s390.c
index 28cd8fd..fad1024 100644
--- a/arch/s390/kvm/kvm-s390.c
+++ b/arch/s390/kvm/kvm-s390.c
@@ -638,16 +638,16 @@ long kvm_arch_vcpu_ioctl(struct file *filp,
        void __user *argp = (void __user *)arg;
        long r;
 
-       if (ioctl == KVM_S390_INTERRUPT) {
+       switch (ioctl) {
+       case KVM_S390_INTERRUPT: {
                struct kvm_s390_interrupt s390int;
 
+               r = -EFAULT;
                if (copy_from_user(&s390int, argp, sizeof(s390int)))
-                       return -EFAULT;
-               return kvm_s390_inject_vcpu(vcpu, &s390int);
+                       break;
+               r = kvm_s390_inject_vcpu(vcpu, &s390int);
+               break;
        }
-
-       vcpu_load(vcpu);
-       switch (ioctl) {
        case KVM_S390_STORE_STATUS:
                r = kvm_s390_vcpu_store_status(vcpu, arg);
                break;
@@ -666,7 +666,6 @@ long kvm_arch_vcpu_ioctl(struct file *filp,
        default:
                r = -EINVAL;
        }
-       vcpu_put(vcpu);
        return r;
 }
 
diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c
index ce4e943..7500cba 100644
--- a/arch/x86/kvm/x86.c
+++ b/arch/x86/kvm/x86.c
@@ -2298,7 +2298,6 @@ long kvm_arch_vcpu_ioctl(struct file *filp,
        int r;
        struct kvm_lapic_state *lapic = NULL;
 
-       vcpu_load(vcpu);
        switch (ioctl) {
        case KVM_GET_LAPIC: {
                r = -EINVAL;
@@ -2496,7 +2495,6 @@ long kvm_arch_vcpu_ioctl(struct file *filp,
                r = -EINVAL;
        }
 out:
-       vcpu_put(vcpu);
        kfree(lapic);
        return r;
 }
diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c
index 08b2ccd..5ee558c 100644
--- a/virt/kvm/kvm_main.c
+++ b/virt/kvm/kvm_main.c
@@ -1564,9 +1564,7 @@ out_free2:
                break;
        }
        default:
-               vcpu_put(vcpu);
                r = kvm_arch_vcpu_ioctl(filp, ioctl, arg);
-               vcpu_load(vcpu);
        }
 out:
        vcpu_put(vcpu);
--
To unsubscribe from this list: send the line "unsubscribe kvm-commits" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to