[pve-devel] [PATCH manager 2/4] ui: pci map edit: reintroduce warnings checks
Dominik Csapak
d.csapak at proxmox.com
Mon Jun 19 16:13:05 CEST 2023
they got lost in my last rebase/refactor.
the onLoadCallBack is used to check by the window if there are iommu
groups at all, and the checkIsolated function checks if the selected
ones are in a separate group (in regards to the other devices)
Signed-off-by: Dominik Csapak <d.csapak at proxmox.com>
---
www/manager6/form/MultiPCISelector.js | 5 ++++
www/manager6/window/PCIMapEdit.js | 39 +++++++++++++++++++++++++++
2 files changed, 44 insertions(+)
diff --git a/www/manager6/form/MultiPCISelector.js b/www/manager6/form/MultiPCISelector.js
index e1ef691a..d4fb6364 100644
--- a/www/manager6/form/MultiPCISelector.js
+++ b/www/manager6/form/MultiPCISelector.js
@@ -8,6 +8,9 @@ Ext.define('PVE.form.MultiPCISelector', {
field: 'Ext.form.field.Field',
},
+ // will be called after loading finished
+ onLoadCallBack: Ext.emptyFn,
+
getValue: function() {
let me = this;
return me.value ?? [];
@@ -287,6 +290,8 @@ Ext.define('PVE.form.MultiPCISelector', {
me.callParent();
+ me.mon(me.getStore(), 'load', me.onLoadCallBack);
+
Proxmox.Utils.monStoreErrors(me, me.getStore(), true);
me.setNodename(nodename);
diff --git a/www/manager6/window/PCIMapEdit.js b/www/manager6/window/PCIMapEdit.js
index 516678e0..cd2dbfbe 100644
--- a/www/manager6/window/PCIMapEdit.js
+++ b/www/manager6/window/PCIMapEdit.js
@@ -70,6 +70,44 @@ Ext.define('PVE.window.PCIMapEditWindow', {
me.lookup('iommu_warning').setVisible(
records.every((val) => val.data.iommugroup === -1),
);
+
+ let value = me.lookup('pciselector').getValue();
+ me.checkIsolated(value);
+ },
+
+ checkIsolated: function(value) {
+ let me = this;
+
+ let isIsolated = function(entry) {
+ let isolated = true;
+ let parsed = PVE.Parser.parsePropertyString(entry);
+ parsed.iommugroup = parseInt(parsed.iommugroup, 10);
+ if (!parsed.iommugroup) {
+ return isolated;
+ }
+ me.lookup('pciselector').getStore().each(({ data }) => {
+ let isSubDevice = data.id.startsWith(parsed.path);
+ if (data.iommugroup === parsed.iommugroup && data.id !== parsed.path && !isSubDevice) {
+ isolated = false;
+ return false;
+ }
+ return true;
+ });
+ return isolated;
+ };
+
+ let showWarning = false;
+ if (Ext.isArray(value)) {
+ for (const entry of value) {
+ if (!isIsolated(entry)) {
+ showWarning = true;
+ break;
+ }
+ }
+ } else {
+ showWarning = isIsolated(value);
+ }
+ me.lookup('group_warning').setVisible(showWarning);
},
mdevChange: function(mdevField, value) {
@@ -83,6 +121,7 @@ Ext.define('PVE.window.PCIMapEditWindow', {
pciChange: function(_field, value) {
let me = this;
me.lookup('multiple_warning').setVisible(Ext.isArray(value) && value.length > 1);
+ me.checkIsolated(value);
},
control: {
--
2.30.2
More information about the pve-devel
mailing list