* [PATCH manager v3] fix #7896: ui: qemu: show effective machine version for Windows guests
@ 2026-08-31 9:46 Jakob Klocker
2026-08-31 10:03 ` applied: " Dominik Csapak
0 siblings, 1 reply; 2+ messages in thread
From: Jakob Klocker @ 2026-08-31 9:46 UTC (permalink / raw)
To: pve-devel
Windows guests without an explicitly pinned machine version still run
with a fixed one: guests created with QEMU 9.1 or newer keep the
version they were created with, older ones fall back to 5.1.
The GUI assumed the 5.1 fallback unconditionally, so guests created
with a newer QEMU were shown a version they are not running. Derive
the version from the QEMU version recorded at creation time instead,
in both the hardware view and the machine edit dialog, and mark it as
implicit so it stays distinguishable from an explicit pin.
The edit dialog also pre-filled the version field with the fallback,
which both suggested a version the guest might not be running and
caused any other change in the dialog to submit that stale value.
Leave the selector at 'latest' instead, so a version can be picked
deliberately, and show the effective version as a read-only field
together with a hint recommending an explicit pin. The advanced
section is expanded so the hint is visible without further
interaction.
Link: https://bugzilla.proxmox.com/show_bug.cgi?id=7896
Signed-off-by: Jakob Klocker <j.klocker@proxmox.com>
---
changes from v2 to v3 (thanks @Dominik):
* drop using the viewmodel for values thare are only set once
changes from v1 to v2 (thanks @Dominik):
* consider viommu during machine-version parsing
* display viommu when the version is implicit
* preserve the current version & note displayed on rese
www/manager6/Utils.js | 22 ++++++++++++++++++
www/manager6/qemu/HardwareView.js | 27 ++++++++++++++++++++--
www/manager6/qemu/MachineEdit.js | 37 +++++++++++++++++++++++++++----
3 files changed, 80 insertions(+), 6 deletions(-)
diff --git a/www/manager6/Utils.js b/www/manager6/Utils.js
index c86a00c5..8b99371d 100644
--- a/www/manager6/Utils.js
+++ b/www/manager6/Utils.js
@@ -1822,6 +1822,28 @@ Ext.define('PVE.Utils', {
return true;
},
+ qemu_implicit_machine_version: function (machineType, creationQemu, arch) {
+ let baseVersion = '5.1';
+ let m = creationQemu?.match(/^(\d+)\.(\d+)/);
+ if (m) {
+ let major = parseInt(m[1], 10);
+ let minor = parseInt(m[2], 10);
+ if (major > 9 || (major === 9 && minor >= 1)) {
+ baseVersion = `${major}.${minor}`;
+ }
+ }
+
+ let base;
+ if (machineType === 'q35') {
+ base = 'pc-q35';
+ } else {
+ let defaultMachine = PVE.qemu.Architecture.defaultMachines[arch];
+ base = defaultMachine === 'virt' ? 'virt' : 'pc-i440fx';
+ }
+
+ return `${base}-${baseVersion}`;
+ },
+
cleanEmptyObjectKeys: function (obj) {
for (const propName of Object.keys(obj)) {
if (obj[propName] === null || obj[propName] === undefined) {
diff --git a/www/manager6/qemu/HardwareView.js b/www/manager6/qemu/HardwareView.js
index e6c02299..f7f4b46f 100644
--- a/www/manager6/qemu/HardwareView.js
+++ b/www/manager6/qemu/HardwareView.js
@@ -197,11 +197,31 @@ Ext.define('PVE.qemu.HardwareView', {
me.getObjectValue('arch'),
nodename,
);
+ let machineConf = PVE.Parser.parsePropertyString(value, 'type');
+ let machineType = machineConf.type;
if (
PVE.Utils.is_windows(ostype) &&
- (!value || value === 'pc' || value === 'q35')
+ (!machineType || machineType === 'pc' || machineType === 'q35')
) {
- return value === 'q35' ? 'pc-q35-5.1' : 'pc-i440fx-5.1';
+ let meta = me.getObjectValue('meta', undefined, pending);
+ let creationQemu;
+ if (meta) {
+ creationQemu = PVE.Parser.parsePropertyString(meta)['creation-qemu'];
+ }
+
+ machineType = machineType === 'q35' ? 'q35' : '__default__';
+ let displayMachine = PVE.Utils.qemu_implicit_machine_version(
+ machineType,
+ creationQemu,
+ arch,
+ );
+
+ let displayValue = displayMachine + ' ' + gettext('(implicit)');
+ if (machineConf.viommu) {
+ displayValue += ', viommu=' + machineConf.viommu;
+ }
+
+ return displayValue;
}
return PVE.Utils.render_qemu_machine(value, arch);
},
@@ -254,6 +274,9 @@ Ext.define('PVE.qemu.HardwareView', {
ostype: {
visible: false,
},
+ meta: {
+ visible: false,
+ },
affinity: {
visible: false,
},
diff --git a/www/manager6/qemu/MachineEdit.js b/www/manager6/qemu/MachineEdit.js
index 4b1a9e83..cd759703 100644
--- a/www/manager6/qemu/MachineEdit.js
+++ b/www/manager6/qemu/MachineEdit.js
@@ -102,10 +102,16 @@ Ext.define('PVE.qemu.MachineInputPanel', {
}
if (me.isWindows) {
- if (values.machine === '__default__') {
- values.version = 'pc-i440fx-5.1';
- } else if (values.machine === 'q35') {
- values.version = 'pc-q35-5.1';
+ if (values.machine === '__default__' || values.machine === 'q35') {
+ let effective = PVE.Utils.qemu_implicit_machine_version(
+ values.machine,
+ values.creationQemu,
+ values.arch,
+ );
+ values.effectiveVersion = effective + ' ' + gettext('(implicit)');
+ me.lookup('effectiveVersion').setVisible(true);
+ me.lookup('implicitVersionHint').setVisible(true);
+ me.setAdvancedVisible(true);
}
}
@@ -176,6 +182,24 @@ Ext.define('PVE.qemu.MachineInputPanel', {
},
},
},
+ {
+ xtype: 'displayfield',
+ name: 'effectiveVersion',
+ fieldLabel: gettext('Current Version'),
+ reference: 'effectiveVersion',
+ submitValue: false,
+ hidden: true,
+ },
+ {
+ xtype: 'displayfield',
+ reference: 'implicitVersionHint',
+ userCls: 'pmx-hint',
+ hidden: true,
+ value: gettext(
+ 'No fixed version is set; the version is chosen automatically based on when the VM' +
+ ' was created. Pinning a specific version is recommended.',
+ ),
+ },
{
xtype: 'displayfield',
fieldLabel: gettext('Note'),
@@ -249,6 +273,11 @@ Ext.define('PVE.qemu.MachineEdit', {
};
values.isWindows = PVE.Utils.is_windows(conf.ostype);
values.arch = PVE.qemu.Architecture.getGuestArchitecture(conf.arch, me.nodename);
+ if (conf.meta) {
+ let meta = PVE.Parser.parsePropertyString(conf.meta);
+ values.creationQemu = meta['creation-qemu'];
+ }
+
me.setValues(values);
},
});
--
2.47.3
^ permalink raw reply related [flat|nested] 2+ messages in thread
* applied: [PATCH manager v3] fix #7896: ui: qemu: show effective machine version for Windows guests
2026-08-31 9:46 [PATCH manager v3] fix #7896: ui: qemu: show effective machine version for Windows guests Jakob Klocker
@ 2026-08-31 10:03 ` Dominik Csapak
0 siblings, 0 replies; 2+ messages in thread
From: Dominik Csapak @ 2026-08-31 10:03 UTC (permalink / raw)
To: pve-devel, Jakob Klocker
On Mon, 31 Aug 2026 11:46:44 +0200, Jakob Klocker wrote:
> Windows guests without an explicitly pinned machine version still run
> with a fixed one: guests created with QEMU 9.1 or newer keep the
> version they were created with, older ones fall back to 5.1.
>
> The GUI assumed the 5.1 fallback unconditionally, so guests created
> with a newer QEMU were shown a version they are not running. Derive
> the version from the QEMU version recorded at creation time instead,
> in both the hardware view and the machine edit dialog, and mark it as
> implicit so it stays distinguishable from an explicit pin.
>
> [...]
Applied, thanks!
[1/1] fix #7896: ui: qemu: show effective machine version for Windows guests
commit: caed2c276889e2469dea5f06031af01ce7c07fd7
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2026-08-31 10:03 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-08-31 9:46 [PATCH manager v3] fix #7896: ui: qemu: show effective machine version for Windows guests Jakob Klocker
2026-08-31 10:03 ` applied: " Dominik Csapak
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.