* [PATCH v2 1/2] tests/migration-test: Remove postcopy_data from MigrateCommon
2026-01-14 15:37 [PATCH v2 0/2] tests/migration-test: Small cleanup series on postcopy tests Peter Xu
@ 2026-01-14 15:37 ` Peter Xu
2026-01-14 15:37 ` [PATCH v2 2/2] tests/migration-test: Remove postcopy_recovery_fail_stage " Peter Xu
2026-01-15 14:19 ` [PATCH v2 0/2] tests/migration-test: Small cleanup series on postcopy tests Fabiano Rosas
2 siblings, 0 replies; 4+ messages in thread
From: Peter Xu @ 2026-01-14 15:37 UTC (permalink / raw)
To: qemu-devel
Cc: Lukas Straub, Fabiano Rosas, Juraj Marcin, peterx, Prasad Pandit
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.
Reviewed-by: Prasad Pandit <ppandit@redhat.com>
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] 4+ messages in thread* [PATCH v2 2/2] tests/migration-test: Remove postcopy_recovery_fail_stage from MigrateCommon
2026-01-14 15:37 [PATCH v2 0/2] tests/migration-test: Small cleanup series on postcopy tests Peter Xu
2026-01-14 15:37 ` [PATCH v2 1/2] tests/migration-test: Remove postcopy_data from MigrateCommon Peter Xu
@ 2026-01-14 15:37 ` Peter Xu
2026-01-15 14:19 ` [PATCH v2 0/2] tests/migration-test: Small cleanup series on postcopy tests Fabiano Rosas
2 siblings, 0 replies; 4+ messages in thread
From: Peter Xu @ 2026-01-14 15:37 UTC (permalink / raw)
To: qemu-devel
Cc: Lukas Straub, Fabiano Rosas, Juraj Marcin, peterx, Prasad Pandit
The parameter can be instead passed into the function to avoid polluting
the global address space of MigrateCommon.
Reviewed-by: Prasad Pandit <ppandit@redhat.com>
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] 4+ messages in thread* Re: [PATCH v2 0/2] tests/migration-test: Small cleanup series on postcopy tests
2026-01-14 15:37 [PATCH v2 0/2] tests/migration-test: Small cleanup series on postcopy tests Peter Xu
2026-01-14 15:37 ` [PATCH v2 1/2] tests/migration-test: Remove postcopy_data from MigrateCommon Peter Xu
2026-01-14 15:37 ` [PATCH v2 2/2] tests/migration-test: Remove postcopy_recovery_fail_stage " Peter Xu
@ 2026-01-15 14:19 ` Fabiano Rosas
2 siblings, 0 replies; 4+ messages in thread
From: Fabiano Rosas @ 2026-01-15 14:19 UTC (permalink / raw)
To: Peter Xu, qemu-devel; +Cc: Lukas Straub, Juraj Marcin, peterx, Prasad Pandit
Peter Xu <peterx@redhat.com> writes:
> v2:
> - add one sentence to commit message of patch 2
>
> 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(-)
Queued, thanks
^ permalink raw reply [flat|nested] 4+ messages in thread