102 lines
3.3 KiB
Diff
102 lines
3.3 KiB
Diff
|
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||
|
From: Dietmar Maurer <dietmar@proxmox.com>
|
||
|
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 <s.reiter@proxmox.com>
|
||
|
---
|
||
|
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;
|
||
|
}
|
||
|
|