|
@@ -342,12 +342,16 @@ static int kvm_vm_ioctl_enable_cap(struct kvm *kvm, struct kvm_enable_cap *cap)
|
|
r = 0;
|
|
r = 0;
|
|
break;
|
|
break;
|
|
case KVM_CAP_S390_VECTOR_REGISTERS:
|
|
case KVM_CAP_S390_VECTOR_REGISTERS:
|
|
- if (MACHINE_HAS_VX) {
|
|
|
|
|
|
+ mutex_lock(&kvm->lock);
|
|
|
|
+ if (atomic_read(&kvm->online_vcpus)) {
|
|
|
|
+ r = -EBUSY;
|
|
|
|
+ } else if (MACHINE_HAS_VX) {
|
|
set_kvm_facility(kvm->arch.model.fac->mask, 129);
|
|
set_kvm_facility(kvm->arch.model.fac->mask, 129);
|
|
set_kvm_facility(kvm->arch.model.fac->list, 129);
|
|
set_kvm_facility(kvm->arch.model.fac->list, 129);
|
|
r = 0;
|
|
r = 0;
|
|
} else
|
|
} else
|
|
r = -EINVAL;
|
|
r = -EINVAL;
|
|
|
|
+ mutex_unlock(&kvm->lock);
|
|
VM_EVENT(kvm, 3, "ENABLE: CAP_S390_VECTOR_REGISTERS %s",
|
|
VM_EVENT(kvm, 3, "ENABLE: CAP_S390_VECTOR_REGISTERS %s",
|
|
r ? "(not available)" : "(success)");
|
|
r ? "(not available)" : "(success)");
|
|
break;
|
|
break;
|