From 200b5168858f0eb9e48d529fa131adedc2c193b4 Mon Sep 17 00:00:00 2001 From: libai Date: Mon, 4 Dec 2023 15:57:35 +0800 Subject: [PATCH 08/16] vhost: implement post resume bh Set vdpa device mig state to post start when vm post start Signed-off-by: libai --- hw/virtio/vdpa-dev-mig.c | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/hw/virtio/vdpa-dev-mig.c b/hw/virtio/vdpa-dev-mig.c index 662d4a2..1872f11 100644 --- a/hw/virtio/vdpa-dev-mig.c +++ b/hw/virtio/vdpa-dev-mig.c @@ -26,6 +26,7 @@ #include "qemu/error-report.h" #include "hw/virtio/vdpa-dev-mig.h" #include "migration/qemu-file-types.h" +#include "qemu/main-loop.h" /* * Flags used as delimiter: @@ -218,6 +219,18 @@ err_host_notifiers: return ret; } +static void vdpa_dev_migration_handle_incoming_bh(void *opaque) +{ + struct vhost_dev *hdev = opaque; + int ret; + + /* Post start device, unsupport rollback if failed! */ + ret = vhost_vdpa_set_mig_state(hdev, VDPA_DEVICE_POST_START); + if (ret) { + error_report("Failed to set state: POST_START\n"); + } +} + static void vdpa_dev_vmstate_change(void *opaque, bool running, RunState state) { VhostVdpaDevice *vdpa = VHOST_VDPA_DEVICE(opaque); @@ -247,6 +260,10 @@ static void vdpa_dev_vmstate_change(void *opaque, bool running, RunState state) if (mis->state == RUN_STATE_RESTORE_VM) { vhost_vdpa_call(hdev, VHOST_VDPA_RESUME, NULL); + /* post resume */ + mis->bh = qemu_bh_new(vdpa_dev_migration_handle_incoming_bh, + hdev); + qemu_bh_schedule(mis->bh); } } } -- 2.46.0.windows.1