From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Dietmar Maurer Date: Mon, 6 Apr 2020 12:16:55 +0200 Subject: [PATCH] PVE: Allow version code in machine type E.g. pc-i440fx-4.0+pve3 would print 'pve3' as version code while selecting pc-i440fx-4.0 as machine type. Version is made available as 'pve-version' in query-machines (same as, and only if 'is-current'). Signed-off-by: Stefan Reiter --- hw/core/machine-qmp-cmds.c | 6 ++++++ include/hw/boards.h | 2 ++ qapi/machine.json | 3 ++- softmmu/vl.c | 15 ++++++++++++++- 4 files changed, 24 insertions(+), 2 deletions(-) diff --git a/hw/core/machine-qmp-cmds.c b/hw/core/machine-qmp-cmds.c index 1953633e82..ca8c0dc53d 100644 --- a/hw/core/machine-qmp-cmds.c +++ b/hw/core/machine-qmp-cmds.c @@ -234,6 +234,12 @@ MachineInfoList *qmp_query_machines(Error **errp) if (strcmp(mc->name, MACHINE_GET_CLASS(current_machine)->name) == 0) { info->has_is_current = true; info->is_current = true; + + // PVE version string only exists for current machine + if (mc->pve_version) { + info->has_pve_version = true; + info->pve_version = g_strdup(mc->pve_version); + } } if (mc->default_cpu_type) { diff --git a/include/hw/boards.h b/include/hw/boards.h index fd4d62b501..dd395e9232 100644 --- a/include/hw/boards.h +++ b/include/hw/boards.h @@ -170,6 +170,8 @@ struct MachineClass { const char *desc; const char *deprecation_reason; + const char *pve_version; + void (*init)(MachineState *state); void (*reset)(MachineState *state); void (*wakeup)(MachineState *state); diff --git a/qapi/machine.json b/qapi/machine.json index f6cf28f9fd..a7f9c79a59 100644 --- a/qapi/machine.json +++ b/qapi/machine.json @@ -363,7 +363,8 @@ 'data': { 'name': 'str', '*alias': 'str', '*is-default': 'bool', '*is-current': 'bool', 'cpu-max': 'int', 'hotpluggable-cpus': 'bool', 'numa-mem-supported': 'bool', - 'deprecated': 'bool', '*default-cpu-type': 'str' } } + 'deprecated': 'bool', '*default-cpu-type': 'str', + '*pve-version': 'str' } } ## # @query-machines: diff --git a/softmmu/vl.c b/softmmu/vl.c index 9de81875fd..8340c4ca53 100644 --- a/softmmu/vl.c +++ b/softmmu/vl.c @@ -2300,6 +2300,8 @@ static MachineClass *machine_parse(const char *name, GSList *machines) { MachineClass *mc; GSList *el; + size_t pvever_index = 0; + gchar *name_clean; if (is_help_option(name)) { printf("Supported machines are:\n"); @@ -2316,12 +2318,23 @@ static MachineClass *machine_parse(const char *name, GSList *machines) exit(0); } - mc = find_machine(name, machines); + // PVE version is specified with '+' as seperator, e.g. pc-i440fx+pvever + pvever_index = strcspn(name, "+"); + + name_clean = g_strndup(name, pvever_index); + mc = find_machine(name_clean, machines); + g_free(name_clean); + if (!mc) { error_report("unsupported machine type"); error_printf("Use -machine help to list supported machines\n"); exit(1); } + + if (pvever_index < strlen(name)) { + mc->pve_version = &name[pvever_index+1]; + } + return mc; }