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

Thanks

Farhan


Reply via email to