[pve-devel] [PATCH 28/31] PVE: Allow version code in machine type

Dietmar Maurer dietmar at proxmox.com
Fri Mar 6 12:30:08 CET 2020


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 at proxmox.com>
---
 hw/core/machine-qmp-cmds.c |  6 ++++++
 include/hw/boards.h        |  2 ++
 qapi/machine.json          |  3 ++-
 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 de45087f34..e24d2134c0 100644
--- a/include/hw/boards.h
+++ b/include/hw/boards.h
@@ -185,6 +185,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 cbdb6f6d66..a2bd4dd304 100644
--- a/qapi/machine.json
+++ b/qapi/machine.json
@@ -359,7 +359,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/vl.c b/vl.c
index 4df15640c5..e7f3ce7607 100644
--- a/vl.c
+++ b/vl.c
@@ -2475,6 +2475,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");
@@ -2491,12 +2493,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;
 }
 
-- 
2.20.1




More information about the pve-devel mailing list