[pve-devel] [PATCH manager v10 1/2] ui: machine: add viommu ComboBox
Markus Frank
m.frank at proxmox.com
Mon Apr 15 10:50:01 CEST 2024
Added a proxmoxKVComboBox for selecting a vIOMMU implementation for a VM.
If i440fx is selected, another ComboBox will be enabled/visible that does not
have the Intel option, as Intel-vIOMMU is not compatible with i440fx.
Uses the new machine property-string from the qemu-server's "config: define
machine schema as property-string" commit and the viommu option added in the
qemu-server's "fix #3784: config: Parameter for guest vIOMMU + test-cases"
commit.
Signed-off-by: Markus Frank <m.frank at proxmox.com>
---
www/manager6/qemu/MachineEdit.js | 62 +++++++++++++++++++++++++++++++-
1 file changed, 61 insertions(+), 1 deletion(-)
diff --git a/www/manager6/qemu/MachineEdit.js b/www/manager6/qemu/MachineEdit.js
index f928c80c..48c72c1d 100644
--- a/www/manager6/qemu/MachineEdit.js
+++ b/www/manager6/qemu/MachineEdit.js
@@ -2,6 +2,15 @@ Ext.define('PVE.qemu.MachineInputPanel', {
extend: 'Proxmox.panel.InputPanel',
xtype: 'pveMachineInputPanel',
+ viewModel: {
+ data: {
+ type: '__default__',
+ },
+ formulas: {
+ q35: get => get('type') === 'q35',
+ },
+ },
+
controller: {
xclass: 'Ext.app.ViewController',
control: {
@@ -35,17 +44,29 @@ Ext.define('PVE.qemu.MachineInputPanel', {
},
onGetValues: function(values) {
+ if (values.delete === 'machine' && values.viommu) {
+ delete values.delete;
+ values.machine = 'pc';
+ }
if (values.version && values.version !== 'latest') {
values.machine = values.version;
delete values.delete;
}
delete values.version;
- return values;
+ if (values.delete === 'machine' && !values.viommu) {
+ return values;
+ }
+ let ret = {};
+ ret.machine = PVE.Parser.printPropertyString(values, 'machine');
+ return ret;
},
setValues: function(values) {
let me = this;
+ let machineConf = PVE.Parser.parsePropertyString(values.machine, 'type');
+ values.machine = machineConf.type;
+
me.isWindows = values.isWindows;
if (values.machine === 'pc') {
values.machine = '__default__';
@@ -58,6 +79,9 @@ Ext.define('PVE.qemu.MachineInputPanel', {
values.version = 'pc-q35-5.1';
}
}
+
+ values.viommu = machineConf.viommu || '__default__';
+
if (values.machine !== '__default__' && values.machine !== 'q35') {
values.version = values.machine;
values.machine = values.version.match(/q35/) ? 'q35' : '__default__';
@@ -78,6 +102,9 @@ Ext.define('PVE.qemu.MachineInputPanel', {
['__default__', PVE.Utils.render_qemu_machine('')],
['q35', 'q35'],
],
+ bind: {
+ value: '{type}',
+ },
},
advancedItems: [
@@ -113,6 +140,39 @@ Ext.define('PVE.qemu.MachineInputPanel', {
fieldLabel: gettext('Note'),
value: gettext('Machine version change may affect hardware layout and settings in the guest OS.'),
},
+ {
+ xtype: 'proxmoxKVComboBox',
+ name: 'viommu',
+ fieldLabel: gettext('vIOMMU'),
+ reference: 'viommu-q35',
+ deleteEmpty: false,
+ value: '__default__',
+ comboItems: [
+ ['__default__', Proxmox.Utils.defaultText + ' (None)'],
+ ['intel', 'Intel'],
+ ['virtio', 'VirtIO'],
+ ],
+ bind: {
+ hidden: '{!q35}',
+ disabled: '{!q35}',
+ },
+ },
+ {
+ xtype: 'proxmoxKVComboBox',
+ name: 'viommu',
+ fieldLabel: gettext('vIOMMU'),
+ reference: 'viommu-i440fx',
+ deleteEmpty: false,
+ value: '__default__',
+ comboItems: [
+ ['__default__', Proxmox.Utils.defaultText + ' (None)'],
+ ['virtio', 'VirtIO'],
+ ],
+ bind: {
+ hidden: '{q35}',
+ disabled: '{q35}',
+ },
+ },
],
});
--
2.39.2
More information about the pve-devel
mailing list