tests/migration-test: Merge shmem_opts into memory_backend

The two parameters are more or less duplicated in migrate_args().  They all
describe the memory type.  When one is used, the other is not.

mem_type currently uses numa parameter to specify the memory backend, while
memory_backend (the two users of such uses "-machine memory-backend=ID").

This patch merges the use of the two variables so that we always generate a
memory object string and put it into "memory_backend" variable.  Now we can
drop shmem_opts parameter in the function.

Meanwhile we always use a memory-backend-* no matter which mem type is
used.  This brings mem_type to be aligned with memory_backend usage, then
we stick with this as this is flexible enough.

This paves way that we merge mem_type and memory_backend in MigrateStart.

Reviewed-by: Juraj Marcin <jmarcin@redhat.com>
Reviewed-by: Fabiano Rosas <farosas@suse.de>
Link: https://lore.kernel.org/r/20251117223908.415965-3-peterx@redhat.com
[peterx: move MEM_TYPE_ANON case upper, per juraj]
Signed-off-by: Peter Xu <peterx@redhat.com>
This commit is contained in:
Peter Xu 2025-11-17 17:39:06 -05:00
parent b187a183b1
commit b1d67d86db

View file

@ -260,23 +260,36 @@ static char *test_shmem_path(void)
return g_strdup_printf("/dev/shm/qemu-%d", getpid());
}
#define MIG_MEM_ID "mig.mem"
/* NOTE: caller is responsbile to free the string if returned */
static char *migrate_mem_type_get_opts(MemType type, const char *memory_size)
{
g_autofree char *shmem_path = NULL;
char *backend = NULL;
g_autofree char *backend = NULL;
bool share = true;
char *opts;
switch (type) {
case MEM_TYPE_ANON:
backend = g_strdup("-object memory-backend-ram");
share = false;
break;
case MEM_TYPE_SHMEM:
shmem_path = test_shmem_path();
backend = g_strdup_printf(
"-object memory-backend-file,id=mem0,size=%s"
",mem-path=%s,share=on -numa node,memdev=mem0",
memory_size, shmem_path);
return backend;
backend = g_strdup_printf("-object memory-backend-file,mem-path=%s",
shmem_path);
break;
default:
return NULL;
g_assert_not_reached();
break;
}
opts = g_strdup_printf("%s,id=%s,size=%s,share=%s",
backend, MIG_MEM_ID, memory_size,
share ? "on" : "off");
return opts;
}
int migrate_args(char **from, char **to, const char *uri, MigrateStart *args)
@ -286,7 +299,7 @@ int migrate_args(char **from, char **to, const char *uri, MigrateStart *args)
gchar *cmd_source = NULL;
gchar *cmd_target = NULL;
const gchar *ignore_stderr;
g_autofree char *shmem_opts = NULL;
g_autofree char *mem_object = NULL;
const char *kvm_opts = NULL;
const char *arch = qtest_get_arch();
const char *memory_size;
@ -350,12 +363,12 @@ int migrate_args(char **from, char **to, const char *uri, MigrateStart *args)
ignore_stderr = "";
}
shmem_opts = migrate_mem_type_get_opts(args->mem_type, memory_size);
if (args->memory_backend) {
memory_backend = g_strdup_printf(args->memory_backend, memory_size);
} else {
memory_backend = g_strdup_printf("-m %s ", memory_size);
mem_object = migrate_mem_type_get_opts(args->mem_type, memory_size);
memory_backend = g_strdup_printf("-machine memory-backend=%s %s",
MIG_MEM_ID, mem_object);
}
if (args->use_dirty_ring) {
@ -378,12 +391,11 @@ int migrate_args(char **from, char **to, const char *uri, MigrateStart *args)
"-name source,debug-threads=on "
"%s "
"-serial file:%s/src_serial "
"%s %s %s %s",
"%s %s %s",
kvm_opts ? kvm_opts : "",
machine, machine_opts,
memory_backend, tmpfs,
arch_opts ? arch_opts : "",
shmem_opts ? shmem_opts : "",
args->opts_source ? args->opts_source : "",
ignore_stderr);
@ -400,13 +412,12 @@ int migrate_args(char **from, char **to, const char *uri, MigrateStart *args)
"%s "
"-serial file:%s/dest_serial "
"-incoming %s "
"%s %s %s %s %s",
"%s %s %s %s",
kvm_opts ? kvm_opts : "",
machine, machine_opts,
memory_backend, tmpfs, uri,
events,
arch_opts ? arch_opts : "",
shmem_opts ? shmem_opts : "",
args->opts_target ? args->opts_target : "",
ignore_stderr);