@@ -457,6 +457,12 @@ static void kvm_flic_ais_pre_save(void *opaque)
.attr = sizeof(ais),
};
+ if (!flic->parent_obj.ais_supported) {
+ tmp->simm = flic->simm;
+ tmp->nimm = flic->nimm;
+ return;
+ }
+
if (ioctl(flic->fd, KVM_GET_DEVICE_ATTR, &attr)) {
error_report("Failed to retrieve kvm flic ais states");
return;
@@ -479,14 +485,10 @@ static int kvm_flic_ais_post_load(void *opaque, int version_id)
.addr = (uint64_t)&ais,
};
- /* This can happen when the user mis-configures its guests in an
- * incompatible fashion or without a CPU model. For example using
- * qemu with -cpu host (which is not migration safe) and do a
- * migration from a host that has AIS to a host that has no AIS.
- * In that case the target system will reject the migration here.
- */
- if (!ais_needed(flic)) {
- return -ENOSYS;
+ if (!flic->parent_obj.ais_supported) {
+ flic->simm = tmp->simm;
+ flic->nimm = tmp->nimm;
+ return 0;
}
return ioctl(flic->fd, KVM_SET_DEVICE_ATTR, &attr) ? -errno : 0;
Adapter Interrupt Suppression can now be emulated if the host kernel does not support the FLIC AIS attributes in KVM. It follows it can always be migrated. In the case AIS is supported by the kernel at one side of the migration 1) SRC and DST AIS in KVM All PCI devices can be created on SRC and DST All PCI devices can migrate 2) SRC and DST AIS NOT in KVM Only emulated PCI devices can be used on SRC and DST Only emulated PCI devices can migrate 3) SRC AIS in KVM DST has NOT AIS in KVM Only emulated PCI devices can migrate Only emulated PCI devices can be created on SRC and DST VFIO PCI devices can be used only on SRC 4) SRC has NOT AIS in KVM DST AIS in KVM Only emulated PCI devices can migrate Only emulated PCI devices can be created on SRC and DST VFIO PCI devices can be used only on DST Signed-off-by: Pierre Morel <pmorel@linux.vnet.ibm.com> --- hw/intc/s390_flic_kvm.c | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-)