From daab4fa364c508d793ed28a920d50cd76efe7633 Mon Sep 17 00:00:00 2001 From: jiangdongxu Date: Tue, 19 Dec 2023 20:32:00 +0800 Subject: [PATCH] vdpa: don't suspend/resume device when vdpa device not started When vdpa device not started, we don't need to suspend vdpa device and send vdpa device state information. Therefore, add the suspended flag of vdpa device to distinguish whether the device is suspended and use it to determine whether the device needs to resume in dest qemu. Signed-off-by: jiangdongxu --- hw/virtio/vdpa-dev-mig.c | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/hw/virtio/vdpa-dev-mig.c b/hw/virtio/vdpa-dev-mig.c index 4a45821892..9cd80f92eb 100644 --- a/hw/virtio/vdpa-dev-mig.c +++ b/hw/virtio/vdpa-dev-mig.c @@ -296,10 +296,13 @@ static int vdpa_save_complete_precopy(QEMUFile *f, void *opaque) int ret; qemu_put_be64(f, VDPA_MIG_FLAG_DEV_CONFIG_STATE); - ret = vhost_vdpa_dev_buffer_save(hdev, f); - if (ret) { - error_report("Save vdpa device buffer failed: %d\n", ret); - return ret; + qemu_put_be16(f, (uint16_t)vdev->suspended); + if (vdev->suspended) { + ret = vhost_vdpa_dev_buffer_save(hdev, f); + if (ret) { + error_report("Save vdpa device buffer failed: %d\n", ret); + return ret; + } } qemu_put_be64(f, VDPA_MIG_FLAG_END_OF_STATE); @@ -313,6 +316,7 @@ static int vdpa_load_state(QEMUFile *f, void *opaque, int version_id) int ret; uint64_t data; + uint16_t suspended; data = qemu_get_be64(f); while (data != VDPA_MIG_FLAG_END_OF_STATE) { @@ -325,10 +329,13 @@ static int vdpa_load_state(QEMUFile *f, void *opaque, int version_id) return -EINVAL; } } else if (data == VDPA_MIG_FLAG_DEV_CONFIG_STATE) { - ret = vhost_vdpa_dev_buffer_load(hdev, f); - if (ret) { - error_report("fail to restore device buffer.\n"); - return ret; + suspended = qemu_get_be16(f); + if (suspended) { + ret = vhost_vdpa_dev_buffer_load(hdev, f); + if (ret) { + error_report("fail to restore device buffer.\n"); + return ret; + } } } -- 2.27.0