Skip to content

Commit

Permalink
KVM: Consolidate arch specific vcpu ioctl locking
Browse files Browse the repository at this point in the history
Now that all arch specific ioctls have centralized locking, it is easy to
move it to the central dispatcher.

Signed-off-by: Avi Kivity <avi@redhat.com>
  • Loading branch information
Avi Kivity committed Aug 1, 2010
1 parent 19483d1 commit 9373662
Show file tree
Hide file tree
Showing 4 changed files with 10 additions and 18 deletions.
11 changes: 4 additions & 7 deletions arch/powerpc/kvm/powerpc.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -537,8 +536,6 @@ long kvm_arch_vcpu_ioctl(struct file *filp,
}

out:
vcpu_put(vcpu);
out_nolock:
return r;
}

Expand Down
13 changes: 6 additions & 7 deletions arch/s390/kvm/kvm-s390.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -666,7 +666,6 @@ long kvm_arch_vcpu_ioctl(struct file *filp,
default:
r = -EINVAL;
}
vcpu_put(vcpu);
return r;
}

Expand Down
2 changes: 0 additions & 2 deletions arch/x86/kvm/x86.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -2496,7 +2495,6 @@ long kvm_arch_vcpu_ioctl(struct file *filp,
r = -EINVAL;
}
out:
vcpu_put(vcpu);
kfree(lapic);
return r;
}
Expand Down
2 changes: 0 additions & 2 deletions virt/kvm/kvm_main.c
Original file line number Diff line number Diff line change
Expand Up @@ -1578,9 +1578,7 @@ static long kvm_vcpu_ioctl(struct file *filp,
break;
}
default:
vcpu_put(vcpu);
r = kvm_arch_vcpu_ioctl(filp, ioctl, arg);
vcpu_load(vcpu);
}
out:
vcpu_put(vcpu);
Expand Down

0 comments on commit 9373662

Please sign in to comment.