From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from firstgate.proxmox.com (firstgate.proxmox.com [212.224.123.68]) by lore.proxmox.com (Postfix) with ESMTPS id 1626F1FF137 for ; Tue, 03 Feb 2026 11:21:54 +0100 (CET) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id E99C219329; Tue, 3 Feb 2026 11:21:58 +0100 (CET) From: Dominik Csapak To: pve-devel@lists.proxmox.com Subject: [PATCH manager v2 15/17] ui: qemu: make bus selector architecture aware Date: Tue, 3 Feb 2026 11:00:20 +0100 Message-ID: <20260203102118.1430545-16-d.csapak@proxmox.com> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260203102118.1430545-1-d.csapak@proxmox.com> References: <20260203102118.1430545-1-d.csapak@proxmox.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-SPAM-LEVEL: Spam detection results: 0 AWL 0.032 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% DMARC_MISSING 0.1 Missing DMARC policy KAM_DMARC_STATUS 0.01 Test Rule for DKIM or SPF Failure with Strict Alignment SPF_HELO_NONE 0.001 SPF: HELO does not publish an SPF Record SPF_PASS -0.001 SPF: sender matches SPF record Message-ID-Hash: KEZKJMJ5CJT4AR7IH6XYMBTCDGKVT7D6 X-Message-ID-Hash: KEZKJMJ5CJT4AR7IH6XYMBTCDGKVT7D6 X-MailFrom: d.csapak@proxmox.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; loop; banned-address; emergency; member-moderation; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header X-Mailman-Version: 3.3.10 Precedence: list List-Id: Proxmox VE development discussion List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: by turning it into a FilteredKVComboBox. Filter out 'ide' for aarch64. Signed-off-by: Dominik Csapak --- www/manager6/form/BusTypeSelector.js | 4 +++- www/manager6/form/ControllerSelector.js | 17 +++++++++++++++-- www/manager6/qemu/CDEdit.js | 4 ++++ www/manager6/qemu/HDEdit.js | 3 +++ www/manager6/qemu/MultiHDEdit.js | 1 + 5 files changed, 26 insertions(+), 3 deletions(-) diff --git a/www/manager6/form/BusTypeSelector.js b/www/manager6/form/BusTypeSelector.js index 019b2c88..6641ec3a 100644 --- a/www/manager6/form/BusTypeSelector.js +++ b/www/manager6/form/BusTypeSelector.js @@ -1,10 +1,12 @@ Ext.define('PVE.form.BusTypeSelector', { - extend: 'Proxmox.form.KVComboBox', + extend: 'PVE.form.FilteredKVComboBox', alias: 'widget.pveBusSelector', withVirtIO: true, withUnused: false, + allowedValuesPerCategory: PVE.qemu.Architecture.allowedBusses, + initComponent: function () { var me = this; diff --git a/www/manager6/form/ControllerSelector.js b/www/manager6/form/ControllerSelector.js index fee2b398..365c4970 100644 --- a/www/manager6/form/ControllerSelector.js +++ b/www/manager6/form/ControllerSelector.js @@ -24,6 +24,14 @@ Ext.define('PVE.form.ControllerSelector', { } }, + filterListByArchitecture: function (clist, arch) { + let allowedList = PVE.form.BusTypeSelector.prototype.allowedValuesPerCategory[arch]; + if (!allowedList) { + return clist; + } + return clist.filter((controller) => allowedList.indexOf(controller) !== -1); + }, + updateVMConfig: function (vmconfig) { let me = this; me.vmconfig = Ext.apply({}, vmconfig); @@ -40,10 +48,13 @@ Ext.define('PVE.form.ControllerSelector', { let deviceid = me.down('field[name=deviceid]'); let clist; + let arch = PVE.qemu.Architecture.getNodeArchitecture(vmconfig.arch, me.nodename); + bussel.setCategory(arch); if (autoSelect === 'cdrom') { if (!Ext.isDefined(me.vmconfig.ide2)) { - bussel.setValue('ide'); - deviceid.setValue(2); + let [controller, id] = PVE.qemu.Architecture.defaultCDDrive[arch]; + bussel.setValue(controller); + deviceid.setValue(id); return; } clist = ['ide', 'scsi', 'sata']; @@ -52,6 +63,8 @@ Ext.define('PVE.form.ControllerSelector', { clist = PVE.Utils.sortByPreviousUsage(me.vmconfig, me.nodename); } + clist = me.filterListByArchitecture(clist, arch); + me.setToFree(clist, bussel, deviceid); deviceid.validate(); diff --git a/www/manager6/qemu/CDEdit.js b/www/manager6/qemu/CDEdit.js index 80443b35..c185de53 100644 --- a/www/manager6/qemu/CDEdit.js +++ b/www/manager6/qemu/CDEdit.js @@ -55,6 +55,9 @@ Ext.define('PVE.qemu.CDInputPanel', { var me = this; me.isosel.setNodename(nodename); + if (me.bussel) { + me.bussel.setNodename(nodename); + } }, initComponent: function () { @@ -67,6 +70,7 @@ Ext.define('PVE.qemu.CDInputPanel', { if (!me.confid) { me.bussel = Ext.create('PVE.form.ControllerSelector', { withVirtIO: false, + nodename: me.nodename, }); items.push(me.bussel); } diff --git a/www/manager6/qemu/HDEdit.js b/www/manager6/qemu/HDEdit.js index d5ebfdb9..1bb2bfda 100644 --- a/www/manager6/qemu/HDEdit.js +++ b/www/manager6/qemu/HDEdit.js @@ -178,6 +178,7 @@ Ext.define('PVE.qemu.HDInputPanel', { me.lookup('import-source')?.setNodename(nodename); me.lookup('import-source-file')?.setNodename(nodename); me.lookup('import-target')?.setNodename(nodename); + me.lookup('controllerSelector')?.setNodename(nodename); }, hasAdvanced: true, @@ -195,7 +196,9 @@ Ext.define('PVE.qemu.HDInputPanel', { if (!me.confid || me.unused) { me.bussel = Ext.create('PVE.form.ControllerSelector', { + reference: 'controllerSelector', vmconfig: me.vmconfig, + nodename: me.nodename, selectFree: true, }); column1.push(me.bussel); diff --git a/www/manager6/qemu/MultiHDEdit.js b/www/manager6/qemu/MultiHDEdit.js index e69f3885..f6b35121 100644 --- a/www/manager6/qemu/MultiHDEdit.js +++ b/www/manager6/qemu/MultiHDEdit.js @@ -45,6 +45,7 @@ Ext.define('PVE.qemu.MultiHDPanel', { let vm = me.getViewModel(); let res = { + arch: vm.get('current.architecture'), scsihw: vm.get('current.scsihw'), ostype: vm.get('current.ostype'), }; -- 2.47.3