Re: [PATCH v5 14/15] s390x/pci: Implement migration for emulated devices

Konstantin Shkolnyy <[email protected]>
Newsgroups gmane.comp.emulators.qemu
Message-ID <[email protected]>
On 260805 17:02, Farhan Ali wrote:
> 
> On 8/3/2026 7:44 PM, Konstantin Shkolnyy wrote:
>> Implement zPCI device state migration, consequently enabling migration
>> of VMs that have emulated PCI devices, whether virtio or not.
>> Migration is allowed for devices whose function handle has the
>> FH_SHM_EMUL bit set. For these devices QEMU will save and restore the
>> state of its zPCI emulator.
>>
>> This will enable emulated PCI migration starting with s390-ccw- 
>> virtio-11.1.
>>
>> Passthrough devices will continue to block migration.
>>
>> Signed-off-by: Konstantin Shkolnyy<[email protected]>
>> ---
>>   hw/s390x/s390-pci-bus.c         | 189 +++++++++++++++++++++++++++++++-
>>   hw/s390x/s390-pci-inst.c        |   2 +-
>>   hw/s390x/s390-virtio-ccw.c      |   4 +
>>   include/hw/s390x/s390-pci-bus.h |   4 +
>>   4 files changed, 193 insertions(+), 6 deletions(-)
>>
>> diff --git a/hw/s390x/s390-pci-bus.c b/hw/s390x/s390-pci-bus.c
>> index a94e24a2ac..9441c80ef4 100644
>> --- a/hw/s390x/s390-pci-bus.c
>> +++ b/hw/s390x/s390-pci-bus.c
>> @@ -26,6 +26,7 @@
>>   #include "hw/pci/pci_bridge.h"
>>   #include "hw/pci/msi.h"
>>   #include "exec/cpu-common.h"
>> +#include "migration/blocker.h"
>>   #include "qemu/error-report.h"
>>   #include "qemu/module.h"
>>   #include "system/physmem.h"
>> @@ -34,6 +35,11 @@
>>   #include "trace.h"
>> +static const Property phb_props[] = {
>> +    DEFINE_PROP_BOOL("x-zpci-emul-dev-migr-enabled", S390pciState,
>> +                     emul_dev_migr_enabled, true),
>> +};
>> +
>>   S390pciState *s390_get_phb(void)
>>   {
>>       static S390pciState *phb;
>> @@ -917,6 +923,23 @@ static void set_pbdev_info(S390PCIBusDevice *pbdev)
>>       pbdev->pci_group = s390_group_find(ZPCI_DEFAULT_FN_GRP);
>>   }
>> +static int s390_set_emul_dev_migration_blocker(S390pciState *s, Error 
>> **errp)
>> +{
>> +    if (s->emul_dev_migr_enabled) {
>> +        return 0;
>> +    }
>> +    error_setg(&s->emul_dev_migr_blocker,
>> +               "Migration disabled for emulated zPCI devices on this 
>> machine type");
>> +    return migrate_add_blocker(&s->emul_dev_migr_blocker, errp);
>> +}
>> +
> I was trying to test this patch series, and something i tried was doing 
> was a save/restore of a VM with just CCW devices. But with this patch 
> the save/restore of the VM fails with error:
> 
> error: Requested operation is not valid: cannot migrate domain: 
> Migration disabled for emulated zPCI devices on this machine type
> 
> I think this is a regression, as the save/restore works with the same 
> guest definition with current master branch. I also think this may break 
> live migration for guest with just CCW devices. Something to also note, 
> by default libvirt auto adds a pci-root controller to the guest 
> definition [1]. So i wonder if that's tripping up the migration blocker?
> 
> 
> [1] https://docs.redhat.com/en/documentation/red_hat_enterprise_linux/7/ 
> html/virtualization_deployment_and_administration_guide/sect- 
> guest_virtual_machine_device_configuration-configuring_device_controllers

Yes, indeed there is this device in qtree, even without any PCI devices 
configured in the libvirt XML, and it blocks migration:

       dev: s390-pcihost, id ""
         x-zpci-emul-dev-migr-enabled = false
         x-config-reg-migration-enabled = true
         bypass-iommu = false
         bus: s390-pcibus.0
           type s390-pcibus
         bus: pci.0
           type PCI

Instead of creating a single migration blocker for this s390-pcihost, 
I'll create one for each PCI device if this x-zpci-emul-dev-migr-enabled 
flag if false.
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.