[PATCH] runstate: don't move to prelaunch on reset if postmigrate

Vladimir Sementsov-Ogievskiy posted 1 patch 4 weeks ago
Patches applied successfully (tree, apply log)
git fetch https://github.com/patchew-project/qemu tags/patchew/20260627122234.657179-1-vsementsov@yandex-team.ru
Maintainers: Paolo Bonzini <pbonzini@redhat.com>
system/runstate.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
[PATCH] runstate: don't move to prelaunch on reset if postmigrate
Posted by Vladimir Sementsov-Ogievskiy 4 weeks ago
As comment says, runstate can change in parallel. We check
for FINISH_MIGRATE, but actually migration may proceed up
to POSTMIGRATE.

We should check for POSTMIGRATE as well, otherwise there is
a race, if reset is in progress, and source may finish migration
in PRELAUNCH state, which is unexpected for user.

Seems correct to handle POSTMIGRATE the same way as FINISH_MIGRATE
in this logic, as POSTMIGRATE is continuation for FINISH_MIGRATE.

Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@yandex-team.ru>
---
 system/runstate.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/system/runstate.c b/system/runstate.c
index 18e585be47..cee1aeae05 100644
--- a/system/runstate.c
+++ b/system/runstate.c
@@ -921,7 +921,8 @@ static bool main_loop_should_exit(int *status)
          */
         if (!runstate_check(RUN_STATE_RUNNING) &&
                 !runstate_check(RUN_STATE_INMIGRATE) &&
-                !runstate_check(RUN_STATE_FINISH_MIGRATE)) {
+                !runstate_check(RUN_STATE_FINISH_MIGRATE) &&
+                !runstate_check(RUN_STATE_POSTMIGRATE)) {
             runstate_set(RUN_STATE_PRELAUNCH);
         }
     }
-- 
2.43.0
Re: [PATCH] runstate: don't move to prelaunch on reset if postmigrate
Posted by Peter Xu 3 weeks, 5 days ago
On Sat, Jun 27, 2026 at 03:22:34PM +0300, Vladimir Sementsov-Ogievskiy wrote:
> As comment says, runstate can change in parallel. We check
> for FINISH_MIGRATE, but actually migration may proceed up
> to POSTMIGRATE.
> 
> We should check for POSTMIGRATE as well, otherwise there is
> a race, if reset is in progress, and source may finish migration
> in PRELAUNCH state, which is unexpected for user.
> 
> Seems correct to handle POSTMIGRATE the same way as FINISH_MIGRATE
> in this logic, as POSTMIGRATE is continuation for FINISH_MIGRATE.
> 
> Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@yandex-team.ru>

Reviewed-by: Peter Xu <peterx@redhat.com>

-- 
Peter Xu