|
@@ -791,11 +791,21 @@ static int kvm_s390_set_mem_control(struct kvm *kvm, struct kvm_device_attr *att
|
|
|
|
|
|
static void kvm_s390_vcpu_crypto_setup(struct kvm_vcpu *vcpu);
|
|
|
|
|
|
-static int kvm_s390_vm_set_crypto(struct kvm *kvm, struct kvm_device_attr *attr)
|
|
|
+void kvm_s390_vcpu_crypto_reset_all(struct kvm *kvm)
|
|
|
{
|
|
|
struct kvm_vcpu *vcpu;
|
|
|
int i;
|
|
|
|
|
|
+ kvm_s390_vcpu_block_all(kvm);
|
|
|
+
|
|
|
+ kvm_for_each_vcpu(i, vcpu, kvm)
|
|
|
+ kvm_s390_vcpu_crypto_setup(vcpu);
|
|
|
+
|
|
|
+ kvm_s390_vcpu_unblock_all(kvm);
|
|
|
+}
|
|
|
+
|
|
|
+static int kvm_s390_vm_set_crypto(struct kvm *kvm, struct kvm_device_attr *attr)
|
|
|
+{
|
|
|
if (!test_kvm_facility(kvm, 76))
|
|
|
return -EINVAL;
|
|
|
|
|
@@ -832,10 +842,7 @@ static int kvm_s390_vm_set_crypto(struct kvm *kvm, struct kvm_device_attr *attr)
|
|
|
return -ENXIO;
|
|
|
}
|
|
|
|
|
|
- kvm_for_each_vcpu(i, vcpu, kvm) {
|
|
|
- kvm_s390_vcpu_crypto_setup(vcpu);
|
|
|
- exit_sie(vcpu);
|
|
|
- }
|
|
|
+ kvm_s390_vcpu_crypto_reset_all(kvm);
|
|
|
mutex_unlock(&kvm->lock);
|
|
|
return 0;
|
|
|
}
|