|
@@ -1837,10 +1837,16 @@ long kvm_arch_vm_ioctl(struct file *filp,
|
|
goto out;
|
|
goto out;
|
|
break;
|
|
break;
|
|
case KVM_CREATE_PIT:
|
|
case KVM_CREATE_PIT:
|
|
|
|
+ mutex_lock(&kvm->lock);
|
|
|
|
+ r = -EEXIST;
|
|
|
|
+ if (kvm->arch.vpit)
|
|
|
|
+ goto create_pit_unlock;
|
|
r = -ENOMEM;
|
|
r = -ENOMEM;
|
|
kvm->arch.vpit = kvm_create_pit(kvm);
|
|
kvm->arch.vpit = kvm_create_pit(kvm);
|
|
if (kvm->arch.vpit)
|
|
if (kvm->arch.vpit)
|
|
r = 0;
|
|
r = 0;
|
|
|
|
+ create_pit_unlock:
|
|
|
|
+ mutex_unlock(&kvm->lock);
|
|
break;
|
|
break;
|
|
case KVM_IRQ_LINE: {
|
|
case KVM_IRQ_LINE: {
|
|
struct kvm_irq_level irq_event;
|
|
struct kvm_irq_level irq_event;
|