Commit 1ba15b24 authored by Christian Borntraeger's avatar Christian Borntraeger

KVM: s390: fix ais handling vs cpu model

If ais is disabled via cpumodel, we must act accordingly, even if
KVM_CAP_S390_AIS was enabled.
Signed-off-by: default avatarChristian Borntraeger <borntraeger@de.ibm.com>
Reviewed-by: default avatarPierre Morel <pmorel@linux.vnet.ibm.com>
Reviewed-by: default avatarYi Min Zhao <zyimin@linux.vnet.ibm.com>
Reviewed-by: default avatarHalil Pasic <pasic@linux.vnet.ibm.com>
Reviewed-by: default avatarEric Farman <farman@linux.vnet.ibm.com>
parent 55c315ee
...@@ -541,7 +541,6 @@ struct kvm_s390_float_interrupt { ...@@ -541,7 +541,6 @@ struct kvm_s390_float_interrupt {
struct mutex ais_lock; struct mutex ais_lock;
u8 simm; u8 simm;
u8 nimm; u8 nimm;
int ais_enabled;
}; };
struct kvm_hw_wp_info_arch { struct kvm_hw_wp_info_arch {
......
...@@ -2160,7 +2160,7 @@ static int modify_ais_mode(struct kvm *kvm, struct kvm_device_attr *attr) ...@@ -2160,7 +2160,7 @@ static int modify_ais_mode(struct kvm *kvm, struct kvm_device_attr *attr)
struct kvm_s390_ais_req req; struct kvm_s390_ais_req req;
int ret = 0; int ret = 0;
if (!fi->ais_enabled) if (!test_kvm_facility(kvm, 72))
return -ENOTSUPP; return -ENOTSUPP;
if (copy_from_user(&req, (void __user *)attr->addr, sizeof(req))) if (copy_from_user(&req, (void __user *)attr->addr, sizeof(req)))
...@@ -2204,7 +2204,7 @@ static int kvm_s390_inject_airq(struct kvm *kvm, ...@@ -2204,7 +2204,7 @@ static int kvm_s390_inject_airq(struct kvm *kvm,
}; };
int ret = 0; int ret = 0;
if (!fi->ais_enabled || !adapter->suppressible) if (!test_kvm_facility(kvm, 72) || !adapter->suppressible)
return kvm_s390_inject_vm(kvm, &s390int); return kvm_s390_inject_vm(kvm, &s390int);
mutex_lock(&fi->ais_lock); mutex_lock(&fi->ais_lock);
......
...@@ -558,7 +558,6 @@ static int kvm_vm_ioctl_enable_cap(struct kvm *kvm, struct kvm_enable_cap *cap) ...@@ -558,7 +558,6 @@ static int kvm_vm_ioctl_enable_cap(struct kvm *kvm, struct kvm_enable_cap *cap)
} else { } else {
set_kvm_facility(kvm->arch.model.fac_mask, 72); set_kvm_facility(kvm->arch.model.fac_mask, 72);
set_kvm_facility(kvm->arch.model.fac_list, 72); set_kvm_facility(kvm->arch.model.fac_list, 72);
kvm->arch.float_int.ais_enabled = 1;
r = 0; r = 0;
} }
mutex_unlock(&kvm->lock); mutex_unlock(&kvm->lock);
...@@ -1533,7 +1532,6 @@ int kvm_arch_init_vm(struct kvm *kvm, unsigned long type) ...@@ -1533,7 +1532,6 @@ int kvm_arch_init_vm(struct kvm *kvm, unsigned long type)
mutex_init(&kvm->arch.float_int.ais_lock); mutex_init(&kvm->arch.float_int.ais_lock);
kvm->arch.float_int.simm = 0; kvm->arch.float_int.simm = 0;
kvm->arch.float_int.nimm = 0; kvm->arch.float_int.nimm = 0;
kvm->arch.float_int.ais_enabled = 0;
spin_lock_init(&kvm->arch.float_int.lock); spin_lock_init(&kvm->arch.float_int.lock);
for (i = 0; i < FIRQ_LIST_COUNT; i++) for (i = 0; i < FIRQ_LIST_COUNT; i++)
INIT_LIST_HEAD(&kvm->arch.float_int.lists[i]); INIT_LIST_HEAD(&kvm->arch.float_int.lists[i]);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment