All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 0/2] tests/migration-test: Small cleanup series on postcopy tests
@ 2026-01-06 20:33 Peter Xu
  2026-01-06 20:33 ` [PATCH 1/2] tests/migration-test: Remove postcopy_data from MigrateCommon Peter Xu
  2026-01-06 20:33 ` [PATCH 2/2] tests/migration-test: Remove postcopy_recovery_fail_stage " Peter Xu
  0 siblings, 2 replies; 14+ messages in thread
From: Peter Xu @ 2026-01-06 20:33 UTC (permalink / raw)
  To: qemu-devel; +Cc: Fabiano Rosas, Lukas Straub, peterx, Juraj Marcin

This series removes two unnecessary fields in MigrateCommon that was only
for postcopy tests.

Comments welcomed, thanks.

Peter Xu (2):
  tests/migration-test: Remove postcopy_data from MigrateCommon
  tests/migration-test: Remove postcopy_recovery_fail_stage from
    MigrateCommon

 tests/qtest/migration/framework.h      |  7 ++-----
 tests/qtest/migration/framework.c      | 25 ++++++++++++++-----------
 tests/qtest/migration/postcopy-tests.c | 12 ++++--------
 tests/qtest/migration/tls-tests.c      |  8 ++++----
 4 files changed, 24 insertions(+), 28 deletions(-)

-- 
2.50.1



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

* [PATCH 1/2] tests/migration-test: Remove postcopy_data from MigrateCommon
  2026-01-06 20:33 [PATCH 0/2] tests/migration-test: Small cleanup series on postcopy tests Peter Xu
@ 2026-01-06 20:33 ` Peter Xu
  2026-01-07 11:23   ` Prasad Pandit
  2026-01-06 20:33 ` [PATCH 2/2] tests/migration-test: Remove postcopy_recovery_fail_stage " Peter Xu
  1 sibling, 1 reply; 14+ messages in thread
From: Peter Xu @ 2026-01-06 20:33 UTC (permalink / raw)
  To: qemu-devel; +Cc: Fabiano Rosas, Lukas Straub, peterx, Juraj Marcin

Now postcopy is not the only user of start_hook / end_hook that will pass
in a opaque pointer.  It doesn't need to be defined in MigrateCommon as
part of the framework, as all other hook users can pass hook_data around.
Do it too for postcopy.

Signed-off-by: Peter Xu <peterx@redhat.com>
---
 tests/qtest/migration/framework.h |  1 -
 tests/qtest/migration/framework.c | 18 ++++++++++--------
 2 files changed, 10 insertions(+), 9 deletions(-)

diff --git a/tests/qtest/migration/framework.h b/tests/qtest/migration/framework.h
index ed85ed502d..0d39bb0d3c 100644
--- a/tests/qtest/migration/framework.h
+++ b/tests/qtest/migration/framework.h
@@ -230,7 +230,6 @@ typedef struct {
     bool live;
 
     /* Postcopy specific fields */
-    void *postcopy_data;
     PostcopyRecoveryFailStage postcopy_recovery_fail_stage;
 } MigrateCommon;
 
diff --git a/tests/qtest/migration/framework.c b/tests/qtest/migration/framework.c
index e35839c95f..4f46cf8629 100644
--- a/tests/qtest/migration/framework.c
+++ b/tests/qtest/migration/framework.c
@@ -541,6 +541,7 @@ void migrate_end(QTestState *from, QTestState *to, bool test_dest)
 
 static int migrate_postcopy_prepare(QTestState **from_ptr,
                                     QTestState **to_ptr,
+                                    void **hook_data,
                                     MigrateCommon *args)
 {
     QTestState *from, *to;
@@ -554,7 +555,7 @@ static int migrate_postcopy_prepare(QTestState **from_ptr,
     }
 
     if (args->start_hook) {
-        args->postcopy_data = args->start_hook(from, to);
+        *hook_data = args->start_hook(from, to);
     }
 
     migrate_ensure_non_converge(from);
@@ -582,7 +583,7 @@ static int migrate_postcopy_prepare(QTestState **from_ptr,
 }
 
 static void migrate_postcopy_complete(QTestState *from, QTestState *to,
-                                      MigrateCommon *args)
+                                      void *hook_data, MigrateCommon *args)
 {
     MigrationTestEnv *env = migration_get_env();
 
@@ -601,8 +602,7 @@ static void migrate_postcopy_complete(QTestState *from, QTestState *to,
     }
 
     if (args->end_hook) {
-        args->end_hook(from, to, args->postcopy_data);
-        args->postcopy_data = NULL;
+        args->end_hook(from, to, hook_data);
     }
 
     migrate_end(from, to, true);
@@ -610,13 +610,14 @@ static void migrate_postcopy_complete(QTestState *from, QTestState *to,
 
 void test_postcopy_common(MigrateCommon *args)
 {
+    void *hook_data = NULL;
     QTestState *from, *to;
 
-    if (migrate_postcopy_prepare(&from, &to, args)) {
+    if (migrate_postcopy_prepare(&from, &to, &hook_data, args)) {
         return;
     }
     migrate_postcopy_start(from, to, &src_state);
-    migrate_postcopy_complete(from, to, args);
+    migrate_postcopy_complete(from, to, hook_data, args);
 }
 
 static void wait_for_postcopy_status(QTestState *one, const char *status)
@@ -742,6 +743,7 @@ void test_postcopy_recovery_common(MigrateCommon *args)
 {
     QTestState *from, *to;
     g_autofree char *uri = NULL;
+    void *hook_data = NULL;
 
     /*
      * Always enable OOB QMP capability for recovery tests, migrate-recover is
@@ -752,7 +754,7 @@ void test_postcopy_recovery_common(MigrateCommon *args)
     /* Always hide errors for postcopy recover tests since they're expected */
     args->start.hide_stderr = true;
 
-    if (migrate_postcopy_prepare(&from, &to, args)) {
+    if (migrate_postcopy_prepare(&from, &to, &hook_data, args)) {
         return;
     }
 
@@ -808,7 +810,7 @@ void test_postcopy_recovery_common(MigrateCommon *args)
     /* Restore the postcopy bandwidth to unlimited */
     migrate_set_parameter_int(from, "max-postcopy-bandwidth", 0);
 
-    migrate_postcopy_complete(from, to, args);
+    migrate_postcopy_complete(from, to, hook_data, args);
 }
 
 int test_precopy_common(MigrateCommon *args)
-- 
2.50.1



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

* [PATCH 2/2] tests/migration-test: Remove postcopy_recovery_fail_stage from MigrateCommon
  2026-01-06 20:33 [PATCH 0/2] tests/migration-test: Small cleanup series on postcopy tests Peter Xu
  2026-01-06 20:33 ` [PATCH 1/2] tests/migration-test: Remove postcopy_data from MigrateCommon Peter Xu
@ 2026-01-06 20:33 ` Peter Xu
  2026-01-07 11:37   ` Prasad Pandit
  1 sibling, 1 reply; 14+ messages in thread
From: Peter Xu @ 2026-01-06 20:33 UTC (permalink / raw)
  To: qemu-devel; +Cc: Fabiano Rosas, Lukas Straub, peterx, Juraj Marcin

The parameter can be instead passed into the function.

Signed-off-by: Peter Xu <peterx@redhat.com>
---
 tests/qtest/migration/framework.h      |  6 ++----
 tests/qtest/migration/framework.c      |  7 ++++---
 tests/qtest/migration/postcopy-tests.c | 12 ++++--------
 tests/qtest/migration/tls-tests.c      |  8 ++++----
 4 files changed, 14 insertions(+), 19 deletions(-)

diff --git a/tests/qtest/migration/framework.h b/tests/qtest/migration/framework.h
index 0d39bb0d3c..bc6cf6040f 100644
--- a/tests/qtest/migration/framework.h
+++ b/tests/qtest/migration/framework.h
@@ -228,9 +228,6 @@ typedef struct {
      * refer to existing ones with live=true), or use live=off by default.
      */
     bool live;
-
-    /* Postcopy specific fields */
-    PostcopyRecoveryFailStage postcopy_recovery_fail_stage;
 } MigrateCommon;
 
 void wait_for_serial(const char *side);
