All Virtuozzo development lists (kernel + QEMU)
 help / color / mirror / Atom feed
* [PATCH hci-dev] vfio/migration: leave the device alone when the guest shuts down #VSTOR-153976
@ 2026-11-07 20:56 Andrey Drobyshev
  2026-11-07 21:00 ` no-reply
  0 siblings, 1 reply; 2+ messages in thread
From: Andrey Drobyshev @ 2026-11-07 20:56 UTC (permalink / raw)
  To: svt-core; +Cc: andrey.drobyshev, den

When the guest shuts down and QEMU runs with -no-shutdown, the VM stays
stopped and can only be reset or quit. A libvirt soft reboot is exactly
that: guest shutdown, system_reset, cont. Today vfio_vmstate_change()
treats this stop like any other and moves the device to STOP, then cont
brings it back to RUNNING.

NVIDIA's vGPU manager (595.71.03) takes that STOP for the start of a
migration, finds no guest driver, breaks its dirty page tracking and
never repairs it when the driver loads again. Every live migration of
the VM after a soft reboot then fails: "Error saving page in pipelined
mode".

Do not touch the device state on a guest shutdown. There is nothing to
quiesce, and the reset that must follow resets the device anyway.
Pause, migration and savevm still stop the device as before.

With this patch applied, soft reboot + subsequent live migration pass
successfully.

Signed-off-by: Andrey Drobyshev <andrey.drobyshev@virtuozzo.com>
---
 hw/vfio/migration.c | 14 ++++++++++++++
 1 file changed, 14 insertions(+)

diff --git a/hw/vfio/migration.c b/hw/vfio/migration.c
index 7e7fb496bbe..c02b6a199b8 100644
--- a/hw/vfio/migration.c
+++ b/hw/vfio/migration.c
@@ -899,6 +899,11 @@ static void vfio_vmstate_change_prepare(void *opaque, bool running,
         return;
     }
 
+    /* The guest has shut down, the device state stays as it is */
+    if (!running && state == RUN_STATE_SHUTDOWN) {
+        return;
+    }
+
     new_state = migration->device_state == VFIO_DEVICE_STATE_PRE_COPY ?
                     VFIO_DEVICE_STATE_PRE_COPY_P2P :
                     VFIO_DEVICE_STATE_RUNNING_P2P;
@@ -936,6 +941,15 @@ static void vfio_vmstate_change(void *opaque, bool running, RunState state)
         return;
     }
 
+    /*
+     * The guest has shut down and QEMU keeps the VM stopped. It can only
+     * be reset or quit now, so leave the device state as it is: the reset
+     * resets the device too.
+     */
+    if (!running && state == RUN_STATE_SHUTDOWN) {
+        return;
+    }
+
     if (running) {
         new_state = VFIO_DEVICE_STATE_RUNNING;
     } else {
-- 
2.47.1


^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2026-11-07 21:00 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2026-11-07 20:56 [PATCH hci-dev] vfio/migration: leave the device alone when the guest shuts down #VSTOR-153976 Andrey Drobyshev
2026-11-07 21:00 ` no-reply

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.