From 722147da4fb76c0ee6e75957712073a820ab1d75 Mon Sep 17 00:00:00 2001 From: fangyi Date: Mon, 4 Dec 2023 15:59:56 +0800 Subject: [PATCH] vdpa: implement vdpa device migration Integrate the live migration code, call the registered live migration function, and open the vdpa live migration prototype Signed-off-by: libai Signed-off-by: jiangdongxu Signed-off-by: fangyi --- hw/virtio/vdpa-dev.c | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/hw/virtio/vdpa-dev.c b/hw/virtio/vdpa-dev.c index 254a213117..986b5d0a78 100644 --- a/hw/virtio/vdpa-dev.c +++ b/hw/virtio/vdpa-dev.c @@ -29,6 +29,8 @@ #include "hw/virtio/vdpa-dev.h" #include "sysemu/sysemu.h" #include "sysemu/runstate.h" +#include "hw/virtio/vdpa-dev-mig.h" +#include "migration/migration.h" static void vhost_vdpa_device_dummy_handle_output(VirtIODevice *vdev, VirtQueue *vq) @@ -155,6 +157,8 @@ static void vhost_vdpa_device_realize(DeviceState *dev, Error **errp) vhost_vdpa_device_dummy_handle_output); } + vdpa_migration_register(v); + return; free_config: @@ -174,6 +178,7 @@ static void vhost_vdpa_device_unrealize(DeviceState *dev) VhostVdpaDevice *s = VHOST_VDPA_DEVICE(vdev); int i; + vdpa_migration_unregister(s); virtio_set_status(vdev, 0); for (i = 0; i < s->num_queues; i++) { @@ -306,6 +311,7 @@ static void vhost_vdpa_device_stop(VirtIODevice *vdev) static void vhost_vdpa_device_set_status(VirtIODevice *vdev, uint8_t status) { VhostVdpaDevice *s = VHOST_VDPA_DEVICE(vdev); + MigrationState *ms = migrate_get_current(); bool should_start = virtio_device_started(vdev, status); Error *local_err = NULL; int ret; @@ -318,6 +324,11 @@ static void vhost_vdpa_device_set_status(VirtIODevice *vdev, uint8_t status) return; } + if (ms->state == RUN_STATE_PAUSED || + ms->state == RUN_STATE_RESTORE_VM) { + return; + } + if (should_start) { ret = vhost_vdpa_device_start(vdev, &local_err); if (ret < 0) { @@ -336,7 +347,7 @@ static Property vhost_vdpa_device_properties[] = { static const VMStateDescription vmstate_vhost_vdpa_device = { .name = "vhost-vdpa-device", - .unmigratable = 1, + .unmigratable = 0, .minimum_version_id = 1, .version_id = 1, .fields = (VMStateField[]) { -- 2.27.0