* [PATCH pve-manager 1/4] ui: iso selector: add option to warn about virtio versions with issues
2026-08-25 11:02 [PATCH manager 0/4] fix #7801: ui: warn about problematic virtio versions on iso select Nicolas Frey
@ 2026-08-25 11:02 ` Nicolas Frey
2026-08-25 13:02 ` Maximiliano Sandoval
2026-08-25 11:02 ` [PATCH pve-manager 2/4] ui: cd edit: add `warnVirtio` option to pass to iso selector Nicolas Frey
` (3 subsequent siblings)
4 siblings, 1 reply; 8+ messages in thread
From: Nicolas Frey @ 2026-08-25 11:02 UTC (permalink / raw)
To: pve-devel
based on the known issues as seen on the wiki. If warnVirtio is true,
the filename is matched against "virtio-win-x.x.x.iso" and checks
whether the version number in the filename is in any "from - to" version
range in `virtioIssues`.
Signed-off-by: Nicolas Frey <n.frey@proxmox.com>
---
www/manager6/form/IsoSelector.js | 68 +++++++++++++++++++++++++++++++-
1 file changed, 66 insertions(+), 2 deletions(-)
diff --git a/www/manager6/form/IsoSelector.js b/www/manager6/form/IsoSelector.js
index b2d94ed3..ae6b8d65 100644
--- a/www/manager6/form/IsoSelector.js
+++ b/www/manager6/form/IsoSelector.js
@@ -10,6 +10,7 @@ Ext.define('PVE.form.IsoSelector', {
nodename: undefined,
insideWizard: false,
+ warnVirtio: false,
labelWidth: undefined,
labelAlign: 'right',
@@ -63,6 +64,61 @@ Ext.define('PVE.form.IsoSelector', {
return me.callParent([disabled]);
},
+ virtioIssues: [
+ {
+ from: '0.1.215',
+ to: '0.1.262',
+ message: gettext('Upgrading to version 0.1.266 or newer is recommended.'),
+ },
+ {
+ from: '0.1.285',
+ to: '0.1.285',
+ message: gettext('Downgrading to version 0.1.271 is recommended.'),
+ },
+ ],
+
+ checkVirtioVersion: function (filename) {
+ let me = this;
+ let warningBox = me.lookup('virtioWarning');
+
+ const compareVersions = (a, b) => {
+ let pa = a.split('.').map(Number);
+ let pb = b.split('.').map(Number);
+ let max = Math.max(pa.length, pb.length);
+ for (let i = 0; i < max; i++) {
+ let cmp = (pa[i] || 0) - (pb[i] || 0);
+ if (cmp !== 0) {
+ return cmp;
+ }
+ }
+ return 0;
+ };
+
+ let match = (filename || '').match(/virtio-win[_-](\d+\.\d+\.\d+)/i);
+ let version = match && match[1];
+ let issue =
+ version &&
+ me.virtioIssues.find(
+ (i) => compareVersions(version, i.from) >= 0 && compareVersions(version, i.to) <= 0,
+ );
+
+ if (!issue) {
+ warningBox.setHtml('');
+ return;
+ }
+
+ warningBox.setHtml(
+ '<i class="fa fa-exclamation-triangle warning"></i> ' +
+ gettext('This VirtIO driver version is known to') +
+ ' ' +
+ `<a href="https://pve.proxmox.com/wiki/Windows_VirtIO_Drivers#Known_issues" target="_blank">${gettext(
+ 'cause issues',
+ )}</a>` +
+ '. ' +
+ issue.message,
+ );
+ },
+
referenceHolder: true,
items: [
@@ -105,10 +161,18 @@ Ext.define('PVE.form.IsoSelector', {
},
allowBlank: false,
listeners: {
- change: function () {
- this.up('pveIsoSelector').checkChange();
+ change: function (_field, value) {
+ let selector = this.up('pveIsoSelector');
+ if (selector.warnVirtio) {
+ selector.checkVirtioVersion(value);
+ }
+ selector.checkChange();
},
},
},
+ {
+ xtype: 'displayfield',
+ reference: 'virtioWarning',
+ },
],
});
--
2.47.3
^ permalink raw reply related [flat|nested] 8+ messages in thread* Re: [PATCH pve-manager 1/4] ui: iso selector: add option to warn about virtio versions with issues
2026-08-25 11:02 ` [PATCH pve-manager 1/4] ui: iso selector: add option to warn about virtio versions with issues Nicolas Frey
@ 2026-08-25 13:02 ` Maximiliano Sandoval
0 siblings, 0 replies; 8+ messages in thread
From: Maximiliano Sandoval @ 2026-08-25 13:02 UTC (permalink / raw)
To: Nicolas Frey; +Cc: pve-devel
Nicolas Frey <n.frey@proxmox.com> writes:
> based on the known issues as seen on the wiki. If warnVirtio is true,
> the filename is matched against "virtio-win-x.x.x.iso" and checks
> whether the version number in the filename is in any "from - to" version
> range in `virtioIssues`.
>
> Signed-off-by: Nicolas Frey <n.frey@proxmox.com>
> ---
> www/manager6/form/IsoSelector.js | 68 +++++++++++++++++++++++++++++++-
> 1 file changed, 66 insertions(+), 2 deletions(-)
>
> diff --git a/www/manager6/form/IsoSelector.js b/www/manager6/form/IsoSelector.js
> index b2d94ed3..ae6b8d65 100644
> --- a/www/manager6/form/IsoSelector.js
> +++ b/www/manager6/form/IsoSelector.js
> @@ -10,6 +10,7 @@ Ext.define('PVE.form.IsoSelector', {
>
> nodename: undefined,
> insideWizard: false,
> + warnVirtio: false,
> labelWidth: undefined,
> labelAlign: 'right',
>
> @@ -63,6 +64,61 @@ Ext.define('PVE.form.IsoSelector', {
> return me.callParent([disabled]);
> },
>
> + virtioIssues: [
> + {
> + from: '0.1.215',
> + to: '0.1.262',
> + message: gettext('Upgrading to version 0.1.266 or newer is recommended.'),
> + },
> + {
> + from: '0.1.285',
> + to: '0.1.285',
> + message: gettext('Downgrading to version 0.1.271 is recommended.'),
> + },
> + ],
> +
> + checkVirtioVersion: function (filename) {
> + let me = this;
> + let warningBox = me.lookup('virtioWarning');
> +
> + const compareVersions = (a, b) => {
> + let pa = a.split('.').map(Number);
> + let pb = b.split('.').map(Number);
> + let max = Math.max(pa.length, pb.length);
> + for (let i = 0; i < max; i++) {
> + let cmp = (pa[i] || 0) - (pb[i] || 0);
> + if (cmp !== 0) {
> + return cmp;
> + }
> + }
> + return 0;
> + };
> +
> + let match = (filename || '').match(/virtio-win[_-](\d+\.\d+\.\d+)/i);
> + let version = match && match[1];
> + let issue =
> + version &&
> + me.virtioIssues.find(
> + (i) => compareVersions(version, i.from) >= 0 && compareVersions(version, i.to) <= 0,
> + );
> +
> + if (!issue) {
> + warningBox.setHtml('');
> + return;
> + }
> +
> + warningBox.setHtml(
> + '<i class="fa fa-exclamation-triangle warning"></i> ' +
> + gettext('This VirtIO driver version is known to') +
> + ' ' +
> + `<a href="https://pve.proxmox.com/wiki/Windows_VirtIO_Drivers#Known_issues" target="_blank">${gettext(
> + 'cause issues',
> + )}</a>` +
> + '. ' +
Please use a single gettext call in conjunction with format, e.g.
something like
Ext.String.format(gettext('Version {0} of the VirtIO drivers is
known to causes issues. See {1} for more details), version, uri_with_html_blocks)
> + issue.message,
> + );
> + },
> +
> referenceHolder: true,
>
> items: [
> @@ -105,10 +161,18 @@ Ext.define('PVE.form.IsoSelector', {
> },
> allowBlank: false,
> listeners: {
> - change: function () {
> - this.up('pveIsoSelector').checkChange();
> + change: function (_field, value) {
> + let selector = this.up('pveIsoSelector');
> + if (selector.warnVirtio) {
> + selector.checkVirtioVersion(value);
> + }
> + selector.checkChange();
> },
> },
> },
> + {
> + xtype: 'displayfield',
> + reference: 'virtioWarning',
> + },
> ],
> });
--
Maximiliano
^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH pve-manager 2/4] ui: cd edit: add `warnVirtio` option to pass to iso selector
2026-08-25 11:02 [PATCH manager 0/4] fix #7801: ui: warn about problematic virtio versions on iso select Nicolas Frey
2026-08-25 11:02 ` [PATCH pve-manager 1/4] ui: iso selector: add option to warn about virtio versions with issues Nicolas Frey
@ 2026-08-25 11:02 ` Nicolas Frey
2026-08-25 11:02 ` [PATCH pve-manager 3/4] partially fix #7801: ui: ospanel: warn about problematic virtio versions Nicolas Frey
` (2 subsequent siblings)
4 siblings, 0 replies; 8+ messages in thread
From: Nicolas Frey @ 2026-08-25 11:02 UTC (permalink / raw)
To: pve-devel
Signed-off-by: Nicolas Frey <n.frey@proxmox.com>
---
www/manager6/qemu/CDEdit.js | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/www/manager6/qemu/CDEdit.js b/www/manager6/qemu/CDEdit.js
index c185de53..76712f44 100644
--- a/www/manager6/qemu/CDEdit.js
+++ b/www/manager6/qemu/CDEdit.js
@@ -3,6 +3,7 @@ Ext.define('PVE.qemu.CDInputPanel', {
alias: 'widget.pveQemuCDInputPanel',
insideWizard: false,
+ warnVirtio: false,
onGetValues: function (values) {
var me = this;
@@ -100,6 +101,7 @@ Ext.define('PVE.qemu.CDInputPanel', {
me.isosel = Ext.create('PVE.form.IsoSelector', {
nodename: me.nodename,
insideWizard: me.insideWizard,
+ warnVirtio: me.warnVirtio,
name: 'cdimage',
});
@@ -129,6 +131,7 @@ Ext.define('PVE.qemu.CDEdit', {
extend: 'Proxmox.window.Edit',
width: 400,
+ warnVirtio: false,
initComponent: function () {
var me = this;
@@ -143,6 +146,7 @@ Ext.define('PVE.qemu.CDEdit', {
var ipanel = Ext.create('PVE.qemu.CDInputPanel', {
confid: me.confid,
nodename: nodename,
+ warnVirtio: me.warnVirtio,
});
Ext.applyIf(me, {
--
2.47.3
^ permalink raw reply related [flat|nested] 8+ messages in thread* [PATCH pve-manager 3/4] partially fix #7801: ui: ospanel: warn about problematic virtio versions
2026-08-25 11:02 [PATCH manager 0/4] fix #7801: ui: warn about problematic virtio versions on iso select Nicolas Frey
2026-08-25 11:02 ` [PATCH pve-manager 1/4] ui: iso selector: add option to warn about virtio versions with issues Nicolas Frey
2026-08-25 11:02 ` [PATCH pve-manager 2/4] ui: cd edit: add `warnVirtio` option to pass to iso selector Nicolas Frey
@ 2026-08-25 11:02 ` Nicolas Frey
2026-08-25 11:02 ` [PATCH pve-manager 4/4] partially fix #7801: ui: hardware view: " Nicolas Frey
2026-08-25 14:44 ` [PATCH manager 0/4] fix #7801: ui: warn about problematic virtio versions on iso select Maximiliano Sandoval
4 siblings, 0 replies; 8+ messages in thread
From: Nicolas Frey @ 2026-08-25 11:02 UTC (permalink / raw)
To: pve-devel
only on the virtio iso selector
Fixes: https://bugzilla.proxmox.com/show_bug.cgi?id=7801
Signed-off-by: Nicolas Frey <n.frey@proxmox.com>
---
www/manager6/qemu/OSPanel.js | 1 +
1 file changed, 1 insertion(+)
diff --git a/www/manager6/qemu/OSPanel.js b/www/manager6/qemu/OSPanel.js
index 556ad4c3..dc861746 100644
--- a/www/manager6/qemu/OSPanel.js
+++ b/www/manager6/qemu/OSPanel.js
@@ -161,6 +161,7 @@ Ext.define('PVE.qemu.OSPanel', {
reference: 'isoSelector',
name: 'ide0',
insideWizard: true,
+ warnVirtio: true,
hidden: true,
disabled: true,
bind: {
--
2.47.3
^ permalink raw reply related [flat|nested] 8+ messages in thread* [PATCH pve-manager 4/4] partially fix #7801: ui: hardware view: warn about problematic virtio versions
2026-08-25 11:02 [PATCH manager 0/4] fix #7801: ui: warn about problematic virtio versions on iso select Nicolas Frey
` (2 preceding siblings ...)
2026-08-25 11:02 ` [PATCH pve-manager 3/4] partially fix #7801: ui: ospanel: warn about problematic virtio versions Nicolas Frey
@ 2026-08-25 11:02 ` Nicolas Frey
2026-08-25 14:44 ` [PATCH manager 0/4] fix #7801: ui: warn about problematic virtio versions on iso select Maximiliano Sandoval
4 siblings, 0 replies; 8+ messages in thread
From: Nicolas Frey @ 2026-08-25 11:02 UTC (permalink / raw)
To: pve-devel
based on whether the ostype is windows or not. extends the
`editorFactory` to allow extraOptions to be a callback to allow for lazy
evaluation. this is needed as 'ostype' is not yet instantiated when
eagerly evaluating.
Fixes: https://bugzilla.proxmox.com/show_bug.cgi?id=7801
Signed-off-by: Nicolas Frey <n.frey@proxmox.com>
---
www/manager6/qemu/HardwareView.js | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/www/manager6/qemu/HardwareView.js b/www/manager6/qemu/HardwareView.js
index e6c02299..ae09094f 100644
--- a/www/manager6/qemu/HardwareView.js
+++ b/www/manager6/qemu/HardwareView.js
@@ -805,7 +805,7 @@ Ext.define('PVE.qemu.HardwareView', {
};
let editorFactory = (classPath, extraOptions) => {
- extraOptions = extraOptions || {};
+ extraOptions = (Ext.isFunction(extraOptions) ? extraOptions() : extraOptions) || {};
return () =>
Ext.create(`PVE.qemu.${classPath}`, {
autoShow: true,
@@ -847,7 +847,9 @@ Ext.define('PVE.qemu.HardwareView', {
text: gettext('CD/DVD Drive'),
iconCls: 'pve-itype-icon-cdrom',
disabled: !caps.vms['VM.Config.CDROM'],
- handler: editorFactory('CDEdit'),
+ handler: editorFactory('CDEdit', () => ({
+ warnVirtio: PVE.Utils.is_windows(me.getObjectValue('ostype')),
+ })),
},
{
text: gettext('Network Device'),
--
2.47.3
^ permalink raw reply related [flat|nested] 8+ messages in thread* Re: [PATCH manager 0/4] fix #7801: ui: warn about problematic virtio versions on iso select
2026-08-25 11:02 [PATCH manager 0/4] fix #7801: ui: warn about problematic virtio versions on iso select Nicolas Frey
` (3 preceding siblings ...)
2026-08-25 11:02 ` [PATCH pve-manager 4/4] partially fix #7801: ui: hardware view: " Nicolas Frey
@ 2026-08-25 14:44 ` Maximiliano Sandoval
2026-08-25 14:52 ` Nicolas Frey
4 siblings, 1 reply; 8+ messages in thread
From: Maximiliano Sandoval @ 2026-08-25 14:44 UTC (permalink / raw)
To: Nicolas Frey; +Cc: pve-devel
Nicolas Frey <n.frey@proxmox.com> writes:
> fixes #7801 by scanning for virtio filename regex and warning the user
> if the version has known issues attributed to it [0].
>
> I tried the following approaches to warn the user:
> - via a (quite intrusive) pop-up
> - a warning box after the iso selector
> - an inline hoverable icon on the selector field
>
> I felt the second approach resulted in the best UX, so I went with
> that in this series. If we have any better/more standard way to warn
> about things like these which I missed, please LMK!
>
> [0] https://pve.proxmox.com/wiki/Windows_VirtIO_Drivers
>
> [..]
I built these patches on top of the current head 14a22df35.
Some things I noticed:
- The `pmx-hint` class is generally used for such warnings. The current
approach of an icon works for me, but it does not match how it is done
in multiple other warnings.
- The message "'Upgrading to version 0.1.266 or newer is recommended."
might lead a user to try with the current latest version (0.1.285)
which will then warn them to downgrade. Perhaps mention that 0.1.215
up to 0.1.262 (including/not including) can have read errors and
performance issues and let the user make a decision based on that.
- Same with the downgrade message one sees when trying 0.1.285. These
messages should remain accurate and relevant after we get new releases
of the VirtIO drivers (which might or not have more issues).
- The Hardware panel does not load. I see the following error in the
console:
Uncaught TypeError: can't access property "getById", me.store is undefined
getObjectValue https://10.10.10.148:8006/proxmoxlib.js?ver=v5.2.8-t1786709937:7420
handler https://10.10.10.148:8006/pve2/js/pvemanagerlib.js?ver=9.2.11:57264
editorFactory https://10.10.10.148:8006/pve2/js/pvemanagerlib.js?ver=9.2.11:57221
initComponent https://10.10.10.148:8006/pve2/js/pvemanagerlib.js?ver=9.2.11:57263
ExtJS 8
activateCard https://10.10.10.148:8006/pve2/js/pvemanagerlib.js?ver=9.2.11:15543
selectionchange https://10.10.10.148:8006/pve2/js/pvemanagerlib.js?ver=9.2.11:15487
ExtJS 16
proxmoxlib.js:7420:19
getObjectValue https://10.10.10.148:8006/proxmoxlib.js?ver=v5.2.8-t1786709937:7420
handler https://10.10.10.148:8006/pve2/js/pvemanagerlib.js?ver=9.2.11:57264
editorFactory https://10.10.10.148:8006/pve2/js/pvemanagerlib.js?ver=9.2.11:57221
initComponent https://10.10.10.148:8006/pve2/js/pvemanagerlib.js?ver=9.2.11:57263
ExtJS 8
activateCard https://10.10.10.148:8006/pve2/js/pvemanagerlib.js?ver=9.2.11:15543
selectionchange https://10.10.10.148:8006/pve2/js/pvemanagerlib.js?ver=9.2.11:15487
ExtJS 16
when going to the Hardware Panel of a VM. I am not 100% sure this is
caused by the changes here, but the error is gone after downgrading to
the version in staging.
One thing I was not able to test was whether these warnings were also
visible for VMs having a ostype different than windows.
--
Maximiliano
^ permalink raw reply [flat|nested] 8+ messages in thread