@@ -243,7 +240,8 @@ int migrate_start(QTestState **from, QTestState **to, const char *uri,
 void migrate_end(QTestState *from, QTestState *to, bool test_dest);
 
 void test_postcopy_common(MigrateCommon *args);
-void test_postcopy_recovery_common(MigrateCommon *args);
+void test_postcopy_recovery_common(MigrateCommon *args,
+                                   PostcopyRecoveryFailStage fail_stage);
 int test_precopy_common(MigrateCommon *args);
 void test_file_common(MigrateCommon *args, bool stop_src);
 void *migrate_hook_start_precopy_tcp_multifd_common(QTestState *from,
diff --git a/tests/qtest/migration/framework.c b/tests/qtest/migration/framework.c
index 4f46cf8629..d7a5ae56f9 100644
--- a/tests/qtest/migration/framework.c
+++ b/tests/qtest/migration/framework.c
@@ -739,7 +739,8 @@ static void postcopy_recover_fail(QTestState *from, QTestState *to,
 #endif
 }
 
-void test_postcopy_recovery_common(MigrateCommon *args)
+void test_postcopy_recovery_common(MigrateCommon *args,
+                                   PostcopyRecoveryFailStage fail_stage)
 {
     QTestState *from, *to;
     g_autofree char *uri = NULL;
@@ -784,12 +785,12 @@ void test_postcopy_recovery_common(MigrateCommon *args)
     wait_for_postcopy_status(to, "postcopy-paused");
     wait_for_postcopy_status(from, "postcopy-paused");
 
-    if (args->postcopy_recovery_fail_stage) {
+    if (fail_stage) {
         /*
          * Test when a wrong socket specified for recover, and then the
          * ability to kick it out, and continue with a correct socket.
          */
-        postcopy_recover_fail(from, to, args->postcopy_recovery_fail_stage);
+        postcopy_recover_fail(from, to, fail_stage);
         /* continue with a good recovery */
     }
 
diff --git a/tests/qtest/migration/postcopy-tests.c b/tests/qtest/migration/postcopy-tests.c
index 7ae4d765d7..13a5759655 100644
--- a/tests/qtest/migration/postcopy-tests.c
+++ b/tests/qtest/migration/postcopy-tests.c
@@ -41,30 +41,26 @@ static void test_postcopy_preempt(char *name, MigrateCommon *args)
 
 static void test_postcopy_recovery(char *name, MigrateCommon *args)
 {
-    test_postcopy_recovery_common(args);
+    test_postcopy_recovery_common(args, POSTCOPY_FAIL_NONE);
 }
 
 static void test_postcopy_recovery_fail_handshake(char *name,
                                                   MigrateCommon *args)
 {
-    args->postcopy_recovery_fail_stage = POSTCOPY_FAIL_RECOVERY;
-
-    test_postcopy_recovery_common(args);
+    test_postcopy_recovery_common(args, POSTCOPY_FAIL_RECOVERY);
 }
 
 static void test_postcopy_recovery_fail_reconnect(char *name,
                                                   MigrateCommon *args)
 {
-    args->postcopy_recovery_fail_stage = POSTCOPY_FAIL_CHANNEL_ESTABLISH;
-
-    test_postcopy_recovery_common(args);
+    test_postcopy_recovery_common(args, POSTCOPY_FAIL_CHANNEL_ESTABLISH);
 }
 
 static void test_postcopy_preempt_recovery(char *name, MigrateCommon *args)
 {
     args->start.caps[MIGRATION_CAPABILITY_POSTCOPY_PREEMPT] = true;
 
-    test_postcopy_recovery_common(args);
+    test_postcopy_recovery_common(args, POSTCOPY_FAIL_NONE);
 }
 
 static void migration_test_add_postcopy_smoke(MigrationTestEnv *env)
diff --git a/tests/qtest/migration/tls-tests.c b/tests/qtest/migration/tls-tests.c
index 6a20c65104..bf0bb06a29 100644
--- a/tests/qtest/migration/tls-tests.c
+++ b/tests/qtest/migration/tls-tests.c
@@ -385,7 +385,7 @@ static void test_postcopy_recovery_tls_psk(char *name, MigrateCommon *args)
     args->start_hook = migrate_hook_start_tls_psk_match;
     args->end_hook = migrate_hook_end_tls_psk;
 
-    test_postcopy_recovery_common(args);
+    test_postcopy_recovery_common(args, POSTCOPY_FAIL_NONE);
 }
 
 static void test_multifd_postcopy_recovery_tls_psk(char *name,
@@ -396,7 +396,7 @@ static void test_multifd_postcopy_recovery_tls_psk(char *name,
 
     args->start.caps[MIGRATION_CAPABILITY_MULTIFD] = true;
 
-    test_postcopy_recovery_common(args);
+    test_postcopy_recovery_common(args, POSTCOPY_FAIL_NONE);
 }
 
 /* This contains preempt+recovery+tls test altogether */
@@ -407,7 +407,7 @@ static void test_postcopy_preempt_all(char *name, MigrateCommon *args)
 
     args->start.caps[MIGRATION_CAPABILITY_POSTCOPY_PREEMPT] = true;
 
-    test_postcopy_recovery_common(args);
+    test_postcopy_recovery_common(args, POSTCOPY_FAIL_NONE);
 }
 
 static void test_multifd_postcopy_preempt_recovery_tls_psk(char *name,
@@ -419,7 +419,7 @@ static void test_multifd_postcopy_preempt_recovery_tls_psk(char *name,
     args->start.caps[MIGRATION_CAPABILITY_MULTIFD] = true;
     args->start.caps[MIGRATION_CAPABILITY_POSTCOPY_PREEMPT] = true;
 
-    test_postcopy_recovery_common(args);
+    test_postcopy_recovery_common(args, POSTCOPY_FAIL_NONE);
 }
 
 static void test_precopy_unix_tls_psk(char *name, MigrateCommon *args)
-- 
2.50.1



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

* Re: [PATCH 1/2] tests/migration-test: Remove postcopy_data from MigrateCommon
  2026-01-06 20:33 ` [PATCH 1/2] tests/migration-test: Remove postcopy_data from MigrateCommon Peter Xu
@ 2026-01-07 11:23   ` Prasad Pandit
  2026-01-07 17:12     ` Peter Xu
  0 siblings, 1 reply; 14+ messages in thread
From: Prasad Pandit @ 2026-01-07 11:23 UTC (permalink / raw)
  To: Peter Xu; +Cc: qemu-devel, Fabiano Rosas, Lukas Straub, Juraj Marcin

On Wed, 7 Jan 2026 at 02:04, Peter Xu <peterx@redhat.com> wrote:
> Now postcopy is not the only user of start_hook / end_hook that will pass
> in a opaque pointer.  It doesn't need to be defined in MigrateCommon as
> part of the framework, as all other hook users can pass hook_data around.
> Do it too for postcopy.
>
> Signed-off-by: Peter Xu <peterx@redhat.com>
> ---
>  tests/qtest/migration/framework.h |  1 -
>  tests/qtest/migration/framework.c | 18 ++++++++++--------
>  2 files changed, 10 insertions(+), 9 deletions(-)
>
> diff --git a/tests/qtest/migration/framework.h b/tests/qtest/migration/framework.h
> index ed85ed502d..0d39bb0d3c 100644
> --- a/tests/qtest/migration/framework.h
> +++ b/tests/qtest/migration/framework.h
> @@ -230,7 +230,6 @@ typedef struct {
>      bool live;
>
>      /* Postcopy specific fields */
> -    void *postcopy_data;
>      PostcopyRecoveryFailStage postcopy_recovery_fail_stage;
>  } MigrateCommon;
>
> diff --git a/tests/qtest/migration/framework.c b/tests/qtest/migration/framework.c
> index e35839c95f..4f46cf8629 100644
> --- a/tests/qtest/migration/framework.c
> +++ b/tests/qtest/migration/framework.c
> @@ -541,6 +541,7 @@ void migrate_end(QTestState *from, QTestState *to, bool test_dest)
>
>  static int migrate_postcopy_prepare(QTestState **from_ptr,
>                                      QTestState **to_ptr,
> +                                    void **hook_data,
>                                      MigrateCommon *args)
>  {
>      QTestState *from, *to;
> @@ -554,7 +555,7 @@ static int migrate_postcopy_prepare(QTestState **from_ptr,
>      }
>
>      if (args->start_hook) {
> -        args->postcopy_data = args->start_hook(from, to);
> +        *hook_data = args->start_hook(from, to);
>      }
>      migrate_ensure_non_converge(from);
> @@ -582,7 +583,7 @@ static int migrate_postcopy_prepare(QTestState **from_ptr,
>  }
>
>  static void migrate_postcopy_complete(QTestState *from, QTestState *to,
> -                                      MigrateCommon *args)
> +                                      void *hook_data, MigrateCommon *args)
>  {
>      MigrationTestEnv *env = migration_get_env();
>
> @@ -601,8 +602,7 @@ static void migrate_postcopy_complete(QTestState *from, QTestState *to,
>      }
>
>      if (args->end_hook) {
> -        args->end_hook(from, to, args->postcopy_data);
> -        args->postcopy_data = NULL;
> +        args->end_hook(from, to, hook_data);
>      }
>
>      migrate_end(from, to, true);
> @@ -610,13 +610,14 @@ static void migrate_postcopy_complete(QTestState *from, QTestState *to,
>
>  void test_postcopy_common(MigrateCommon *args)
>  {
> +    void *hook_data = NULL;
>      QTestState *from, *to;
>
> -    if (migrate_postcopy_prepare(&from, &to, args)) {
> +    if (migrate_postcopy_prepare(&from, &to, &hook_data, args)) {
>          return;
>      }
>      migrate_postcopy_start(from, to, &src_state);
> -    migrate_postcopy_complete(from, to, args);
> +    migrate_postcopy_complete(from, to, hook_data, args);
>  }
>
>  static void wait_for_postcopy_status(QTestState *one, const char *status)
> @@ -742,6 +743,7 @@ void test_postcopy_recovery_common(MigrateCommon *args)
>  {
>      QTestState *from, *to;
>      g_autofree char *uri = NULL;
> +    void *hook_data = NULL;

* Should 'hook_data' pointer be g_autofree too? Where is it free'd otherwise?

>      /*
>       * Always enable OOB QMP capability for recovery tests, migrate-recover is
> @@ -752,7 +754,7 @@ void test_postcopy_recovery_common(MigrateCommon *args)
>      /* Always hide errors for postcopy recover tests since they're expected */
>      args->start.hide_stderr = true;
>
> -    if (migrate_postcopy_prepare(&from, &to, args)) {
> +    if (migrate_postcopy_prepare(&from, &to, &hook_data, args)) {
>          return;
>      }
>
> @@ -808,7 +810,7 @@ void test_postcopy_recovery_common(MigrateCommon *args)
>      /* Restore the postcopy bandwidth to unlimited */
>      migrate_set_parameter_int(from, "max-postcopy-bandwidth", 0);
>
> -    migrate_postcopy_complete(from, to, args);
> +    migrate_postcopy_complete(from, to, hook_data, args);
>  }
>
>  int test_precopy_common(MigrateCommon *args)

* The changes look okay; But if tests define hook_data = NULL; Where
does it get populated?

Thank you.
---
  - Prasad



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

* Re: [PATCH 2/2] tests/migration-test: Remove postcopy_recovery_fail_stage from MigrateCommon
  2026-01-06 20:33 ` [PATCH 2/2] tests/migration-test: Remove postcopy_recovery_fail_stage " Peter Xu
@ 2026-01-07 11:37   ` Prasad Pandit
  2026-01-07 17:14     ` Peter Xu
  0 siblings, 1 reply; 14+ messages in thread
From: Prasad Pandit @ 2026-01-07 11:37 UTC (permalink / raw)
  To: Peter Xu; +Cc: qemu-devel, Fabiano Rosas, Lukas Straub, Juraj Marcin

On Wed, 7 Jan 2026 at 02:04, Peter Xu <peterx@redhat.com> wrote:
> The parameter can be instead passed into the function.

* It'll help to include - why? pass the parameter instead.

> Signed-off-by: Peter Xu <peterx@redhat.com>
> ---
>  tests/qtest/migration/framework.h      |  6 ++----
>  tests/qtest/migration/framework.c      |  7 ++++---
>  tests/qtest/migration/postcopy-tests.c | 12 ++++--------
>  tests/qtest/migration/tls-tests.c      |  8 ++++----
>  4 files changed, 14 insertions(+), 19 deletions(-)
>
> diff --git a/tests/qtest/migration/framework.h b/tests/qtest/migration/framework.h
> index 0d39bb0d3c..bc6cf6040f 100644
> --- a/tests/qtest/migration/framework.h
> +++ b/tests/qtest/migration/framework.h
> @@ -228,9 +228,6 @@ typedef struct {
>       * refer to existing ones with live=true), or use live=off by default.
>       */
>      bool live;
> -
> -    /* Postcopy specific fields */
> -    PostcopyRecoveryFailStage postcopy_recovery_fail_stage;
>  } MigrateCommon;
>
>  void wait_for_serial(const char *side);
> @@ -243,7 +240,8 @@ int migrate_start(QTestState **from, QTestState **to, const char *uri,
>  void migrate_end(QTestState *from, QTestState *to, bool test_dest);
>
>  void test_postcopy_common(MigrateCommon *args);
> -void test_postcopy_recovery_common(MigrateCommon *args);
> +void test_postcopy_recovery_common(MigrateCommon *args,
> +                                   PostcopyRecoveryFailStage fail_stage);
>  int test_precopy_common(MigrateCommon *args);
>  void test_file_common(MigrateCommon *args, bool stop_src);
>  void *migrate_hook_start_precopy_tcp_multifd_common(QTestState *from,
> diff --git a/tests/qtest/migration/framework.c b/tests/qtest/migration/framework.c
> index 4f46cf8629..d7a5ae56f9 100644
> --- a/tests/qtest/migration/framework.c
> +++ b/tests/qtest/migration/framework.c
> @@ -739,7 +739,8 @@ static void postcopy_recover_fail(QTestState *from, QTestState *to,
>  #endif
>  }
>
> -void test_postcopy_recovery_common(MigrateCommon *args)
> +void test_postcopy_recovery_common(MigrateCommon *args,
> +                                   PostcopyRecoveryFailStage fail_stage)
===
    static void postcopy_recover_fail(QTestState *from, QTestState
*to,
                                       PostcopyRecoveryFailStage stage)
===

* To keep it consistent, maybe we can call the variable 'stage' as above?

>  {
>      QTestState *from, *to;
>      g_autofree char *uri = NULL;
> @@ -784,12 +785,12 @@ void test_postcopy_recovery_common(MigrateCommon *args)
>      wait_for_postcopy_status(to, "postcopy-paused");
>      wait_for_postcopy_status(from, "postcopy-paused");
>
> -    if (args->postcopy_recovery_fail_stage) {
> +    if (fail_stage) {
>          /*
>           * Test when a wrong socket specified for recover, and then the
>           * ability to kick it out, and continue with a correct socket.
>           */
> -        postcopy_recover_fail(from, to, args->postcopy_recovery_fail_stage);
> +        postcopy_recover_fail(from, to, fail_stage);
>          /* continue with a good recovery */
>      }
>
> diff --git a/tests/qtest/migration/postcopy-tests.c b/tests/qtest/migration/postcopy-tests.c
> index 7ae4d765d7..13a5759655 100644
> --- a/tests/qtest/migration/postcopy-tests.c
> +++ b/tests/qtest/migration/postcopy-tests.c
> @@ -41,30 +41,26 @@ static void test_postcopy_preempt(char *name, MigrateCommon *args)
>
>  static void test_postcopy_recovery(char *name, MigrateCommon *args)
>  {
> -    test_postcopy_recovery_common(args);
> +    test_postcopy_recovery_common(args, POSTCOPY_FAIL_NONE);
>  }
>
>  static void test_postcopy_recovery_fail_handshake(char *name,
>                                                    MigrateCommon *args)
>  {
> -    args->postcopy_recovery_fail_stage = POSTCOPY_FAIL_RECOVERY;
> -
> -    test_postcopy_recovery_common(args);
> +    test_postcopy_recovery_common(args, POSTCOPY_FAIL_RECOVERY);
>  }
>
>  static void test_postcopy_recovery_fail_reconnect(char *name,
>                                                    MigrateCommon *args)
>  {
> -    args->postcopy_recovery_fail_stage = POSTCOPY_FAIL_CHANNEL_ESTABLISH;
> -
> -    test_postcopy_recovery_common(args);
> +    test_postcopy_recovery_common(args, POSTCOPY_FAIL_CHANNEL_ESTABLISH);
>  }
>
>  static void test_postcopy_preempt_recovery(char *name, MigrateCommon *args)
>  {
>      args->start.caps[MIGRATION_CAPABILITY_POSTCOPY_PREEMPT] = true;
>
> -    test_postcopy_recovery_common(args);
> +    test_postcopy_recovery_common(args, POSTCOPY_FAIL_NONE);
>  }
>
>  static void migration_test_add_postcopy_smoke(MigrationTestEnv *env)
> diff --git a/tests/qtest/migration/tls-tests.c b/tests/qtest/migration/tls-tests.c
> index 6a20c65104..bf0bb06a29 100644
> --- a/tests/qtest/migration/tls-tests.c
> +++ b/tests/qtest/migration/tls-tests.c
> @@ -385,7 +385,7 @@ static void test_postcopy_recovery_tls_psk(char *name, MigrateCommon *args)
>      args->start_hook = migrate_hook_start_tls_psk_match;
>      args->end_hook = migrate_hook_end_tls_psk;
>
> -    test_postcopy_recovery_common(args);
> +    test_postcopy_recovery_common(args, POSTCOPY_FAIL_NONE);
>  }
>
>  static void test_multifd_postcopy_recovery_tls_psk(char *name,
> @@ -396,7 +396,7 @@ static void test_multifd_postcopy_recovery_tls_psk(char *name,
>
>      args->start.caps[MIGRATION_CAPABILITY_MULTIFD] = true;
>
> -    test_postcopy_recovery_common(args);
> +    test_postcopy_recovery_common(args, POSTCOPY_FAIL_NONE);
>  }
>
>  /* This contains preempt+recovery+tls test altogether */
> @@ -407,7 +407,7 @@ static void test_postcopy_preempt_all(char *name, MigrateCommon *args)
>
>      args->start.caps[MIGRATION_CAPABILITY_POSTCOPY_PREEMPT] = true;
>
> -    test_postcopy_recovery_common(args);
> +    test_postcopy_recovery_common(args, POSTCOPY_FAIL_NONE);
>  }
>
>  static void test_multifd_postcopy_preempt_recovery_tls_psk(char *name,
> @@ -419,7 +419,7 @@ static void test_multifd_postcopy_preempt_recovery_tls_psk(char *name,
>      args->start.caps[MIGRATION_CAPABILITY_MULTIFD] = true;
>      args->start.caps[MIGRATION_CAPABILITY_POSTCOPY_PREEMPT] = true;
>
> -    test_postcopy_recovery_common(args);
> +    test_postcopy_recovery_common(args, POSTCOPY_FAIL_NONE);
>  }
>
>  static void test_precopy_unix_tls_psk(char *name, MigrateCommon *args)

* Change looks okay otherwise.

Thank you.
---
  - Prasad



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

* Re: [PATCH 1/2] tests/migration-test: Remove postcopy_data from MigrateCommon
  2026-01-07 11:23   ` Prasad Pandit
@ 2026-01-07 17:12     ` Peter Xu
  2026-01-08  9:38       ` Prasad Pandit
  0 siblings, 1 reply; 14+ messages in thread
From: Peter Xu @ 2026-01-07 17:12 UTC (permalink / raw)
  To: Prasad Pandit; +Cc: qemu-devel, Fabiano Rosas, Lukas Straub, Juraj Marcin

On Wed, Jan 07, 2026 at 04:53:17PM +0530, Prasad Pandit wrote:
> On Wed, 7 Jan 2026 at 02:04, Peter Xu <peterx@redhat.com> wrote:
> > Now postcopy is not the only user of start_hook / end_hook that will pass
> > in a opaque pointer.  It doesn't need to be defined in MigrateCommon as
> > part of the framework, as all other hook users can pass hook_data around.
> > Do it too for postcopy.
> >
> > Signed-off-by: Peter Xu <peterx@redhat.com>
> > ---
> >  tests/qtest/migration/framework.h |  1 -
> >  tests/qtest/migration/framework.c | 18 ++++++++++--------
> >  2 files changed, 10 insertions(+), 9 deletions(-)
> >
> > diff --git a/tests/qtest/migration/framework.h b/tests/qtest/migration/framework.h
> > index ed85ed502d..0d39bb0d3c 100644
> > --- a/tests/qtest/migration/framework.h
> > +++ b/tests/qtest/migration/framework.h
> > @@ -230,7 +230,6 @@ typedef struct {
> >      bool live;
> >
> >      /* Postcopy specific fields */
> > -    void *postcopy_data;
> >      PostcopyRecoveryFailStage postcopy_recovery_fail_stage;
> >  } MigrateCommon;
> >
> > diff --git a/tests/qtest/migration/framework.c b/tests/qtest/migration/framework.c
> > index e35839c95f..4f46cf8629 100644
> > --- a/tests/qtest/migration/framework.c
> > +++ b/tests/qtest/migration/framework.c
> > @@ -541,6 +541,7 @@ void migrate_end(QTestState *from, QTestState *to, bool test_dest)
> >
> >  static int migrate_postcopy_prepare(QTestState **from_ptr,
> >                                      QTestState **to_ptr,
> > +                                    void **hook_data,
> >                                      MigrateCommon *args)
> >  {
> >      QTestState *from, *to;
> > @@ -554,7 +555,7 @@ static int migrate_postcopy_prepare(QTestState **from_ptr,
> >      }
> >
> >      if (args->start_hook) {
> > -        args->postcopy_data = args->start_hook(from, to);
> > +        *hook_data = args->start_hook(from, to);
> >      }
> >      migrate_ensure_non_converge(from);
> > @@ -582,7 +583,7 @@ static int migrate_postcopy_prepare(QTestState **from_ptr,
> >  }
> >
> >  static void migrate_postcopy_complete(QTestState *from, QTestState *to,
> > -                                      MigrateCommon *args)
> > +                                      void *hook_data, MigrateCommon *args)
> >  {
> >      MigrationTestEnv *env = migration_get_env();
> >
> > @@ -601,8 +602,7 @@ static void migrate_postcopy_complete(QTestState *from, QTestState *to,
> >      }
> >
> >      if (args->end_hook) {
> > -        args->end_hook(from, to, args->postcopy_data);
> > -        args->postcopy_data = NULL;
> > +        args->end_hook(from, to, hook_data);
> >      }
> >
> >      migrate_end(from, to, true);
> > @@ -610,13 +610,14 @@ static void migrate_postcopy_complete(QTestState *from, QTestState *to,
> >
> >  void test_postcopy_common(MigrateCommon *args)
> >  {
> > +    void *hook_data = NULL;
> >      QTestState *from, *to;
> >
> > -    if (migrate_postcopy_prepare(&from, &to, args)) {
> > +    if (migrate_postcopy_prepare(&from, &to, &hook_data, args)) {
> >          return;
> >      }
> >      migrate_postcopy_start(from, to, &src_state);
> > -    migrate_postcopy_complete(from, to, args);
> > +    migrate_postcopy_complete(from, to, hook_data, args);
> >  }
> >
> >  static void wait_for_postcopy_status(QTestState *one, const char *status)
> > @@ -742,6 +743,7 @@ void test_postcopy_recovery_common(MigrateCommon *args)
> >  {
> >      QTestState *from, *to;
> >      g_autofree char *uri = NULL;
> > +    void *hook_data = NULL;
> 
> * Should 'hook_data' pointer be g_autofree too? Where is it free'd otherwise?

hook_data is freed in end_hook().  This patch doesn't change that fact for
postcopy.  It's the smae to non-postcopy tests.

> 
> >      /*
> >       * Always enable OOB QMP capability for recovery tests, migrate-recover is
> > @@ -752,7 +754,7 @@ void test_postcopy_recovery_common(MigrateCommon *args)
> >      /* Always hide errors for postcopy recover tests since they're expected */
> >      args->start.hide_stderr = true;
> >
> > -    if (migrate_postcopy_prepare(&from, &to, args)) {
> > +    if (migrate_postcopy_prepare(&from, &to, &hook_data, args)) {
> >          return;
> >      }
> >
> > @@ -808,7 +810,7 @@ void test_postcopy_recovery_common(MigrateCommon *args)
> >      /* Restore the postcopy bandwidth to unlimited */
> >      migrate_set_parameter_int(from, "max-postcopy-bandwidth", 0);
> >
> > -    migrate_postcopy_complete(from, to, args);
> > +    migrate_postcopy_complete(from, to, hook_data, args);
> >  }
> >
> >  int test_precopy_common(MigrateCommon *args)
> 
> * The changes look okay; But if tests define hook_data = NULL; Where
> does it get populated?

It's populated in start_hook() conditionally.  When populated, it is always
(and a must) to be released in end_hook().

Thanks,

-- 
Peter Xu



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

* Re: [PATCH 2/2] tests/migration-test: Remove postcopy_recovery_fail_stage from MigrateCommon
  2026-01-07 11:37   ` Prasad Pandit
@ 2026-01-07 17:14     ` Peter Xu
  2026-01-08  9:41       ` Prasad Pandit
  0 siblings, 1 reply; 14+ messages in thread
From: Peter Xu @ 2026-01-07 17:14 UTC (permalink / raw)
  To: Prasad Pandit; +Cc: qemu-devel, Fabiano Rosas, Lukas Straub, Juraj Marcin

On Wed, Jan 07, 2026 at 05:07:40PM +0530, Prasad Pandit wrote:
> On Wed, 7 Jan 2026 at 02:04, Peter Xu <peterx@redhat.com> wrote:
> > The parameter can be instead passed into the function.
> 
> * It'll help to include - why? pass the parameter instead.

I want to remove special and unnecessary fields in MigrateCommon struct.

I'll add a sentence when repost.

> 
> > Signed-off-by: Peter Xu <peterx@redhat.com>
> > ---
> >  tests/qtest/migration/framework.h      |  6 ++----
> >  tests/qtest/migration/framework.c      |  7 ++++---
> >  tests/qtest/migration/postcopy-tests.c | 12 ++++--------
> >  tests/qtest/migration/tls-tests.c      |  8 ++++----
> >  4 files changed, 14 insertions(+), 19 deletions(-)
> >
> > diff --git a/tests/qtest/migration/framework.h b/tests/qtest/migration/framework.h
> > index 0d39bb0d3c..bc6cf6040f 100644
> > --- a/tests/qtest/migration/framework.h
> > +++ b/tests/qtest/migration/framework.h
> > @@ -228,9 +228,6 @@ typedef struct {
> >       * refer to existing ones with live=true), or use live=off by default.
> >       */
> >      bool live;
> > -
> > -    /* Postcopy specific fields */
> > -    PostcopyRecoveryFailStage postcopy_recovery_fail_stage;
> >  } MigrateCommon;
> >
> >  void wait_for_serial(const char *side);
> > @@ -243,7 +240,8 @@ int migrate_start(QTestState **from, QTestState **to, const char *uri,
> >  void migrate_end(QTestState *from, QTestState *to, bool test_dest);
> >
> >  void test_postcopy_common(MigrateCommon *args);
> > -void test_postcopy_recovery_common(MigrateCommon *args);
> > +void test_postcopy_recovery_common(MigrateCommon *args,
> > +                                   PostcopyRecoveryFailStage fail_stage);
> >  int test_precopy_common(MigrateCommon *args);
> >  void test_file_common(MigrateCommon *args, bool stop_src);
> >  void *migrate_hook_start_precopy_tcp_multifd_common(QTestState *from,
> > diff --git a/tests/qtest/migration/framework.c b/tests/qtest/migration/framework.c
> > index 4f46cf8629..d7a5ae56f9 100644
> > --- a/tests/qtest/migration/framework.c
> > +++ b/tests/qtest/migration/framework.c
> > @@ -739,7 +739,8 @@ static void postcopy_recover_fail(QTestState *from, QTestState *to,
> >  #endif
> >  }
> >
> > -void test_postcopy_recovery_common(MigrateCommon *args)
> > +void test_postcopy_recovery_common(MigrateCommon *args,
> > +                                   PostcopyRecoveryFailStage fail_stage)
> ===
>     static void postcopy_recover_fail(QTestState *from, QTestState
> *to,
>                                        PostcopyRecoveryFailStage stage)
> ===
> 
> * To keep it consistent, maybe we can call the variable 'stage' as above?

Personally I prefer fail_stage, e.g. fail_stage=NONE means it never fails.
stage==NONE is less clear.

Thanks,

> 
> >  {
> >      QTestState *from, *to;
> >      g_autofree char *uri = NULL;
> > @@ -784,12 +785,12 @@ void test_postcopy_recovery_common(MigrateCommon *args)
> >      wait_for_postcopy_status(to, "postcopy-paused");
> >      wait_for_postcopy_status(from, "postcopy-paused");
> >
> > -    if (args->postcopy_recovery_fail_stage) {
> > +    if (fail_stage) {
> >          /*
> >           * Test when a wrong socket specified for recover, and then the
> >           * ability to kick it out, and continue with a correct socket.
> >           */
> > -        postcopy_recover_fail(from, to, args->postcopy_recovery_fail_stage);
> > +        postcopy_recover_fail(from, to, fail_stage);
> >          /* continue with a good recovery */
> >      }
> >
> > diff --git a/tests/qtest/migration/postcopy-tests.c b/tests/qtest/migration/postcopy-tests.c
> > index 7ae4d765d7..13a5759655 100644
> > --- a/tests/qtest/migration/postcopy-tests.c
> > +++ b/tests/qtest/migration/postcopy-tests.c
> > @@ -41,30 +41,26 @@ static void test_postcopy_preempt(char *name, MigrateCommon *args)
> >
> >  static void test_postcopy_recovery(char *name, MigrateCommon *args)
> >  {
> > -    test_postcopy_recovery_common(args);
> > +    test_postcopy_recovery_common(args, POSTCOPY_FAIL_NONE);
> >  }
> >
> >  static void test_postcopy_recovery_fail_handshake(char *name,
> >                                                    MigrateCommon *args)
> >  {
> > -    args->postcopy_recovery_fail_stage = POSTCOPY_FAIL_RECOVERY;
> > -
> > -    test_postcopy_recovery_common(args);
> > +    test_postcopy_recovery_common(args, POSTCOPY_FAIL_RECOVERY);
> >  }
> >
> >  static void test_postcopy_recovery_fail_reconnect(char *name,
> >                                                    MigrateCommon *args)
> >  {
> > -    args->postcopy_recovery_fail_stage = POSTCOPY_FAIL_CHANNEL_ESTABLISH;
> > -
> > -    test_postcopy_recovery_common(args);
> > +    test_postcopy_recovery_common(args, POSTCOPY_FAIL_CHANNEL_ESTABLISH);
> >  }
> >
> >  static void test_postcopy_preempt_recovery(char *name, MigrateCommon *args)
> >  {
> >      args->start.caps[MIGRATION_CAPABILITY_POSTCOPY_PREEMPT] = true;
> >
> > -    test_postcopy_recovery_common(args);
> > +    test_postcopy_recovery_common(args, POSTCOPY_FAIL_NONE);
> >  }
> >
> >  static void migration_test_add_postcopy_smoke(MigrationTestEnv *env)
> > diff --git a/tests/qtest/migration/tls-tests.c b/tests/qtest/migration/tls-tests.c
> > index 6a20c65104..bf0bb06a29 100644
> > --- a/tests/qtest/migration/tls-tests.c
> > +++ b/tests/qtest/migration/tls-tests.c
> > @@ -385,7 +385,7 @@ static void test_postcopy_recovery_tls_psk(char *name, MigrateCommon *args)
> >      args->start_hook = migrate_hook_start_tls_psk_match;
> >      args->end_hook = migrate_hook_end_tls_psk;
> >
> > -    test_postcopy_recovery_common(args);
> > +    test_postcopy_recovery_common(args, POSTCOPY_FAIL_NONE);
> >  }
> >
> >  static void test_multifd_postcopy_recovery_tls_psk(char *name,
> > @@ -396,7 +396,7 @@ static void test_multifd_postcopy_recovery_tls_psk(char *name,
> >
> >      args->start.caps[MIGRATION_CAPABILITY_MULTIFD] = true;
> >
> > -    test_postcopy_recovery_common(args);
> > +    test_postcopy_recovery_common(args, POSTCOPY_FAIL_NONE);
> >  }
> >
> >  /* This contains preempt+recovery+tls test altogether */
> > @@ -407,7 +407,7 @@ static void test_postcopy_preempt_all(char *name, MigrateCommon *args)
> >
> >      args->start.caps[MIGRATION_CAPABILITY_POSTCOPY_PREEMPT] = true;
> >
> > -    test_postcopy_recovery_common(args);
> > +    test_postcopy_recovery_common(args, POSTCOPY_FAIL_NONE);
> >  }
> >
> >  static void test_multifd_postcopy_preempt_recovery_tls_psk(char *name,
> > @@ -419,7 +419,7 @@ static void test_multifd_postcopy_preempt_recovery_tls_psk(char *name,
> >      args->start.caps[MIGRATION_CAPABILITY_MULTIFD] = true;
> >      args->start.caps[MIGRATION_CAPABILITY_POSTCOPY_PREEMPT] = true;
> >
> > -    test_postcopy_recovery_common(args);
> > +    test_postcopy_recovery_common(args, POSTCOPY_FAIL_NONE);
> >  }
> >
> >  static void test_precopy_unix_tls_psk(char *name, MigrateCommon *args)
> 
> * Change looks okay otherwise.
> 
> Thank you.
> ---
>   - Prasad
> 

-- 
Peter Xu



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

* Re: [PATCH 1/2] tests/migration-test: Remove postcopy_data from MigrateCommon
  2026-01-07 17:12     ` Peter Xu
@ 2026-01-08  9:38       ` Prasad Pandit
  2026-01-14 15:34         ` Peter Xu
  0 siblings, 1 reply; 14+ messages in thread
From: Prasad Pandit @ 2026-01-08  9:38 UTC (permalink / raw)
  To: Peter Xu; +Cc: qemu-devel, Fabiano Rosas, Lukas Straub, Juraj Marcin

On Wed, 7 Jan 2026 at 22:42, Peter Xu <peterx@redhat.com> wrote:
>> * Should 'hook_data' pointer be g_autofree too? Where is it free'd otherwise?
>
> hook_data is freed in end_hook().  This patch doesn't change that fact for
> postcopy.  It's the smae to non-postcopy tests.
>
>> * The changes look okay; But if tests define hook_data = NULL; Where
>> does it get populated?
>
> It's populated in start_hook() conditionally.  When populated, it is always
> (and a must) to be released in end_hook().

===
$ grep -Eri 'test_postcopy_common|test_postcopy_recovery_common'
tests/qtest/migration/ -l
tests/qtest/migration/framework.h
tests/qtest/migration/framework.c
tests/qtest/migration/tls-tests.c
tests/qtest/migration/postcopy-tests.c
===

* Only tls-tests above seem to define and use these hooks properly
along with the hook_data. Postcopy-tests and all other users of
start_hook/end_hook don't seem to use [postcopy|hook]_data at all. Do
we really need this hook_data parameter? Couldn't it be defined as a
tls-tests specific object. (just wondering)

Reviewed-by: Prasad Pandit <pjp@fedoraproject.org>

Thank you.
---
  - Prasad



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

* Re: [PATCH 2/2] tests/migration-test: Remove postcopy_recovery_fail_stage from MigrateCommon
  2026-01-07 17:14     ` Peter Xu
@ 2026-01-08  9:41       ` Prasad Pandit
  2026-01-14 15:36         ` Peter Xu
  0 siblings, 1 reply; 14+ messages in thread
From: Prasad Pandit @ 2026-01-08  9:41 UTC (permalink / raw)
  To: Peter Xu; +Cc: qemu-devel, Fabiano Rosas, Lukas Straub, Juraj Marcin

On Wed, 7 Jan 2026 at 22:45, Peter Xu <peterx@redhat.com> wrote:
> On Wed, Jan 07, 2026 at 05:07:40PM +0530, Prasad Pandit wrote:
> > On Wed, 7 Jan 2026 at 02:04, Peter Xu <peterx@redhat.com> wrote:
> > > The parameter can be instead passed into the function.
> >
> > * It'll help to include - why? pass the parameter instead.
>
> I want to remove special and unnecessary fields in MigrateCommon struct.
>
> I'll add a sentence when repost.
...
> > * To keep it consistent, maybe we can call the variable 'stage' as above?
>
> Personally I prefer fail_stage, e.g. fail_stage=NONE means it never fails.
> stage==NONE is less clear.

* Let's make it fail_stage in both places then?

Reviewed-by: Prasad Pandit <pjp@fedoraproject.org>

Thank you.
---
  - Prasad



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

* Re: [PATCH 1/2] tests/migration-test: Remove postcopy_data from MigrateCommon
  2026-01-08  9:38       ` Prasad Pandit
@ 2026-01-14 15:34         ` Peter Xu
  2026-01-15 11:11           ` Prasad Pandit
  0 siblings, 1 reply; 14+ messages in thread
From: Peter Xu @ 2026-01-14 15:34 UTC (permalink / raw)
  To: Prasad Pandit; +Cc: qemu-devel, Fabiano Rosas, Lukas Straub, Juraj Marcin

On Thu, Jan 08, 2026 at 03:08:04PM +0530, Prasad Pandit wrote:
> On Wed, 7 Jan 2026 at 22:42, Peter Xu <peterx@redhat.com> wrote:
> >> * Should 'hook_data' pointer be g_autofree too? Where is it free'd otherwise?
> >
> > hook_data is freed in end_hook().  This patch doesn't change that fact for
> > postcopy.  It's the smae to non-postcopy tests.
> >
> >> * The changes look okay; But if tests define hook_data = NULL; Where
> >> does it get populated?
> >
> > It's populated in start_hook() conditionally.  When populated, it is always
> > (and a must) to be released in end_hook().
> 
> ===
> $ grep -Eri 'test_postcopy_common|test_postcopy_recovery_common'
> tests/qtest/migration/ -l
> tests/qtest/migration/framework.h
> tests/qtest/migration/framework.c
> tests/qtest/migration/tls-tests.c
> tests/qtest/migration/postcopy-tests.c
> ===
> 
> * Only tls-tests above seem to define and use these hooks properly
> along with the hook_data. Postcopy-tests and all other users of
> start_hook/end_hook don't seem to use [postcopy|hook]_data at all. Do
> we really need this hook_data parameter? Couldn't it be defined as a
> tls-tests specific object. (just wondering)

Sorry I don't follow.  We need the hook_data for cleaning up tls objects
later in end_hook, for either postcopy or other tls tests.

> 
> Reviewed-by: Prasad Pandit <pjp@fedoraproject.org>

Thanks,

> 
> Thank you.
> ---
>   - Prasad
> 

-- 
Peter Xu



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

* Re: [PATCH 2/2] tests/migration-test: Remove postcopy_recovery_fail_stage from MigrateCommon
  2026-01-08  9:41       ` Prasad Pandit
@ 2026-01-14 15:36         ` Peter Xu
  2026-01-15 11:57           ` Prasad Pandit
  0 siblings, 1 reply; 14+ messages in thread
From: Peter Xu @ 2026-01-14 15:36 UTC (permalink / raw)
  To: Prasad Pandit; +Cc: qemu-devel, Fabiano Rosas, Lukas Straub, Juraj Marcin

On Thu, Jan 08, 2026 at 03:11:32PM +0530, Prasad Pandit wrote:
> On Wed, 7 Jan 2026 at 22:45, Peter Xu <peterx@redhat.com> wrote:
> > On Wed, Jan 07, 2026 at 05:07:40PM +0530, Prasad Pandit wrote:
> > > On Wed, 7 Jan 2026 at 02:04, Peter Xu <peterx@redhat.com> wrote:
> > > > The parameter can be instead passed into the function.
> > >
> > > * It'll help to include - why? pass the parameter instead.
> >
> > I want to remove special and unnecessary fields in MigrateCommon struct.
> >
> > I'll add a sentence when repost.
> ...
> > > * To keep it consistent, maybe we can call the variable 'stage' as above?
> >
> > Personally I prefer fail_stage, e.g. fail_stage=NONE means it never fails.
> > stage==NONE is less clear.
> 
> * Let's make it fail_stage in both places then?

Could you explain what's the 2nd place to use it besides the parameter in
test_postcopy_recovery_common()?

> 
> Reviewed-by: Prasad Pandit <pjp@fedoraproject.org>

Thanks,

> 
> Thank you.
> ---
>   - Prasad
> 

-- 
Peter Xu



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

* Re: [PATCH 1/2] tests/migration-test: Remove postcopy_data from MigrateCommon
  2026-01-14 15:34         ` Peter Xu
@ 2026-01-15 11:11           ` Prasad Pandit
  0 siblings, 0 replies; 14+ messages in thread
From: Prasad Pandit @ 2026-01-15 11:11 UTC (permalink / raw)
  To: Peter Xu; +Cc: qemu-devel, Fabiano Rosas, Lukas Straub, Juraj Marcin

On Wed, 14 Jan 2026 at 21:04, Peter Xu <peterx@redhat.com> wrote:
> Sorry I don't follow.  We need the hook_data for cleaning up tls objects
> later in end_hook, for either postcopy or other tls tests.

* Yes, but only start_hook() in tls-tests.c seem to return *hook_data
object and end_hook() there free it. postcopy-tests.c and other tests
don't seem to use *hook_data object; Other start_hooks() functions
return NULL, so there's nothing to free in the end_hook() function.

Thank you.
---
  - Prasad



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

* Re: [PATCH 2/2] tests/migration-test: Remove postcopy_recovery_fail_stage from MigrateCommon
  2026-01-14 15:36         ` Peter Xu
@ 2026-01-15 11:57           ` Prasad Pandit
  2026-01-15 13:44             ` Peter Xu
  0 siblings, 1 reply; 14+ messages in thread
From: Prasad Pandit @ 2026-01-15 11:57 UTC (permalink / raw)
  To: Peter Xu; +Cc: qemu-devel, Fabiano Rosas, Lukas Straub, Juraj Marcin

On Wed, 14 Jan 2026 at 21:06, Peter Xu <peterx@redhat.com> wrote:
> > * Let's make it fail_stage in both places then?
>
> Could you explain what's the 2nd place to use it besides the parameter in
> test_postcopy_recovery_common()?
===
tests/qtest/migration/framework.c:
    static void postcopy_recover_fail(QTestState *from, QTestState *to,
                                       PostcopyRecoveryFailStage stage)
===
This one. ^^

Thank you.
---
  - Prasad



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

* Re: [PATCH 2/2] tests/migration-test: Remove postcopy_recovery_fail_stage from MigrateCommon
  2026-01-15 11:57           ` Prasad Pandit
@ 2026-01-15 13:44             ` Peter Xu
  0 siblings, 0 replies; 14+ messages in thread
From: Peter Xu @ 2026-01-15 13:44 UTC (permalink / raw)
  To: Prasad Pandit; +Cc: qemu-devel, Fabiano Rosas, Lukas Straub, Juraj Marcin

On Thu, Jan 15, 2026 at 05:27:30PM +0530, Prasad Pandit wrote:
> On Wed, 14 Jan 2026 at 21:06, Peter Xu <peterx@redhat.com> wrote:
> > > * Let's make it fail_stage in both places then?
> >
> > Could you explain what's the 2nd place to use it besides the parameter in
> > test_postcopy_recovery_common()?
> ===
> tests/qtest/migration/framework.c:
>     static void postcopy_recover_fail(QTestState *from, QTestState *to,
>                                        PostcopyRecoveryFailStage stage)
> ===
> This one. ^^

I don't have a strong opinion, since that's unrelevant to the current
change, IMHO we can keep it as is.

Thanks,

-- 
Peter Xu



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

end of thread, other threads:[~2026-01-15 13:45 UTC | newest]

Thread overview: 14+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-01-06 20:33 [PATCH 0/2] tests/migration-test: Small cleanup series on postcopy tests Peter Xu
2026-01-06 20:33 ` [PATCH 1/2] tests/migration-test: Remove postcopy_data from MigrateCommon Peter Xu
2026-01-07 11:23   ` Prasad Pandit
2026-01-07 17:12     ` Peter Xu
2026-01-08  9:38       ` Prasad Pandit
2026-01-14 15:34         ` Peter Xu
2026-01-15 11:11           ` Prasad Pandit
2026-01-06 20:33 ` [PATCH 2/2] tests/migration-test: Remove postcopy_recovery_fail_stage " Peter Xu
2026-01-07 11:37   ` Prasad Pandit
2026-01-07 17:14     ` Peter Xu
2026-01-08  9:41       ` Prasad Pandit
2026-01-14 15:36         ` Peter Xu
2026-01-15 11:57           ` Prasad Pandit
2026-01-15 13:44             ` Peter Xu

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.