Projects
home:dongzhihai
qemu
_service:tar_scm:vdpa-don-t-suspend-resume-devi...
Sign Up
Log In
Username
Password
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File _service:tar_scm:vdpa-don-t-suspend-resume-device-when-vdpa-device-no.patch of Package qemu
From b82f02e93d5efa2ea62dd135c508cb707fdd35a7 Mon Sep 17 00:00:00 2001 From: libai <libai12@huawei.com> 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: libai <libai12@huawei.com> --- 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 1d299019da..887c96a201 100644 --- a/hw/virtio/vdpa-dev-mig.c +++ b/hw/virtio/vdpa-dev-mig.c @@ -294,10 +294,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); @@ -311,6 +314,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) { @@ -323,10 +327,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
Locations
Projects
Search
Status Monitor
Help
Open Build Service
OBS Manuals
API Documentation
OBS Portal
Reporting a Bug
Contact
Mailing List
Forums
Chat (IRC)
Twitter
Open Build Service (OBS)
is an
openSUSE project
.
浙ICP备2022010568号-2